원클릭으로
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.