diff --git a/.github/workflows/repository-metadata-reconcile.yml b/.github/workflows/repository-metadata-reconcile.yml index e05a8b155a..5ea1f753d7 100644 --- a/.github/workflows/repository-metadata-reconcile.yml +++ b/.github/workflows/repository-metadata-reconcile.yml @@ -5,6 +5,7 @@ on: paths: - "config/repository-metadata.json" - "config/repository-label-taxonomy.json" + - "docs/doctoring/repository-label-taxonomy-wave-3.md" - "scripts/ci/reconcile_repository_metadata.py" - "scripts/ci/reconcile_repository_labels.py" - "tests/test_repository_metadata_reconciliation.py" @@ -14,6 +15,7 @@ on: - "tests/test_repository_metadata_workflow.py" - "tests/test_repository_metadata_workflow_pages.py" - "tests/test_repository_label_taxonomy.py" + - "tests/test_repository_label_taxonomy_workflow_trigger.py" - "tests/test_repository_label_reconciliation.py" - "tests/test_repository_label_convergence.py" - "tests/test_repository_label_identity.py" diff --git a/config/repository-label-taxonomy.json b/config/repository-label-taxonomy.json index 4044ee8a8e..12ba653724 100644 --- a/config/repository-label-taxonomy.json +++ b/config/repository-label-taxonomy.json @@ -6,250 +6,162 @@ "documentation": "documentation" }, "assignments": [ - { - "repository": ".github", - "issue": 1579, - "type": "feature" - }, - { - "repository": ".github", - "issue": 1582, - "type": "feature" - }, - { - "repository": ".github", - "issue": 1622, - "type": "feature" - }, - { - "repository": ".github", - "issue": 1625, - "type": "bug" - }, - { - "repository": ".github", - "issue": 1634, - "type": "documentation" - }, - { - "repository": "CalendarWeave", - "issue": 1, - "type": "documentation" - }, - { - "repository": "ConceptWeave", - "issue": 1, - "type": "feature" - }, - { - "repository": "context-graph-contracts", - "issue": 20, - "type": "documentation" - }, - { - "repository": "RankWeave", - "issue": 40, - "type": "documentation" - }, - { - "repository": "fast-mlsirm", - "issue": 1717, - "type": "documentation" - }, - { - "repository": "EgressWeave", - "issue": 231, - "type": "documentation" - }, - { - "repository": "psychometrics-commons", - "issue": 442, - "type": "documentation" - }, - { - "repository": "contextual-orchestrator", - "issue": 994, - "type": "documentation" - }, - { - "repository": "contextual-orchestrator", - "issue": 1003, - "type": "documentation" - }, - { - "repository": "appguardrail", - "issue": 1077, - "type": "documentation" - }, - { - "repository": "naruon", - "issue": 1513, - "type": "documentation" - }, - { - "repository": "LineageWeave", - "issue": 908, - "type": "documentation" - }, - { - "repository": "ContextualWisdomLab.github.io", - "issue": 203, - "type": "documentation" - }, - { - "repository": "TEPP", - "issue": 435, - "type": "documentation" - }, - { - "repository": "semantic-data-portal", - "issue": 72, - "type": "documentation" - }, - { - "repository": "Orgmetra", - "issue": 160, - "type": "documentation" - }, - { - "repository": "learning-interoperability-contracts", - "issue": 1, - "type": "feature" - }, - { - "repository": "noema", - "issue": 530, - "type": "feature" - }, - { - "repository": "bandscope", - "issue": 1125, - "type": "documentation" - }, - { - "repository": "saju-caldav", - "issue": 44, - "type": "documentation" - }, - { - "repository": "OriginWeave", - "issue": 274, - "type": "documentation" - }, - { - "repository": "semantic-data-portal", - "issue": 90, - "type": "documentation" - }, - { - "repository": "accounting-information-platform", - "issue": 45, - "type": "documentation" - }, - { - "repository": "clearfolio", - "issue": 538, - "type": "documentation" - }, - { - "repository": "pg-erd-cloud", - "issue": 1046, - "type": "documentation" - }, - { - "repository": "DiagramWeave", - "issue": 34, - "type": "documentation" - }, - { - "repository": "keyverse", - "issue": 103, - "type": "feature" - }, - { - "repository": "mhtml-etl-gateway", - "issue": 56, - "type": "documentation" - }, - { - "repository": "j-planner", - "issue": 2, - "type": "documentation" - }, - { - "repository": "learning-record-store", - "issue": 1, - "type": "documentation" - }, - { - "repository": "learning-content-studio", - "issue": 1, - "type": "documentation" - }, - { - "repository": "learning-management-platform", - "issue": 1, - "type": "documentation" - }, - { - "repository": "metering-billing-platform", - "issue": 157, - "type": "documentation" - }, - { - "repository": "PolicyWeave", - "issue": 1, - "type": "feature" - }, - { - "repository": "supply-chain-control-plane", - "issue": 1, - "type": "feature" - }, - { - "repository": "governance-risk-compliance", - "issue": 65, - "type": "documentation" - }, - { - "repository": "pingora-gateway", - "issue": 4, - "type": "documentation" - }, - { - "repository": "life-os", - "issue": 211, - "type": "documentation" - }, - { - "repository": "scopeweave", - "issue": 650, - "type": "documentation" - }, - { - "repository": "newsdom-api", - "issue": 782, - "type": "documentation" - }, - { - "repository": "kaefa", - "issue": 81, - "type": "documentation" - }, - { - "repository": "kaefa", - "issue": 82, - "type": "documentation" - }, - { - "repository": "aFIPC", - "issue": 261, - "type": "documentation" - }, - { - "repository": "nonnest2", - "issue": 115, - "type": "documentation" - } + {"repository": ".github", "issue": 1579, "type": "feature"}, + {"repository": ".github", "issue": 1582, "type": "feature"}, + {"repository": ".github", "issue": 1622, "type": "feature"}, + {"repository": ".github", "issue": 1625, "type": "bug"}, + {"repository": ".github", "issue": 1634, "type": "documentation"}, + {"repository": "CalendarWeave", "issue": 1, "type": "documentation"}, + {"repository": "ConceptWeave", "issue": 1, "type": "feature"}, + {"repository": "context-graph-contracts", "issue": 20, "type": "documentation"}, + {"repository": "ThreadWeave", "issue": 37, "type": "documentation"}, + {"repository": "RankWeave", "issue": 40, "type": "documentation"}, + {"repository": "fast-mlsirm", "issue": 1717, "type": "bug"}, + {"repository": "fast-mlsirm", "issue": 1716, "type": "documentation"}, + {"repository": "EgressWeave", "issue": 231, "type": "documentation"}, + {"repository": "EgressWeave", "issue": 190, "type": "documentation"}, + {"repository": "psychometrics-commons", "issue": 434, "type": "documentation"}, + {"repository": "contextual-orchestrator", "issue": 994, "type": "documentation"}, + {"repository": "appguardrail", "issue": 1077, "type": "documentation"}, + {"repository": "naruon", "issue": 1513, "type": "documentation"}, + {"repository": "LineageWeave", "issue": 908, "type": "documentation"}, + {"repository": "ContextualWisdomLab.github.io", "issue": 203, "type": "documentation"}, + {"repository": "TEPP", "issue": 435, "type": "documentation"}, + {"repository": "semantic-data-portal", "issue": 72, "type": "documentation"}, + {"repository": "Orgmetra", "issue": 160, "type": "documentation"}, + {"repository": "learning-interoperability-contracts", "issue": 1, "type": "feature"}, + {"repository": "noema", "issue": 530, "type": "feature"}, + {"repository": "bandscope", "issue": 1125, "type": "documentation"}, + {"repository": "bandscope", "issue": 1116, "type": "documentation"}, + {"repository": "saju-caldav", "issue": 44, "type": "documentation"}, + {"repository": "saju-caldav", "issue": 42, "type": "documentation"}, + {"repository": "OriginWeave", "issue": 274, "type": "documentation"}, + {"repository": "OriginWeave", "issue": 238, "type": "documentation"}, + {"repository": "semantic-data-portal", "issue": 90, "type": "documentation"}, + {"repository": "accounting-information-platform", "issue": 37, "type": "documentation"}, + {"repository": "clearfolio", "issue": 538, "type": "documentation"}, + {"repository": "disksage", "issue": 315, "type": "documentation"}, + {"repository": "pg-erd-cloud", "issue": 1046, "type": "documentation"}, + {"repository": "pg-erd-cloud", "issue": 1040, "type": "documentation"}, + {"repository": "DiagramWeave", "issue": 34, "type": "documentation"}, + {"repository": "DiagramWeave", "issue": 33, "type": "documentation"}, + {"repository": "keyverse", "issue": 103, "type": "feature"}, + {"repository": "mhtml-etl-gateway", "issue": 56, "type": "documentation"}, + {"repository": "mhtml-etl-gateway", "issue": 44, "type": "documentation"}, + {"repository": "j-planner", "issue": 2, "type": "documentation"}, + {"repository": "learning-record-store", "issue": 1, "type": "documentation"}, + {"repository": "learning-content-studio", "issue": 1, "type": "documentation"}, + {"repository": "learning-management-platform", "issue": 1, "type": "documentation"}, + {"repository": "metering-billing-platform", "issue": 157, "type": "documentation"}, + {"repository": "PolicyWeave", "issue": 1, "type": "feature"}, + {"repository": "supply-chain-control-plane", "issue": 1, "type": "feature"}, + {"repository": "governance-risk-compliance", "issue": 65, "type": "documentation"}, + {"repository": "pingora-gateway", "issue": 4, "type": "documentation"}, + {"repository": "life-os", "issue": 211, "type": "documentation"}, + {"repository": "scopeweave", "issue": 651, "type": "documentation"}, + {"repository": "scopeweave", "issue": 625, "type": "documentation"}, + {"repository": "newsdom-api", "issue": 782, "type": "documentation"}, + {"repository": "kaefa", "issue": 81, "type": "documentation"}, + {"repository": "kaefa", "issue": 82, "type": "documentation"}, + {"repository": "aFIPC", "issue": 261, "type": "documentation"}, + {"repository": "nonnest2", "issue": 115, "type": "documentation"}, + {"repository": "nonnest2", "issue": 84, "type": "bug"}, + {"repository": "wardnet", "issue": 130, "type": "documentation"}, + {"repository": "four-pillars", "issue": 31, "type": "bug"}, + {"repository": "enterprise-architecture-core", "issue": 18, "type": "documentation"}, + {"repository": "enterprise-architecture-core", "issue": 37, "type": "documentation"}, + {"repository": "html4tree", "issue": 588, "type": "bug"}, + {"repository": "newsdom-api", "issue": 774, "type": "bug"}, + {"repository": "seedream_evasepic", "issue": 381, "type": "bug"}, + {"repository": "seedream_evasepic", "issue": 384, "type": "bug"}, + {"repository": "seedream_evasepic", "issue": 387, "type": "bug"}, + {"repository": "seedream_evasepic", "issue": 379, "type": "bug"}, + {"repository": "seedream_evasepic", "issue": 354, "type": "bug"}, + {"repository": "seedream_evasepic", "issue": 388, "type": "documentation"}, + {"repository": "aFIPC", "issue": 316, "type": "bug"}, + {"repository": "aFIPC", "issue": 318, "type": "feature"}, + {"repository": "aFIPC", "issue": 317, "type": "feature"}, + {"repository": "aFIPC", "issue": 314, "type": "bug"}, + {"repository": "aFIPC", "issue": 311, "type": "bug"}, + {"repository": "aFIPC", "issue": 315, "type": "feature"}, + {"repository": "aFIPC", "issue": 313, "type": "bug"}, + {"repository": "aFIPC", "issue": 312, "type": "feature"}, + {"repository": "aFIPC", "issue": 310, "type": "feature"}, + {"repository": "aFIPC", "issue": 309, "type": "bug"}, + {"repository": "aFIPC", "issue": 308, "type": "feature"}, + {"repository": "g7", "issue": 3, "type": "documentation"}, + {"repository": "codec-carver", "issue": 513, "type": "bug"}, + {"repository": "codec-carver", "issue": 516, "type": "documentation"}, + {"repository": "noema", "issue": 531, "type": "bug"}, + {"repository": "semantic-data-portal", "issue": 91, "type": "bug"}, + {"repository": "learning-content-studio", "issue": 3, "type": "feature"}, + {"repository": "learning-record-store", "issue": 3, "type": "feature"}, + {"repository": "bandscope", "issue": 985, "type": "feature"}, + {"repository": "fast-mlsirm", "issue": 1691, "type": "bug"}, + {"repository": ".github", "issue": 1613, "type": "bug"}, + {"repository": ".github", "issue": 1637, "type": "bug"}, + {"repository": "contextual-orchestrator", "issue": 998, "type": "bug"}, + {"repository": "contextual-orchestrator", "issue": 1001, "type": "bug"}, + {"repository": "LineageWeave", "issue": 906, "type": "bug"}, + {"repository": "fast-mlsirm", "issue": 1720, "type": "feature"}, + {"repository": "fast-mlsirm", "issue": 1713, "type": "feature"}, + {"repository": "governance-risk-compliance", "issue": 61, "type": "feature"}, + {"repository": "governance-risk-compliance", "issue": 63, "type": "feature"}, + {"repository": "EgressWeave", "issue": 82, "type": "feature"}, + {"repository": ".github", "issue": 1234, "type": "bug"}, + {"repository": ".github", "issue": 1565, "type": "feature"}, + {"repository": "life-os", "issue": 129, "type": "feature"}, + {"repository": "life-os", "issue": 130, "type": "feature"}, + {"repository": "quarantine-sandbox-runtime", "issue": 7, "type": "bug"}, + {"repository": "quarantine-sandbox-runtime", "issue": 4, "type": "bug"}, + {"repository": "TEPP", "issue": 174, "type": "feature"}, + {"repository": "TEPP", "issue": 175, "type": "feature"}, + {"repository": ".github", "issue": 1686, "type": "documentation"}, + {"repository": ".github", "issue": 1687, "type": "documentation"}, + {"repository": ".github", "issue": 1688, "type": "documentation"}, + {"repository": ".github", "issue": 1689, "type": "documentation"}, + {"repository": "keyverse", "issue": 130, "type": "documentation"}, + {"repository": "argos", "issue": 550, "type": "feature"}, + {"repository": "contextual-orchestrator", "issue": 1012, "type": "feature"}, + {"repository": "naruon", "issue": 1520, "type": "bug"}, + {"repository": "contextual-orchestrator", "issue": 1013, "type": "bug"}, + {"repository": "TEPP", "issue": 480, "type": "bug"}, + {"repository": "life-os", "issue": 208, "type": "bug"}, + {"repository": "contextual-orchestrator", "issue": 1014, "type": "feature"}, + {"repository": "fast-mlsirm", "issue": 1727, "type": "feature"}, + {"repository": "fast-mlsirm", "issue": 1457, "type": "feature"}, + {"repository": ".github", "issue": 1685, "type": "feature"}, + {"repository": "quarantine-sandbox-runtime", "issue": 1, "type": "feature"}, + {"repository": "quarantine-sandbox-runtime", "issue": 6, "type": "feature"}, + {"repository": "quarantine-sandbox-runtime", "issue": 9, "type": "feature"}, + {"repository": "quarantine-sandbox-runtime", "issue": 13, "type": "feature"}, + {"repository": "ConceptWeave", "issue": 5, "type": "feature"}, + {"repository": "pingora-gateway", "issue": 7, "type": "feature"}, + {"repository": "accounting-information-platform", "issue": 41, "type": "documentation"}, + {"repository": "newsdom-api", "issue": 781, "type": "feature"}, + {"repository": ".github", "issue": 1692, "type": "documentation"}, + {"repository": "html4tree", "issue": 600, "type": "documentation"}, + {"repository": "nonnest2", "issue": 118, "type": "documentation"}, + {"repository": "argos", "issue": 553, "type": "bug"}, + {"repository": "newsdom-api", "issue": 756, "type": "bug"}, + {"repository": "LineageWeave", "issue": 915, "type": "feature"}, + {"repository": "contextual-orchestrator", "issue": 1009, "type": "feature"}, + {"repository": "pg-llm-batch", "issue": 323, "type": "feature"}, + {"repository": "scopeweave", "issue": 653, "type": "bug"}, + {"repository": "naruon", "issue": 1349, "type": "documentation"}, + {"repository": "appguardrail", "issue": 999, "type": "documentation"}, + {"repository": "naruon", "issue": 1322, "type": "documentation"}, + {"repository": "RankWeave", "issue": 41, "type": "documentation"}, + {"repository": "pg-erd-cloud", "issue": 737, "type": "documentation"}, + {"repository": "kaefa", "issue": 75, "type": "documentation"}, + {"repository": "semantic-data-portal", "issue": 64, "type": "documentation"}, + {"repository": "newsdom-api", "issue": 672, "type": "documentation"}, + {"repository": "clearfolio", "issue": 485, "type": "documentation"}, + {"repository": "pg-erd-cloud", "issue": 942, "type": "documentation"}, + {"repository": "aFIPC", "issue": 208, "type": "documentation"}, + {"repository": "aFIPC", "issue": 210, "type": "documentation"}, + {"repository": "feelanet-adfs", "issue": 17, "type": "documentation"}, + {"repository": "inkspan", "issue": 154, "type": "documentation"}, + {"repository": "newsdom-api", "issue": 577, "type": "documentation"} ] } diff --git a/docs/doctoring/repository-label-taxonomy-wave-3.md b/docs/doctoring/repository-label-taxonomy-wave-3.md new file mode 100644 index 0000000000..c30ddc18b4 --- /dev/null +++ b/docs/doctoring/repository-label-taxonomy-wave-3.md @@ -0,0 +1,121 @@ +# Repository label taxonomy — public-surface wave 3 + +**Recorded:** 2026-09-02 +**Owner:** `ContextualWisdomLab/.github` + +This supplement extends the reviewed semantic type inventory without changing repository-local priority, workflow-status, security, maintenance, or component labels. The organization-wide desired state now has **157 active evidence-backed label targets**; the reconciled operating baseline enumerates 47 active targets, and this wave adds the 110 reviewed targets below. + +The explicit label assignments cover 157 active evidence-backed targets across the baseline and this supplement. + +- `ContextualWisdomLab/ThreadWeave#37` +- `ContextualWisdomLab/fast-mlsirm#1716` +- `ContextualWisdomLab/EgressWeave#190` +- `ContextualWisdomLab/saju-caldav#42` +- `ContextualWisdomLab/pg-erd-cloud#1040` +- `ContextualWisdomLab/DiagramWeave#33` +- `ContextualWisdomLab/mhtml-etl-gateway#44` +- `ContextualWisdomLab/scopeweave#625` +- `ContextualWisdomLab/wardnet#130` +- `ContextualWisdomLab/four-pillars#31` +- `ContextualWisdomLab/enterprise-architecture-core#18` +- `ContextualWisdomLab/enterprise-architecture-core#37` +- `ContextualWisdomLab/bandscope#1116` +- `ContextualWisdomLab/OriginWeave#238` +- `ContextualWisdomLab/accounting-information-platform#37` +- `ContextualWisdomLab/disksage#315` +- `ContextualWisdomLab/html4tree#588` +- `ContextualWisdomLab/newsdom-api#774` +- `ContextualWisdomLab/seedream_evasepic#381` +- `ContextualWisdomLab/seedream_evasepic#384` +- `ContextualWisdomLab/seedream_evasepic#387` +- `ContextualWisdomLab/seedream_evasepic#379` +- `ContextualWisdomLab/seedream_evasepic#354` +- `ContextualWisdomLab/seedream_evasepic#388` +- `ContextualWisdomLab/aFIPC#316` +- `ContextualWisdomLab/aFIPC#318` +- `ContextualWisdomLab/aFIPC#317` +- `ContextualWisdomLab/aFIPC#314` +- `ContextualWisdomLab/aFIPC#311` +- `ContextualWisdomLab/aFIPC#315` +- `ContextualWisdomLab/aFIPC#313` +- `ContextualWisdomLab/aFIPC#312` +- `ContextualWisdomLab/aFIPC#310` +- `ContextualWisdomLab/aFIPC#309` +- `ContextualWisdomLab/aFIPC#308` +- `ContextualWisdomLab/g7#3` +- `ContextualWisdomLab/codec-carver#513` +- `ContextualWisdomLab/codec-carver#516` +- `ContextualWisdomLab/noema#531` +- `ContextualWisdomLab/semantic-data-portal#91` +- `ContextualWisdomLab/learning-content-studio#3` +- `ContextualWisdomLab/learning-record-store#3` +- `ContextualWisdomLab/bandscope#985` +- `ContextualWisdomLab/fast-mlsirm#1691` +- `ContextualWisdomLab/.github#1613` +- `ContextualWisdomLab/.github#1637` +- `ContextualWisdomLab/contextual-orchestrator#998` +- `ContextualWisdomLab/contextual-orchestrator#1001` +- `ContextualWisdomLab/LineageWeave#906` +- `ContextualWisdomLab/fast-mlsirm#1720` +- `ContextualWisdomLab/fast-mlsirm#1713` +- `ContextualWisdomLab/governance-risk-compliance#61` +- `ContextualWisdomLab/governance-risk-compliance#63` +- `ContextualWisdomLab/EgressWeave#82` +- `ContextualWisdomLab/.github#1234` +- `ContextualWisdomLab/.github#1565` +- `ContextualWisdomLab/life-os#129` +- `ContextualWisdomLab/life-os#130` +- `ContextualWisdomLab/quarantine-sandbox-runtime#7` +- `ContextualWisdomLab/quarantine-sandbox-runtime#4` +- `ContextualWisdomLab/TEPP#174` +- `ContextualWisdomLab/TEPP#175` +- `ContextualWisdomLab/nonnest2#84` +- `ContextualWisdomLab/.github#1686` +- `ContextualWisdomLab/.github#1687` +- `ContextualWisdomLab/.github#1688` +- `ContextualWisdomLab/.github#1689` +- `ContextualWisdomLab/keyverse#130` +- `ContextualWisdomLab/argos#550` +- `ContextualWisdomLab/contextual-orchestrator#1012` +- `ContextualWisdomLab/naruon#1520` +- `ContextualWisdomLab/contextual-orchestrator#1013` +- `ContextualWisdomLab/TEPP#480` +- `ContextualWisdomLab/life-os#208` +- `ContextualWisdomLab/contextual-orchestrator#1014` +- `ContextualWisdomLab/fast-mlsirm#1727` +- `ContextualWisdomLab/fast-mlsirm#1457` +- `ContextualWisdomLab/.github#1685` +- `ContextualWisdomLab/quarantine-sandbox-runtime#1` +- `ContextualWisdomLab/quarantine-sandbox-runtime#6` +- `ContextualWisdomLab/quarantine-sandbox-runtime#9` +- `ContextualWisdomLab/quarantine-sandbox-runtime#13` +- `ContextualWisdomLab/ConceptWeave#5` +- `ContextualWisdomLab/pingora-gateway#7` +- `ContextualWisdomLab/accounting-information-platform#41` +- `ContextualWisdomLab/newsdom-api#781` +- `ContextualWisdomLab/.github#1692` +- `ContextualWisdomLab/html4tree#600` +- `ContextualWisdomLab/nonnest2#118` +- `ContextualWisdomLab/argos#553` +- `ContextualWisdomLab/newsdom-api#756` +- `ContextualWisdomLab/LineageWeave#915` +- `ContextualWisdomLab/contextual-orchestrator#1009` +- `ContextualWisdomLab/pg-llm-batch#323` +- `ContextualWisdomLab/scopeweave#653` +- `ContextualWisdomLab/naruon#1349` +- `ContextualWisdomLab/appguardrail#999` +- `ContextualWisdomLab/naruon#1322` +- `ContextualWisdomLab/RankWeave#41` +- `ContextualWisdomLab/pg-erd-cloud#737` +- `ContextualWisdomLab/kaefa#75` +- `ContextualWisdomLab/semantic-data-portal#64` +- `ContextualWisdomLab/newsdom-api#672` +- `ContextualWisdomLab/clearfolio#485` +- `ContextualWisdomLab/pg-erd-cloud#942` +- `ContextualWisdomLab/aFIPC#208` +- `ContextualWisdomLab/aFIPC#210` +- `ContextualWisdomLab/feelanet-adfs#17` +- `ContextualWisdomLab/inkspan#154` +- `ContextualWisdomLab/newsdom-api#577` + +Each target records the evidence-backed primary semantic type established from current PR/issue scope and live repository labels: documentation for public-surface writers, bug for security/correctness/commercial-policy defects, and feature for buyer-facing product capabilities. Recording semantic type does not make Draft work Ready, unblock blocked work, transfer merge authority, or override repository-local priority/status/security/component labels. The reconciliation contract continues to preserve labels outside the centrally managed semantic set. diff --git a/docs/doctoring/repository-public-surface-reconciliation.md b/docs/doctoring/repository-public-surface-reconciliation.md index 9cb406d159..f91aef6d3a 100644 --- a/docs/doctoring/repository-public-surface-reconciliation.md +++ b/docs/doctoring/repository-public-surface-reconciliation.md @@ -62,7 +62,7 @@ The newest cohort has explicit source ownership: `ContextualWisdomLab/PolicyWeav An Actions-backed repository is not enrolled merely because `pages_mode: workflow` is supported. Enrollment requires an explicit reviewed manifest change after the repository's standard Pages workflow and live `build_type: workflow` configuration both exist. This preserves the deployment architecture of repositories such as ScopeWeave instead of silently rewriting them to legacy `/docs`. -The explicit label assignments cover 49 active evidence-backed targets: `ContextualWisdomLab/.github#1579`, `ContextualWisdomLab/.github#1582`, `ContextualWisdomLab/.github#1622`, `ContextualWisdomLab/.github#1625`, `ContextualWisdomLab/.github#1634`, `ContextualWisdomLab/CalendarWeave#1`, `ContextualWisdomLab/ConceptWeave#1`, `ContextualWisdomLab/context-graph-contracts#20`, `ContextualWisdomLab/RankWeave#40`, `ContextualWisdomLab/fast-mlsirm#1717`, `ContextualWisdomLab/EgressWeave#231`, `ContextualWisdomLab/psychometrics-commons#442`, `ContextualWisdomLab/contextual-orchestrator#994`, `ContextualWisdomLab/contextual-orchestrator#1003`, `ContextualWisdomLab/appguardrail#1077`, `ContextualWisdomLab/naruon#1513`, `ContextualWisdomLab/LineageWeave#908`, `ContextualWisdomLab/ContextualWisdomLab.github.io#203`, `ContextualWisdomLab/TEPP#435`, `ContextualWisdomLab/semantic-data-portal#72`, `ContextualWisdomLab/Orgmetra#160`, `ContextualWisdomLab/learning-interoperability-contracts#1`, `ContextualWisdomLab/noema#530`, `ContextualWisdomLab/bandscope#1125`, `ContextualWisdomLab/saju-caldav#44`, `ContextualWisdomLab/OriginWeave#274`, `ContextualWisdomLab/semantic-data-portal#90`, `ContextualWisdomLab/accounting-information-platform#45`, `ContextualWisdomLab/clearfolio#538`, `ContextualWisdomLab/pg-erd-cloud#1046`, `ContextualWisdomLab/DiagramWeave#34`, `ContextualWisdomLab/keyverse#103`, `ContextualWisdomLab/mhtml-etl-gateway#56`, `ContextualWisdomLab/j-planner#2`, `ContextualWisdomLab/learning-record-store#1`, `ContextualWisdomLab/learning-content-studio#1`, `ContextualWisdomLab/learning-management-platform#1`, `ContextualWisdomLab/metering-billing-platform#157`, `ContextualWisdomLab/PolicyWeave#1`, `ContextualWisdomLab/supply-chain-control-plane#1`, `ContextualWisdomLab/governance-risk-compliance#65`, `ContextualWisdomLab/pingora-gateway#4`, `ContextualWisdomLab/life-os#211`, `ContextualWisdomLab/scopeweave#650`, `ContextualWisdomLab/newsdom-api#782`, `ContextualWisdomLab/kaefa#81`, `ContextualWisdomLab/kaefa#82`, `ContextualWisdomLab/aFIPC#261`, and `ContextualWisdomLab/nonnest2#115`. Closed superseded child PRs `learning-record-store#7`, `learning-content-studio#8`, `metering-billing-platform#175`, and `keyverse#127` are deliberately absent from the active reconciliation target list because their unique deltas were folded into authoritative parent writers. Historical labels on those closed PRs are not erased by this desired-state change. The assignment reconciler preserves richer repository-local labels such as priority, status, and `type: maintenance` when those labels are outside the managed semantic set. +The original baseline now contains 47 active evidence-backed label targets after successor reconciliation: `ContextualWisdomLab/.github#1579`, `ContextualWisdomLab/.github#1582`, `ContextualWisdomLab/.github#1622`, `ContextualWisdomLab/.github#1625`, `ContextualWisdomLab/.github#1634`, `ContextualWisdomLab/CalendarWeave#1`, `ContextualWisdomLab/ConceptWeave#1`, `ContextualWisdomLab/context-graph-contracts#20`, `ContextualWisdomLab/RankWeave#40`, `ContextualWisdomLab/fast-mlsirm#1717`, `ContextualWisdomLab/EgressWeave#231`, `ContextualWisdomLab/psychometrics-commons#434`, `ContextualWisdomLab/contextual-orchestrator#994`, `ContextualWisdomLab/appguardrail#1077`, `ContextualWisdomLab/naruon#1513`, `ContextualWisdomLab/LineageWeave#908`, `ContextualWisdomLab/ContextualWisdomLab.github.io#203`, `ContextualWisdomLab/TEPP#435`, `ContextualWisdomLab/semantic-data-portal#72`, `ContextualWisdomLab/Orgmetra#160`, `ContextualWisdomLab/learning-interoperability-contracts#1`, `ContextualWisdomLab/noema#530`, `ContextualWisdomLab/bandscope#1125`, `ContextualWisdomLab/saju-caldav#44`, `ContextualWisdomLab/OriginWeave#274`, `ContextualWisdomLab/semantic-data-portal#90`, `ContextualWisdomLab/clearfolio#538`, `ContextualWisdomLab/pg-erd-cloud#1046`, `ContextualWisdomLab/DiagramWeave#34`, `ContextualWisdomLab/keyverse#103`, `ContextualWisdomLab/mhtml-etl-gateway#56`, `ContextualWisdomLab/j-planner#2`, `ContextualWisdomLab/learning-record-store#1`, `ContextualWisdomLab/learning-content-studio#1`, `ContextualWisdomLab/learning-management-platform#1`, `ContextualWisdomLab/metering-billing-platform#157`, `ContextualWisdomLab/PolicyWeave#1`, `ContextualWisdomLab/supply-chain-control-plane#1`, `ContextualWisdomLab/governance-risk-compliance#65`, `ContextualWisdomLab/pingora-gateway#4`, `ContextualWisdomLab/life-os#211`, `ContextualWisdomLab/scopeweave#651`, `ContextualWisdomLab/newsdom-api#782`, `ContextualWisdomLab/kaefa#81`, `ContextualWisdomLab/kaefa#82`, `ContextualWisdomLab/aFIPC#261`, and `ContextualWisdomLab/nonnest2#115`. Closed/superseded `psychometrics-commons#442`, `contextual-orchestrator#1003`, `accounting-information-platform#45`, and `scopeweave#650` are no longer active taxonomy targets: their valid public-surface deltas are respectively preserved by current `psychometrics-commons#434`, `contextual-orchestrator#994`, `accounting-information-platform#37`, and `scopeweave#651`. Closed superseded child PRs `learning-record-store#7`, `learning-content-studio#8`, `metering-billing-platform#175`, and `keyverse#127` are likewise absent because their unique deltas were folded into authoritative parent writers. Historical labels on retired PRs are not erased by this desired-state change. The assignment reconciler preserves richer repository-local labels such as priority, status, and `type: maintenance` when those labels are outside the managed semantic set. ## Verification contract @@ -90,4 +90,4 @@ GitHub's current REST Pages contract supports `build_type` values `legacy` and ` ## Known integration boundary -Immediately before this branch correction, protected `.github/main@7d707b8abbb8a3fed95d0efe4121ed9b4f76bb2a` still carried the 22-repository metadata desired state and the older 39-target label operating record. This branch keeps the metadata fleet unchanged and expands the label taxonomy plus its operator record to 49 active evidence-backed targets. The taxonomy/test/operator-record trio must integrate together; a source-only assignment change with stale operating prose is not acceptable evidence. The two concurrent additions, `aFIPC#261` and `nonnest2#115`, were live-read after the branch advanced and both already carry `documentation`; preserving them is intentional reconciliation, not a history rewrite. After integration, live label convergence must still be re-read through GitHub before completion is claimed. Issue #1579 remains open for the separate protected-environment repository-settings credential; this label-taxonomy correction neither assumes nor broadens that credential. +Immediately before this branch correction, protected `.github/main@7d707b8abbb8a3fed95d0efe4121ed9b4f76bb2a` still carried the 22-repository metadata desired state and the older 39-target label operating record. This branch keeps the metadata fleet unchanged and expands the label taxonomy plus its operator record. The taxonomy/test/operator-record files must integrate together; a source-only assignment change with stale operating prose is not acceptable evidence. Current successor reconciliation removes retired writers from the active taxonomy rather than preserving stale issue identities solely to keep a count stable. After integration, live label convergence must still be re-read through GitHub before completion is claimed. Issue #1579 remains open for the separate protected-environment repository-settings credential; this label-taxonomy correction neither assumes nor broadens that credential. diff --git a/tests/test_repository_label_taxonomy.py b/tests/test_repository_label_taxonomy.py index f101f89133..ae4b316264 100644 --- a/tests/test_repository_label_taxonomy.py +++ b/tests/test_repository_label_taxonomy.py @@ -2,6 +2,7 @@ from __future__ import annotations +import hashlib import json from pathlib import Path @@ -9,10 +10,22 @@ ROOT = Path(__file__).resolve().parents[1] TAXONOMY = ROOT / "config" / "repository-label-taxonomy.json" OPERATING_RECORD = ROOT / "docs" / "doctoring" / "repository-public-surface-reconciliation.md" +OPERATING_RECORD_SUPPLEMENT = ( + ROOT / "docs" / "doctoring" / "repository-label-taxonomy-wave-3.md" +) +EXPECTED_TAXONOMY_BLOB_SHA = "12ba653724645904da578e99acd5a49ddb4018bd" + + +def _git_blob_sha(path: Path) -> str: + """Return Git's content-addressed blob identity for ``path``.""" + + data = path.read_bytes() + header = f"blob {len(data)}\0".encode("ascii") + return hashlib.sha1(header + data, usedforsecurity=False).hexdigest() def test_repository_label_taxonomy_maps_evidence_backed_types() -> None: - """Common semantic types and reviewed targets remain explicit and stable.""" + """Semantic mappings and the reviewed assignment inventory stay exact.""" payload = json.loads(TAXONOMY.read_text(encoding="utf-8")) @@ -22,122 +35,17 @@ def test_repository_label_taxonomy_maps_evidence_backed_types() -> None: "bug": "bug", "documentation": "documentation", } - # Keep assignments exact so reviewed target drift cannot silently escape CI. - assert payload["assignments"] == [ - {"repository": ".github", "issue": 1579, "type": "feature"}, - {"repository": ".github", "issue": 1582, "type": "feature"}, - {"repository": ".github", "issue": 1622, "type": "feature"}, - {"repository": ".github", "issue": 1625, "type": "bug"}, - {"repository": ".github", "issue": 1634, "type": "documentation"}, - {"repository": "CalendarWeave", "issue": 1, "type": "documentation"}, - {"repository": "ConceptWeave", "issue": 1, "type": "feature"}, - { - "repository": "context-graph-contracts", - "issue": 20, - "type": "documentation", - }, - {"repository": "RankWeave", "issue": 40, "type": "documentation"}, - {"repository": "fast-mlsirm", "issue": 1717, "type": "documentation"}, - {"repository": "EgressWeave", "issue": 231, "type": "documentation"}, - { - "repository": "psychometrics-commons", - "issue": 442, - "type": "documentation", - }, - { - "repository": "contextual-orchestrator", - "issue": 994, - "type": "documentation", - }, - { - "repository": "contextual-orchestrator", - "issue": 1003, - "type": "documentation", - }, - {"repository": "appguardrail", "issue": 1077, "type": "documentation"}, - {"repository": "naruon", "issue": 1513, "type": "documentation"}, - {"repository": "LineageWeave", "issue": 908, "type": "documentation"}, - { - "repository": "ContextualWisdomLab.github.io", - "issue": 203, - "type": "documentation", - }, - {"repository": "TEPP", "issue": 435, "type": "documentation"}, - { - "repository": "semantic-data-portal", - "issue": 72, - "type": "documentation", - }, - {"repository": "Orgmetra", "issue": 160, "type": "documentation"}, - { - "repository": "learning-interoperability-contracts", - "issue": 1, - "type": "feature", - }, - {"repository": "noema", "issue": 530, "type": "feature"}, - {"repository": "bandscope", "issue": 1125, "type": "documentation"}, - {"repository": "saju-caldav", "issue": 44, "type": "documentation"}, - {"repository": "OriginWeave", "issue": 274, "type": "documentation"}, - { - "repository": "semantic-data-portal", - "issue": 90, - "type": "documentation", - }, - { - "repository": "accounting-information-platform", - "issue": 45, - "type": "documentation", - }, - {"repository": "clearfolio", "issue": 538, "type": "documentation"}, - {"repository": "pg-erd-cloud", "issue": 1046, "type": "documentation"}, - {"repository": "DiagramWeave", "issue": 34, "type": "documentation"}, - {"repository": "keyverse", "issue": 103, "type": "feature"}, - { - "repository": "mhtml-etl-gateway", - "issue": 56, - "type": "documentation", - }, - {"repository": "j-planner", "issue": 2, "type": "documentation"}, - { - "repository": "learning-record-store", - "issue": 1, - "type": "documentation", - }, - { - "repository": "learning-content-studio", - "issue": 1, - "type": "documentation", - }, - { - "repository": "learning-management-platform", - "issue": 1, - "type": "documentation", - }, - { - "repository": "metering-billing-platform", - "issue": 157, - "type": "documentation", - }, - {"repository": "PolicyWeave", "issue": 1, "type": "feature"}, - { - "repository": "supply-chain-control-plane", - "issue": 1, - "type": "feature", - }, - { - "repository": "governance-risk-compliance", - "issue": 65, - "type": "documentation", - }, - {"repository": "pingora-gateway", "issue": 4, "type": "documentation"}, - {"repository": "life-os", "issue": 211, "type": "documentation"}, - {"repository": "scopeweave", "issue": 650, "type": "documentation"}, - {"repository": "newsdom-api", "issue": 782, "type": "documentation"}, - {"repository": "kaefa", "issue": 81, "type": "documentation"}, - {"repository": "kaefa", "issue": 82, "type": "documentation"}, - {"repository": "aFIPC", "issue": 261, "type": "documentation"}, - {"repository": "nonnest2", "issue": 115, "type": "documentation"}, + # Pin the complete human-reviewed taxonomy, not only a prefix of the list. + # Git blob identity is intentionally used as a compact exact-inventory + # contract; SHA-1 here is Git object addressing, not a security primitive. + assert _git_blob_sha(TAXONOMY) == EXPECTED_TAXONOMY_BLOB_SHA + + assignments = payload["assignments"] + identities = [ + (assignment["repository"], assignment["issue"]) for assignment in assignments ] + assert len(identities) == len(set(identities)) + assert all(assignment["type"] in payload["type"] for assignment in assignments) assert len(set(payload["type"].values())) == len(payload["type"]) @@ -146,7 +54,12 @@ def test_repository_label_operating_record_matches_assignment_inventory() -> Non payload = json.loads(TAXONOMY.read_text(encoding="utf-8")) assignments = payload["assignments"] - operating_record = OPERATING_RECORD.read_text(encoding="utf-8") + operating_record = "\n".join( + ( + OPERATING_RECORD.read_text(encoding="utf-8"), + OPERATING_RECORD_SUPPLEMENT.read_text(encoding="utf-8"), + ) + ) assert ( f"explicit label assignments cover {len(assignments)} active evidence-backed targets" diff --git a/tests/test_repository_label_taxonomy_workflow_trigger.py b/tests/test_repository_label_taxonomy_workflow_trigger.py new file mode 100644 index 0000000000..31e4650a90 --- /dev/null +++ b/tests/test_repository_label_taxonomy_workflow_trigger.py @@ -0,0 +1,18 @@ +"""Regression contracts for label-taxonomy workflow path coverage.""" + +from __future__ import annotations + +from pathlib import Path + + +WORKFLOW_PATH = Path(".github/workflows/repository-metadata-reconcile.yml") +OPERATING_RECORD_PATH = "docs/doctoring/repository-label-taxonomy-wave-3.md" + + +def test_taxonomy_operating_record_change_triggers_reconciliation() -> None: + """Every file consumed by the taxonomy inventory contract must wake validation.""" + workflow_text = WORKFLOW_PATH.read_text(encoding="utf-8") + pull_request_paths = workflow_text.split(" pull_request:\n paths:\n", 1)[1].split( + " schedule:\n", 1 + )[0] + assert f' - "{OPERATING_RECORD_PATH}"' in pull_request_paths