بنقرة واحدة
check-examples
Review example GLX archives for compliance with specification and code
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Review example GLX archives for compliance with specification and code
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Detect drift between go-glx Go types and JSON schemas
Identify drift between specification markdown files and JSON schemas
Identify drift between docs/ folder and specification/schemas/code
Review the GLX specification for issues, contradictions, and ambiguities
| name | check-examples |
| description | Review example GLX archives for compliance with specification and code |
| allowed-tools | ["Read","Grep","Glob","Bash(git rev-parse:*)","Bash(gh issue list:*)","Bash(gh run list:*)","Bash(./bin/glx validate:*)","Bash(./bin/glx --version:*)","Bash(date:*)"] |
| model | claude-opus-4-8 |
Review example GLX archives in docs/examples/ for compliance with the specification and implementation. This skill separates deterministic checks (run by glx validate and CI tests) from the semantic checks only an LLM can make, and emits a machine-readable findings-json block at the end of every run.
Reference materials that govern this skill:
.claude/skills/check-suite/severity-rubric.md.claude/skills/check-suite/findings.schema.jsonSpecification (*.md) → Schema (*.schema.json) → Go code (types.go)
↓
Example archives
(docs/examples/*.glx)
Examples must be valid YAML that the GLX CLI accepts, follow schema definitions in specification/schema/v1/, use valid vocabulary terms, and demonstrate best practices from the specification.
docs/examples/
├── minimal/ # Bare minimum valid archive
├── basic-family/ # Simple family relationships
├── complete-family/ # Full-featured example with all entity types
├── single-file/ # Single-file archive format
├── assertion-workflow/ # Assertion workflow demonstration
├── temporal-properties/ # Temporal property demonstrations
└── participant-assertions/ # Assertion participant patterns
docs/examples/westeros/ is an external-archive pointer, not a reviewable example archive. It contains only a README.md documenting that the live archive lives in a separate repository (github.com/genealogix/glx-archive-westeros). Do not pass it to glx validate and do not loop it into the per-directory checks below. The only westeros task is described in step 5.
Before any semantic review, capture the authoritative, machine-verified results of the GLX CLI validator. These results are ground truth — do not re-derive them by hand in later steps.
git rev-parse HEAD
./bin/glx --version
./bin/glx validate docs/examples/minimal/
./bin/glx validate docs/examples/basic-family/
./bin/glx validate docs/examples/complete-family/
./bin/glx validate docs/examples/single-file/
./bin/glx validate docs/examples/assertion-workflow/
./bin/glx validate docs/examples/temporal-properties/
./bin/glx validate docs/examples/participant-assertions/
For each directory, record:
Do not paraphrase the validator output — quote it so reviewers can audit. Any directory where the validator exits non-zero produces a finding with validator_caught: true, llm_only: false.
The validator is authoritative for entity structure, vocabulary terms, cross-references, and date formats. The CLI runs two validation passes: (1) JSON Schema validation — required fields, types, patterns, mutual exclusivity; (2) Go cross-reference validation — entity reference existence, cycle detection, vocabulary validation, date format validation. Do not re-verify these items by hand.
Only review items that glx validate cannot judge. Findings here get validator_caught: false, llm_only: true.
For each of the seven reviewable example directories:
Does the example actually demonstrate what its directory name and README claim? Specific questions:
assertion-workflow/ show the full assertion lifecycle (created → contested → resolved), or just static assertion entities?temporal-properties/ exercise each temporal property variant documented in the spec?participant-assertions/ cover multiple participant roles?complete-family/ genuinely use all major entity types (Person, Event, Relationship, Place, Source, Citation, Repository, Media, Assertion)?minimal/ remain genuinely minimal — i.e., no entities beyond what is required to be a valid archive?If an example's content does not match its stated purpose, that is a major finding.
person-shakespeare-william-1564) not opaque (e.g., p1, e3).notes fields used appropriately for context that does not belong in structured fields?properties field used only for genuinely custom data, not as a workaround for standard fields?For each example directory, read its README.md and verify:
.glx files.Check whether any example demonstrates recently-added CLI commands (glx add, glx search, glx merge). Note gaps as info-level findings — not all examples need to cover every command, but it is useful to flag where new feature coverage could be added.
Do not re-run field-level or vocabulary-level checks; the validator handles those. Limit this step to structural patterns that require reading the specification prose.
Verify that examples using the multi-file format follow the directory structure described in specification/3-archive-organization.md, and that single-file/ matches the single-file format specification. This is a layout-level check, not a field-level check.
Verify that any custom vocabularies referenced within the examples are properly defined or linked. Standard vocabulary terms are already checked by the validator; this step covers only custom-vocabulary embedding patterns described in the specification.
Roundtrip serialization (YAML deserialize → Go struct → re-serialize → re-validate against per-entity JSON schemas) is checked deterministically by go-glx/example_archives_roundtrip_test.go (TestExampleArchivesRoundTrip), which runs in CI as the test-conformance job in .github/workflows/validate-spec.yml.
Check the CI run for the current HEAD commit — not merely the newest run, which may belong to a different commit and would report a misleading conclusion. Select the run whose headSha equals the full HEAD SHA from Step 1 (git rev-parse HEAD):
gh run list --workflow validate-spec.yml --limit 50 \
--json headSha,status,conclusion,databaseId \
--jq '[.[] | select(.headSha == "<HEAD_SHA>")][0]'
Interpret the selected run (substitute the literal full SHA for <HEAD_SHA>):
validate-spec.yml run yet — e.g., HEAD isn't pushed, or CI hasn't started, or it's older than the last 50 runs) → roundtrip is unverified for HEAD. Do not infer success from an unrelated newer run. Record a positive_notes entry stating roundtrip CI status is unavailable for this commit, and push HEAD / wait for CI if a definitive answer is needed.status is not "completed" ("in_progress", "queued") → the run for HEAD hasn't finished; treat as unverified, exactly as above.conclusion is "success" → roundtrip alignment is verified — record this as a positive note.conclusion is "failure" or "cancelled" → fetch the failing test output from the test-conformance job of that run (use its databaseId) and include it verbatim in the report. The per-entity diff produced by the test is more actionable than any LLM-simulated drift claim. File each failing test case as a critical finding with validator_caught: true, llm_only: false.Do not re-verify type definitions or YAML marshaling by hand. The test exercises every entity in every example against its real schema — reading types.go adds no information the test does not have, and the LLM cannot detect omitempty drops at the YAML level in any case.
docs/examples/westeros/ does not contain .glx files. It is a documentation-only pointer to github.com/genealogix/glx-archive-westeros.
Read docs/examples/westeros/README.md and verify:
docs/examples/westeros/ itself is a complete archive (which would mislead users running glx validate docs/examples/westeros/ and seeing no output).File findings here as minor if the README is misleading; info if everything is clear.
Before writing findings, run:
gh issue list -R genealogix/glx --state open --limit 50 --json number,title --jq '.[] | "#\(.number) \(.title)"'
For each finding you would emit, check whether it matches an already-open GitHub issue. If it does, suppress the finding from the findings array and increment suppressed_as_duplicate_of_known_issue in the summary. Record what you suppressed and why in the prose report, so reviewers can see what was filtered.
Write a human-readable summary covering each example directory. Use one consistent severity notation (severity words: critical, major, minor, info). Include:
After the prose report, emit exactly one fenced findings-json block. The block must conform to .claude/skills/check-suite/findings.schema.json. Required fields per finding: file, severity, category, message, validator_caught, llm_only.
Category enum for this skill:
| Category | Default severity | Description |
|---|---|---|
example_validation | critical | glx validate exits non-zero on this archive |
roundtrip_failure | critical | TestExampleArchivesRoundTrip fails for this archive |
pedagogical | major | Example does not demonstrate what its name/README claims |
best_practices | minor | ID naming, realistic data, notes/properties misuse |
readme_accuracy | minor | README does not match archive contents |
feature_coverage | info | Newer CLI feature not demonstrated by any example |
external_pointer | minor/info | Westeros README misleading or stale |
Severity follows the shared rubric in .claude/skills/check-suite/severity-rubric.md. When uncertain, assign info.
Example output structure:
```findings-json
{
"command": "check-examples",
"commit": "<output of git rev-parse HEAD>",
"checked_files": [
"docs/examples/minimal",
"docs/examples/basic-family",
"docs/examples/complete-family",
"docs/examples/single-file",
"docs/examples/assertion-workflow",
"docs/examples/temporal-properties",
"docs/examples/participant-assertions",
"docs/examples/westeros"
],
"findings": [
{
"file": "docs/examples/complete-family/persons/person-john-smith.glx",
"line": null,
"severity": "minor",
"category": "best_practices",
"message": "Entity ID 'person-john-smith' is ambiguous when multiple persons share the name; consider including birth year.",
"fix": "Rename to 'person-john-smith-1842' or similar disambiguator.",
"validator_caught": false,
"llm_only": true
}
],
"positive_notes": [
"glx validate exits 0 on all seven reviewable example directories",
"TestExampleArchivesRoundTrip passes on HEAD (validate-spec.yml conclusion: success)"
],
"summary": {
"critical": 0,
"major": 0,
"minor": 1,
"info": 0,
"suppressed_as_duplicate_of_known_issue": 0
}
}
```
The telemetry field is injected by the eval harness runner, not self-reported — omit it.
glx validate on an example directory means the example is broken and users cannot use it. These are always critical.glx validate. Re-verifying them by hand is the leading source of false positives in this skill.westeros/ is never passed to glx validate. It contains no .glx files; the validator would silently succeed and the result would be meaningless.validator_caught and llm_only must be logical inverses. If validator_caught is true, llm_only must be false, and vice versa.info when uncertain about severity. A false critical costs more reviewer trust than a missed minor.