feat(validator): add HARD check for required files in organizations/<org>/#721
Merged
Merged
Conversation
…org>/ Add validate_organization_structure (check apache#16) that enforces every organizations/<org>/ adapter directory contains README.md and organization.md. Clears the Known Gap in the organization-adapters spec: No structural validator check yet enforces required files in organizations/<org>/ (currently README + organization.md by convention). The check is HARD (ORGANIZATION_CATEGORY) so an incomplete adapter directory fails the validator rather than emitting only an advisory. The live tree (ASF/ and independent/) already carries both files, so no existing adapter is broken. The _template/ directory is excluded from the check, matching the existing known_organizations() convention. 8 new test cases in TestOrganizationStructure cover: well-formed org, missing README.md, missing organization.md, both files absent, template exclusion, multi-org sweep, empty organizations/ directory, and the HARD-category assertion. All 433 tests pass (uv run direct). Generated-by: Claude (Opus 4.7)
potiuk
approved these changes
Jul 4, 2026
potiuk
left a comment
Member
There was a problem hiding this comment.
LGTM — adds validate_organization_structure() emitting a HARD organization violation when an organizations/<org>/ directory (excluding _template) lacks README.md or organization.md, wired into run_validation with 8 focused unit tests. The check matches the existing tree (all three live orgs pass, _template correctly excluded), reuses existing symbols, and adds no false positives. Not a skill change, so no eval suite is required. CI green.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Add validate_organization_structure (check #16) that enforces every organizations// adapter directory contains README.md and organization.md. Clears the Known Gap in the organization-adapters spec: No structural validator check yet enforces required files in organizations// (currently README + organization.md by convention).
The check is HARD (ORGANIZATION_CATEGORY) so an incomplete adapter directory fails the validator rather than emitting only an advisory. The live tree (ASF/ and independent/) already carries both files, so no existing adapter is broken. The _template/ directory is excluded from the check, matching the existing known_organizations() convention.
8 new test cases in TestOrganizationStructure cover: well-formed org, missing README.md, missing organization.md, both files absent, template exclusion, multi-org sweep, empty organizations/ directory, and the HARD-category assertion. All 433 tests pass (uv run direct).
Generated-by: Claude (Opus 4.7)
Type of change
.claude/skills/<name>/) — eval fixtures updated belowtools/<system>/*.md)tools/*/withpyproject.toml)docs/,README.md,CONTRIBUTING.md)projects/_template/)prek, workflows, validators)Test plan
prek run --all-filespassesuv run pytest/ruff check/mypypasses(
PYTHONPATH=tools/skill-evals/src python3 -m skill_evals.runner tools/skill-evals/evals/<skill>/)(a regression test for the bug fixed / the behaviour added — see CONTRIBUTING.md)