harness-everything 0.32.0 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +2 -1
  3. package/CHANGELOG.md +33 -0
  4. package/README.md +3 -2
  5. package/ci/fixtures/doc-lifecycle/prd-revisions/config.json +9 -0
  6. package/ci/fixtures/doc-lifecycle/prd-revisions/packaged/config.json +20 -0
  7. package/ci/fixtures/doc-lifecycle/prd-revisions/packaged/expected.json +12 -0
  8. package/ci/fixtures/doc-lifecycle/prd-revisions/packaged/invalid-fork/docs/prd/graph/r001.md +20 -0
  9. package/ci/fixtures/doc-lifecycle/prd-revisions/packaged/invalid-fork/docs/prd/graph/r002.md +26 -0
  10. package/ci/fixtures/doc-lifecycle/prd-revisions/packaged/invalid-fork/docs/prd/graph/r003.md +26 -0
  11. package/ci/fixtures/doc-lifecycle/prd-revisions/packaged/valid/docs/prd/graph/r001.md +20 -0
  12. package/ci/fixtures/doc-lifecycle/prd-revisions/packaged/valid/docs/prd/graph/r002.md +26 -0
  13. package/ci/fixtures/doc-lifecycle/prd-revisions/ten-reqs/r001.body.md +39 -0
  14. package/ci/fixtures/doc-lifecycle/prd-revisions/ten-reqs/r002-dropped.body.md +35 -0
  15. package/ci/fixtures/doc-lifecycle/prd-revisions/ten-reqs/r002-incomplete.body.md +37 -0
  16. package/ci/fixtures/doc-lifecycle/prd-revisions/ten-reqs/r002-one-replaced.body.md +39 -0
  17. package/ci/fixtures/doc-lifecycle/prd-revisions/ten-reqs/r002-overlap.body.md +39 -0
  18. package/ci/fixtures/doc-lifecycle/scenarios/active-to-active/config.json +1 -0
  19. package/ci/fixtures/doc-lifecycle/scenarios/active-to-active/docs/adr/GRPH-001.md +8 -0
  20. package/ci/fixtures/doc-lifecycle/scenarios/active-to-active/docs/adr/GRPH-002.md +9 -0
  21. package/ci/fixtures/doc-lifecycle/scenarios/active-to-active/expected.json +1 -0
  22. package/ci/fixtures/doc-lifecycle/scenarios/active-to-active-mismatch/config.json +1 -0
  23. package/ci/fixtures/doc-lifecycle/scenarios/active-to-active-mismatch/docs/adr/GRPH-001.md +8 -0
  24. package/ci/fixtures/doc-lifecycle/scenarios/active-to-active-mismatch/docs/adr/GRPH-002.md +9 -0
  25. package/ci/fixtures/doc-lifecycle/scenarios/active-to-active-mismatch/expected.json +1 -0
  26. package/ci/fixtures/doc-lifecycle/scenarios/active-to-legacy/config.json +1 -0
  27. package/ci/fixtures/doc-lifecycle/scenarios/active-to-legacy/docs/adr/GRPH-010.md +9 -0
  28. package/ci/fixtures/doc-lifecycle/scenarios/active-to-legacy/docs/adr/legacy/GRPH-007.md +8 -0
  29. package/ci/fixtures/doc-lifecycle/scenarios/active-to-legacy/expected.json +1 -0
  30. package/ci/fixtures/doc-lifecycle/scenarios/alias-rename/config.json +1 -0
  31. package/ci/fixtures/doc-lifecycle/scenarios/alias-rename/docs/adr/GRAPH-007.md +9 -0
  32. package/ci/fixtures/doc-lifecycle/scenarios/alias-rename/docs/adr/legacy/GRPH-007.md +8 -0
  33. package/ci/fixtures/doc-lifecycle/scenarios/alias-rename/expected.json +1 -0
  34. package/ci/fixtures/doc-lifecycle/scenarios/duplicate-legacy/config.json +1 -0
  35. package/ci/fixtures/doc-lifecycle/scenarios/duplicate-legacy/docs/adr/legacy/v1/GRPH-007.md +8 -0
  36. package/ci/fixtures/doc-lifecycle/scenarios/duplicate-legacy/docs/adr/legacy/v2/GRPH-007.md +8 -0
  37. package/ci/fixtures/doc-lifecycle/scenarios/duplicate-legacy/expected.json +1 -0
  38. package/ci/fixtures/doc-lifecycle/scenarios/invalid-refs/config.json +1 -0
  39. package/ci/fixtures/doc-lifecycle/scenarios/invalid-refs/docs/adr/GRPH-003.md +9 -0
  40. package/ci/fixtures/doc-lifecycle/scenarios/invalid-refs/docs/adr/GRPH-004.md +9 -0
  41. package/ci/fixtures/doc-lifecycle/scenarios/invalid-refs/docs/adr/GRPH-005.md +9 -0
  42. package/ci/fixtures/doc-lifecycle/scenarios/invalid-refs/docs/adr/GRPH-006.md +9 -0
  43. package/ci/fixtures/doc-lifecycle/scenarios/invalid-refs/docs/adr/GRPH-007.md +9 -0
  44. package/ci/fixtures/doc-lifecycle/scenarios/invalid-refs/expected.json +1 -0
  45. package/ci/fixtures/doc-lifecycle/scenarios/pending-edge/config.json +1 -0
  46. package/ci/fixtures/doc-lifecycle/scenarios/pending-edge/docs/adr/GRPH-020.md +8 -0
  47. package/ci/fixtures/doc-lifecycle/scenarios/pending-edge/docs/adr/GRPH-021.md +9 -0
  48. package/ci/fixtures/doc-lifecycle/scenarios/pending-edge/expected.json +1 -0
  49. package/ci/fixtures/doc-lifecycle/scenarios/recorded-conflict/config.json +1 -0
  50. package/ci/fixtures/doc-lifecycle/scenarios/recorded-conflict/docs/adr/GRPH-003.md +8 -0
  51. package/ci/fixtures/doc-lifecycle/scenarios/recorded-conflict/docs/prd/graph.md +10 -0
  52. package/ci/fixtures/doc-lifecycle/scenarios/recorded-conflict/expected.json +1 -0
  53. package/ci/mechanism-2aw-project-docs-config.test.js +759 -0
  54. package/ci/mechanism-2ax-doc-lifecycle.test.js +1061 -0
  55. package/ci/mechanism-2ay-prd-revisions.test.js +2891 -0
  56. package/ci/mechanism-2az-step-type-registry.test.js +86 -0
  57. package/ci/openai-plugin-package.test.js +1 -1
  58. package/ci/release-consistency-check.js +26 -9
  59. package/ci/release-consistency-check.test.js +30 -0
  60. package/ci/router-workflow-plan.test.js +36 -0
  61. package/code-review/SKILL.md +41 -0
  62. package/code-review/references/review-playbook.md +40 -0
  63. package/code-review/templates/finding.template.md +33 -0
  64. package/docs/document-lifecycle.md +206 -0
  65. package/docs/openai-plugin.md +1 -1
  66. package/docs/workflows/code-review.md +58 -0
  67. package/evals/code-review/eval.yaml +26 -0
  68. package/evals/code-review/tasks/negative-grill-me.yaml +16 -0
  69. package/evals/code-review/tasks/negative-security-review.yaml +16 -0
  70. package/evals/code-review/tasks/negative-tdd.yaml +16 -0
  71. package/evals/code-review/tasks/negative-verification-loop.yaml +16 -0
  72. package/evals/code-review/tasks/positive-pr-review.yaml +16 -0
  73. package/evals/code-review/tasks/positive-revised-head-rereview.yaml +16 -0
  74. package/harness-everything/SKILL.md +1 -1
  75. package/harness-everything/references/skill-registry.md +1 -0
  76. package/harness-everything/scripts/doc-lifecycle.js +2401 -0
  77. package/harness-everything/scripts/project-docs-resolver.js +764 -0
  78. package/harness-everything/scripts/routing-keywords.json +7 -0
  79. package/hooks/scripts/lib/binding-resolver.js +1 -0
  80. package/multi-agent-workspace/SKILL.md +1 -1
  81. package/multi-agent-workspace/scripts/project-docs-resolver.js +437 -30
  82. package/opencode-plugin/plugin.json +1 -1
  83. package/package.json +2 -2
  84. package/plugins/harness-everything/.codex-plugin/plugin.json +1 -1
  85. package/plugins/harness-everything/hooks/scripts/lib/binding-resolver.js +1 -0
  86. package/plugins/harness-everything/plugin.json +1 -1
  87. package/plugins/harness-everything/skills/code-review/SKILL.md +41 -0
  88. package/plugins/harness-everything/skills/code-review/references/review-playbook.md +40 -0
  89. package/plugins/harness-everything/skills/code-review/templates/finding.template.md +33 -0
  90. package/plugins/harness-everything/skills/harness-everything/SKILL.md +1 -1
  91. package/plugins/harness-everything/skills/harness-everything/references/skill-registry.md +1 -0
  92. package/plugins/harness-everything/skills/harness-everything/scripts/doc-lifecycle.js +2401 -0
  93. package/plugins/harness-everything/skills/harness-everything/scripts/project-docs-resolver.js +764 -0
  94. package/plugins/harness-everything/skills/harness-everything/scripts/routing-keywords.json +7 -0
  95. package/plugins/harness-everything/skills/multi-agent-workspace/SKILL.md +1 -1
  96. package/plugins/harness-everything/skills/multi-agent-workspace/scripts/project-docs-resolver.js +437 -30
  97. package/plugins/harness-everything/skills/to-spec/SKILL.md +1 -1
  98. package/plugins/harness-everything/skills/to-spec/scripts/check-project-docs.js +168 -54
  99. package/plugins/harness-everything/skills/to-spec/scripts/project-docs-resolver.js +749 -96
  100. package/sbom.cdx.json +7 -7
  101. package/to-spec/SKILL.md +1 -1
  102. package/to-spec/scripts/check-project-docs.js +168 -54
  103. package/to-spec/scripts/project-docs-resolver.js +749 -96
@@ -10,7 +10,7 @@
10
10
  "name": "harness-everything",
11
11
  "source": "./",
12
12
  "description": "Harness OS: an orchestrated agent operating system — tier routing, circuit breaker guardrails, verification gates, WAL session memory, and self-evolving workspace rules.",
13
- "version": "0.32.0",
13
+ "version": "0.34.0",
14
14
  "author": {
15
15
  "name": "Miya Daniel"
16
16
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "harness-everything",
3
3
  "description": "Harness OS: an orchestrated agent operating system — tier routing, circuit breaker guardrails, verification gates, WAL session memory, and self-evolving workspace rules.",
4
- "version": "0.32.0",
4
+ "version": "0.34.0",
5
5
  "author": {
6
6
  "name": "Miya Daniel"
7
7
  },
@@ -23,6 +23,7 @@
23
23
  ],
24
24
  "skills": [
25
25
  "./multi-agent-workspace",
26
+ "./code-review",
26
27
  "./environment-detection",
27
28
  "./eval-harness",
28
29
  "./fable-discipline",
package/CHANGELOG.md CHANGED
@@ -2,6 +2,39 @@
2
2
 
3
3
  All notable changes to this project are documented in this file.
4
4
 
5
+ ## [0.34.0](https://github.com/dyphn1/Harness-everything/compare/v0.33.0...v0.34.0) (2026-10-17)
6
+
7
+ ### Features
8
+
9
+ * **doc-lifecycle:** add repeatable --changed-path for comma-containing filenames ([d807f16](https://github.com/dyphn1/Harness-everything/commit/d807f16553e67090435b21a001bd17169015c539))
10
+ * **doc-lifecycle:** lint governed docs and build a deterministic index ([5cf3f38](https://github.com/dyphn1/Harness-everything/commit/5cf3f387ef9e19001db12469178e8bb05e3bd7b7)), closes [#325](https://github.com/dyphn1/Harness-everything/issues/325) [#325](https://github.com/dyphn1/Harness-everything/issues/325)
11
+ * **doc-lifecycle:** validate contract-style immutable prd revisions ([730f076](https://github.com/dyphn1/Harness-everything/commit/730f0767c84681fcc41b4bdca55d603cbbb30121)), closes [rN#REQ](https://github.com/dyphn1/rN/issues/REQ) [#325](https://github.com/dyphn1/Harness-everything/issues/325)
12
+ * **project-docs:** load host-neutral project-docs.json with validated selection ([0be0d7b](https://github.com/dyphn1/Harness-everything/commit/0be0d7b001e185b8fff427f6219d0dc20f3a8b6d)), closes [#325](https://github.com/dyphn1/Harness-everything/issues/325)
13
+
14
+ ### Bug Fixes
15
+
16
+ * **doc-lifecycle:** apply per-source prd authority and freeze approved revisions ([1647253](https://github.com/dyphn1/Harness-everything/commit/1647253b9984cde2d121d2b01ba24281af4afbee))
17
+ * **doc-lifecycle:** bind activation path, keep historical retirement and scope reads ([1c7f9ef](https://github.com/dyphn1/Harness-everything/commit/1c7f9efbad7cd7128a263ce560ce6a60daaf9dc9)), closes [#325](https://github.com/dyphn1/Harness-everything/issues/325)
18
+ * **doc-lifecycle:** derive index authority from the validated effective prefix ([b7be1e7](https://github.com/dyphn1/Harness-everything/commit/b7be1e79311428dab01544263208d804c4ab9937))
19
+ * **doc-lifecycle:** enforce d6.9 on added or changed prds ([b2404aa](https://github.com/dyphn1/Harness-everything/commit/b2404aacbd219a9e3d7540d8daff78f8b7c1e0a5)), closes [#325](https://github.com/dyphn1/Harness-everything/issues/325)
20
+ * **doc-lifecycle:** freeze legacy frontmatter against a trusted base ([faa3ef3](https://github.com/dyphn1/Harness-everything/commit/faa3ef300d6a917e3b52841518b229708a5b5c58))
21
+ * **doc-lifecycle:** harden cli inputs and offline authority found by code-review dogfood ([4d30f54](https://github.com/dyphn1/Harness-everything/commit/4d30f54a9ca17bf99aed0ad04b17b0e27ba1b40a)), closes [#329](https://github.com/dyphn1/Harness-everything/issues/329) [PRD#REQ](https://github.com/dyphn1/PRD/issues/REQ)
22
+ * **doc-lifecycle:** keep --changed-path outer whitespace through normalization ([f8afa0d](https://github.com/dyphn1/Harness-everything/commit/f8afa0d170c73c95cfb741c818a4baf1b42c6e24))
23
+ * **doc-lifecycle:** ship config validator with harness-everything; keep new prd governance strict ([e54660d](https://github.com/dyphn1/Harness-everything/commit/e54660da05ac704a429d1137ef567b2949ec5df2))
24
+ * **project-docs:** reject config globs with empty path segments ([d9445f5](https://github.com/dyphn1/Harness-everything/commit/d9445f5013471c2bcd11410c16a1b3d529d4f072))
25
+ * **project-docs:** reject whitespace init values and non-canonical globs ([bf4e20f](https://github.com/dyphn1/Harness-everything/commit/bf4e20fd507a596e9d77b6808f60f12f2474413f)), closes [#325](https://github.com/dyphn1/Harness-everything/issues/325)
26
+ * **project-docs:** stop inferring selected config and init the project file ([34bbfee](https://github.com/dyphn1/Harness-everything/commit/34bbfeed2ba79b96c84e3f7d87a603b2c5c65f8e)), closes [#325](https://github.com/dyphn1/Harness-everything/issues/325)
27
+
28
+ ## [0.33.0](https://github.com/dyphn1/Harness-everything/compare/v0.32.0...v0.33.0) (2026-10-17)
29
+
30
+ ### Features
31
+
32
+ * **code-review:** add evidence-tiered independent review skill ([#329](https://github.com/dyphn1/Harness-everything/issues/329)) ([2acb220](https://github.com/dyphn1/Harness-everything/commit/2acb22098a5fc360306b0ed34fa3ddcf21592fea))
33
+
34
+ ### Bug Fixes
35
+
36
+ * **code-review:** register the code-review binding so review steps can load it ([acb766a](https://github.com/dyphn1/Harness-everything/commit/acb766aea36361262f3536db36069265aa66d871))
37
+
5
38
  ## [0.32.0](https://github.com/dyphn1/Harness-everything/compare/v0.31.3...v0.32.0) (2026-10-17)
6
39
 
7
40
  ### Features
package/README.md CHANGED
@@ -184,7 +184,7 @@ The authoritative current matrix is [docs/platform-capabilities.md](docs/platfor
184
184
  | **Claude Code** | Native lifecycle hooks (`PreToolUse`, `PostToolUse`, `SessionStart`, `UserPromptSubmit`, `Stop`) | `.claude/settings.json`, `.claude/skills/`, `.claude/agents/` | Semantic workflow contracts are reminder-observed; Rule-of-3 reflection and explicit permission boundaries may block |
185
185
  | **OpenCode** | Native plugin module ([`opencode-plugin/index.mjs`](opencode-plugin/index.mjs), install as `harness-enforcement.js`) | `.opencode/plugins/` | **Partial live-host evidence** — project-scope `.js` loading and edit/verification state on OpenCode 1.18.31 (macOS); current workflow/verification behavior is reminder-oriented, with only the third-failure reflection boundary blocking edits |
186
186
  | **Codex — general installer path** | Skills + `AGENTS.md` instructions | `AGENTS.md` + repo-scoped `.agents/skills/` | **Instruction/advisory delivery only**; semantic MUST/SHOULD/MAY still applies, without a hard-enforcement claim |
187
- | **Codex / local OpenAI plugin** | `.codex-plugin` package with session, prompt, supported-tool, subagent, and stop hooks plus 26 canonical skills | `.agents/plugins/marketplace.json` → `plugins/harness-everything/` | **Mechanism-tested local contract observation plus explicit permission/Rule-of-3 boundaries** for the packaged mappings; live host loading remains unverified |
187
+ | **Codex / local OpenAI plugin** | `.codex-plugin` package with session, prompt, supported-tool, subagent, and stop hooks plus 27 canonical skills | `.agents/plugins/marketplace.json` → `plugins/harness-everything/` | **Mechanism-tested local contract observation plus explicit permission/Rule-of-3 boundaries** for the packaged mappings; live host loading remains unverified |
188
188
  | **Public OpenAI Skills-only plugin** | Public Skills-only bundle | Generated submission ZIP from `plugins/harness-everything/skills/` | **Skill/workflow behavior only**; no local `.codex-plugin` lifecycle hooks in the public artifact |
189
189
  | **Cursor** | Native Project Rules + project skills | `.cursorrules` + `.cursor/skills/` | Advisory only |
190
190
  | **GitHub Copilot agent surfaces** | Agent Skills + repository custom instructions | `.github/copilot-instructions.md` + `.github/skills/` | Agent Skills path is documented; no live Harness session or plugin install is verified |
@@ -229,7 +229,7 @@ This repo uses a flat layout (waza/agentskills.io convention). The table below m
229
229
  | `.agents/plugins` | **Distribution** | OpenAI/Codex repository marketplace metadata |
230
230
  | `plugins/harness-everything` | **Distribution** | Local OpenAI/Codex plugin package plus canonical skill copies |
231
231
  | `submission/openai` | **Distribution / Review** | Public OpenAI Skills-only listing/test inputs |
232
- | `evals` | **Routing Evals** | 26 trigger/routing eval suites (waza format) |
232
+ | `evals` | **Routing Evals** | 27 trigger/routing eval suites (waza format) |
233
233
  | `eval-framework` | **Quality Gates** | Negative-control fixtures for consistency/collision gates (not a skill) |
234
234
  | `contract-integrity` | **Quality Gates** | ADR→spec→ticket→test→implementation trace audit (Phase 1; not a directly routed skill) |
235
235
  | `telemetry` | **Quality Gates** | Local JSONL operational evidence layer with report/benchmark scripts (not a skill) |
@@ -238,6 +238,7 @@ This repo uses a flat layout (waza/agentskills.io convention). The table below m
238
238
  | `docs` | **Documentation** | Philosophy, architecture, routing, reflection, platform capabilities, generated repository contract, audit |
239
239
  | `references` | **Documentation** | Shared checklists (security, performance, definition-of-done) |
240
240
  | `multi-agent-workspace` | **Skill (Tier 3)** | Scaffold a verified multi-agent workspace and select bounded specialists from an external catalog without vendoring the full roster |
241
+ | `code-review` | **Skill (Tier 2)** | Independent, evidence-tiered PR/diff code review (read-only by default) |
241
242
  | `environment-detection` | **Foundation** | Preflight: detect OS, shell, package manager |
242
243
  | `eval-harness` | **Skill (Tier 2)** | Evaluate agent outputs against rubrics |
243
244
  | `fable-discipline` | **Skill (Tier 3)** | Fable execution guardrails when Fable is selected |
@@ -0,0 +1,9 @@
1
+ {
2
+ "governed": [
3
+ { "path": "docs/prd/**", "role": "prd" },
4
+ { "path": "docs/adr/**", "role": "adr" },
5
+ { "path": "docs/approvals/**", "role": "report" }
6
+ ],
7
+ "domains": ["GRPH", "IFCE"],
8
+ "legacy": ["docs/adr/legacy/**", "docs/prd/legacy/**"]
9
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "governed": [
3
+ {
4
+ "path": "docs/prd/**",
5
+ "role": "prd"
6
+ },
7
+ {
8
+ "path": "docs/adr/**",
9
+ "role": "adr"
10
+ }
11
+ ],
12
+ "domains": [
13
+ "GRPH",
14
+ "IFCE"
15
+ ],
16
+ "legacy": [
17
+ "docs/adr/legacy/**",
18
+ "docs/prd/legacy/**"
19
+ ]
20
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "valid": {
3
+ "r001ArtifactDigest": "sha256:305358d3ff29f45969b99562eec9bca2da12f35020decee5a3a667a16fd412f6",
4
+ "r001ApprovalDigest": "sha256:f0715961ec620f963304941851b86493f1c58c009329aaff485ef796011dd4b3",
5
+ "r002ArtifactDigest": "sha256:d54cb5153daa0336ec919d100eb6c98bf1962cae9d9a248e9101187f155c6e0f",
6
+ "r002ApprovalDigest": "sha256:f0ad5b331c847bd91a3dffd3bfb653ec631c201c592fb599c5c4777e3cb01606"
7
+ },
8
+ "invalidFork": {
9
+ "r003ArtifactDigest": "sha256:7d3b98b1c0984f868136f875febee399864d7273cef958564da63052cd7f825c",
10
+ "r003ApprovalDigest": "sha256:aee28699550b78cf0e0ea43aba4aa938886b759f229b5a50a117dca26d5168cf"
11
+ }
12
+ }
@@ -0,0 +1,20 @@
1
+ ---
2
+ id: "PRD-GRPH-001"
3
+ revision: 1
4
+ status: "effective"
5
+ drafted_by: "Alice Example"
6
+ effective_at: "2026-10-17T00:01:00Z"
7
+ approval:
8
+ by: "Bob Independent"
9
+ at: "2026-10-17T00:00:00Z"
10
+ ref: "https://approvals.example.invalid/PRD-GRPH-001"
11
+ role: "human"
12
+ content_digest: "sha256:f0715961ec620f963304941851b86493f1c58c009329aaff485ef796011dd4b3"
13
+ ---
14
+ ### REQ-GRPH-010 (aliases: REQ-GRPH-100): Initial requirement
15
+
16
+ Acceptance: resolve the original alias.
17
+
18
+ ### REQ-GRPH-011: Stable requirement
19
+
20
+ Acceptance: preserve the stable behavior.
@@ -0,0 +1,26 @@
1
+ ---
2
+ id: "PRD-GRPH-001"
3
+ revision: 2
4
+ status: "effective"
5
+ drafted_by: "Alice Example"
6
+ previous_revision: 1
7
+ previous_digest: "sha256:305358d3ff29f45969b99562eec9bca2da12f35020decee5a3a667a16fd412f6"
8
+ effective_at: "2026-10-17T00:02:00Z"
9
+ approval:
10
+ by: "Bob Independent"
11
+ at: "2026-10-17T00:00:00Z"
12
+ ref: "https://approvals.example.invalid/PRD-GRPH-001"
13
+ role: "human"
14
+ content_digest: "sha256:f0ad5b331c847bd91a3dffd3bfb653ec631c201c592fb599c5c4777e3cb01606"
15
+ ---
16
+ ### REQ-GRPH-010 (aliases: REQ-GRPH-100, REQ-GRPH-101): Initial requirement
17
+
18
+ Acceptance: resolve the original alias.
19
+
20
+ ### REQ-GRPH-011: Stable requirement
21
+
22
+ Acceptance: preserve the stable behavior.
23
+
24
+ ### REQ-GRPH-012: Added requirement
25
+
26
+ Acceptance: include the new behavior.
@@ -0,0 +1,26 @@
1
+ ---
2
+ id: "PRD-GRPH-001"
3
+ revision: 3
4
+ status: "effective"
5
+ drafted_by: "Alice Example"
6
+ previous_revision: 1
7
+ previous_digest: "sha256:305358d3ff29f45969b99562eec9bca2da12f35020decee5a3a667a16fd412f6"
8
+ effective_at: "2026-10-17T00:03:00Z"
9
+ approval:
10
+ by: "Bob Independent"
11
+ at: "2026-10-17T00:00:00Z"
12
+ ref: "https://approvals.example.invalid/PRD-GRPH-001"
13
+ role: "human"
14
+ content_digest: "sha256:aee28699550b78cf0e0ea43aba4aa938886b759f229b5a50a117dca26d5168cf"
15
+ ---
16
+ ### REQ-GRPH-010 (aliases: REQ-GRPH-100, REQ-GRPH-102): Initial requirement
17
+
18
+ Acceptance: resolve the original alias.
19
+
20
+ ### REQ-GRPH-011: Stable requirement
21
+
22
+ Acceptance: preserve the stable behavior.
23
+
24
+ ### REQ-GRPH-013: Fork-only requirement
25
+
26
+ Acceptance: expose the competing effective branch.
@@ -0,0 +1,20 @@
1
+ ---
2
+ id: "PRD-GRPH-001"
3
+ revision: 1
4
+ status: "effective"
5
+ drafted_by: "Alice Example"
6
+ effective_at: "2026-10-17T00:01:00Z"
7
+ approval:
8
+ by: "Bob Independent"
9
+ at: "2026-10-17T00:00:00Z"
10
+ ref: "https://approvals.example.invalid/PRD-GRPH-001"
11
+ role: "human"
12
+ content_digest: "sha256:f0715961ec620f963304941851b86493f1c58c009329aaff485ef796011dd4b3"
13
+ ---
14
+ ### REQ-GRPH-010 (aliases: REQ-GRPH-100): Initial requirement
15
+
16
+ Acceptance: resolve the original alias.
17
+
18
+ ### REQ-GRPH-011: Stable requirement
19
+
20
+ Acceptance: preserve the stable behavior.
@@ -0,0 +1,26 @@
1
+ ---
2
+ id: "PRD-GRPH-001"
3
+ revision: 2
4
+ status: "effective"
5
+ drafted_by: "Alice Example"
6
+ previous_revision: 1
7
+ previous_digest: "sha256:305358d3ff29f45969b99562eec9bca2da12f35020decee5a3a667a16fd412f6"
8
+ effective_at: "2026-10-17T00:02:00Z"
9
+ approval:
10
+ by: "Bob Independent"
11
+ at: "2026-10-17T00:00:00Z"
12
+ ref: "https://approvals.example.invalid/PRD-GRPH-001"
13
+ role: "human"
14
+ content_digest: "sha256:f0ad5b331c847bd91a3dffd3bfb653ec631c201c592fb599c5c4777e3cb01606"
15
+ ---
16
+ ### REQ-GRPH-010 (aliases: REQ-GRPH-100, REQ-GRPH-101): Initial requirement
17
+
18
+ Acceptance: resolve the original alias.
19
+
20
+ ### REQ-GRPH-011: Stable requirement
21
+
22
+ Acceptance: preserve the stable behavior.
23
+
24
+ ### REQ-GRPH-012: Added requirement
25
+
26
+ Acceptance: include the new behavior.
@@ -0,0 +1,39 @@
1
+ ### REQ-GRPH-010: Draw vertices
2
+
3
+ Acceptance: every declared vertex is drawn.
4
+
5
+ ### REQ-GRPH-011: Draw edges
6
+
7
+ Acceptance: every declared edge is drawn.
8
+
9
+ ### REQ-GRPH-012: Preserve direction
10
+
11
+ Acceptance: directed edges retain their direction.
12
+
13
+ ### REQ-GRPH-013: Support labels
14
+
15
+ Acceptance: labels remain readable.
16
+
17
+ ### REQ-GRPH-014: Support grouping
18
+
19
+ Acceptance: groups remain visually distinct.
20
+
21
+ ### REQ-GRPH-015: Support selection
22
+
23
+ Acceptance: selected items are exposed to callers.
24
+
25
+ ### REQ-GRPH-016: Support keyboard access
26
+
27
+ Acceptance: every action is keyboard reachable.
28
+
29
+ ### REQ-GRPH-017: Preserve layout
30
+
31
+ Acceptance: saved layouts can be restored.
32
+
33
+ ### REQ-GRPH-018: Export the graph
34
+
35
+ Acceptance: exports include the complete graph.
36
+
37
+ ### REQ-GRPH-019: Report export errors
38
+
39
+ Acceptance: failures include an actionable error.
@@ -0,0 +1,35 @@
1
+ ### REQ-GRPH-010: Draw vertices
2
+
3
+ Acceptance: every declared vertex is drawn.
4
+
5
+ ### REQ-GRPH-011: Draw edges
6
+
7
+ Acceptance: every declared edge is drawn.
8
+
9
+ ### REQ-GRPH-012: Preserve direction
10
+
11
+ Acceptance: directed edges retain their direction.
12
+
13
+ ### REQ-GRPH-013: Support labels
14
+
15
+ Acceptance: labels remain readable.
16
+
17
+ ### REQ-GRPH-014: Support grouping
18
+
19
+ Acceptance: groups remain visually distinct.
20
+
21
+ ### REQ-GRPH-015: Support selection
22
+
23
+ Acceptance: selected items are exposed to callers.
24
+
25
+ ### REQ-GRPH-016: Support keyboard access
26
+
27
+ Acceptance: every action is keyboard reachable.
28
+
29
+ ### REQ-GRPH-017: Preserve layout
30
+
31
+ Acceptance: saved layouts can be restored.
32
+
33
+ ### REQ-GRPH-018: Export the graph
34
+
35
+ Acceptance: exports include the complete graph.
@@ -0,0 +1,37 @@
1
+ ### REQ-GRPH-010: Draw vertices
2
+
3
+ Acceptance: every declared vertex is drawn.
4
+
5
+ ### REQ-GRPH-011: Draw edges
6
+
7
+ Acceptance: every declared edge is drawn.
8
+
9
+ ### REQ-GRPH-012: Preserve direction
10
+
11
+ Acceptance: directed edges retain their direction.
12
+
13
+ ### REQ-GRPH-013: Support labels
14
+
15
+ Acceptance: labels remain readable.
16
+
17
+ ### REQ-GRPH-014: Support grouping
18
+
19
+ Acceptance: groups remain visually distinct.
20
+
21
+ ### REQ-GRPH-015: Support selection
22
+
23
+ Acceptance: selected items are exposed to callers.
24
+
25
+ ### REQ-GRPH-016: Support keyboard access
26
+
27
+ Acceptance: every action is keyboard reachable.
28
+
29
+ ### REQ-GRPH-017: Preserve layout
30
+
31
+ Acceptance: saved layouts can be restored.
32
+
33
+ ### REQ-GRPH-018: Export the graph
34
+
35
+ ### REQ-GRPH-020 (replaces: REQ-GRPH-019; aliases: REQ-GRAPH-020): Report export errors
36
+
37
+ Acceptance: failures include a recovery action and error identifier.
@@ -0,0 +1,39 @@
1
+ ### REQ-GRPH-010: Draw vertices
2
+
3
+ Acceptance: every declared vertex is drawn.
4
+
5
+ ### REQ-GRPH-011: Draw edges
6
+
7
+ Acceptance: every declared edge is drawn.
8
+
9
+ ### REQ-GRPH-012: Preserve direction
10
+
11
+ Acceptance: directed edges retain their direction.
12
+
13
+ ### REQ-GRPH-013: Support labels
14
+
15
+ Acceptance: labels remain readable.
16
+
17
+ ### REQ-GRPH-014: Support grouping
18
+
19
+ Acceptance: groups remain visually distinct.
20
+
21
+ ### REQ-GRPH-015: Support selection
22
+
23
+ Acceptance: selected items are exposed to callers.
24
+
25
+ ### REQ-GRPH-016: Support keyboard access
26
+
27
+ Acceptance: every action is keyboard reachable.
28
+
29
+ ### REQ-GRPH-017: Preserve layout
30
+
31
+ Acceptance: saved layouts can be restored.
32
+
33
+ ### REQ-GRPH-018: Export the graph
34
+
35
+ Acceptance: exports include the complete graph.
36
+
37
+ ### REQ-GRPH-020 (replaces: REQ-GRPH-019; aliases: REQ-GRAPH-020): Report export errors
38
+
39
+ Acceptance: failures include a recovery action and error identifier.
@@ -0,0 +1,39 @@
1
+ ### REQ-GRPH-010: Draw vertices
2
+
3
+ Acceptance: every declared vertex is drawn.
4
+
5
+ ### REQ-GRPH-011: Draw edges
6
+
7
+ Acceptance: every declared edge is drawn.
8
+
9
+ ### REQ-GRPH-012: Preserve direction
10
+
11
+ Acceptance: directed edges retain their direction.
12
+
13
+ ### REQ-GRPH-013: Support labels
14
+
15
+ Acceptance: labels remain readable.
16
+
17
+ ### REQ-GRPH-014: Support grouping
18
+
19
+ Acceptance: groups remain visually distinct.
20
+
21
+ ### REQ-GRPH-015: Support selection
22
+
23
+ Acceptance: selected items are exposed to callers.
24
+
25
+ ### REQ-GRPH-016: Support keyboard access
26
+
27
+ Acceptance: every action is keyboard reachable.
28
+
29
+ ### REQ-GRPH-017: Preserve layout
30
+
31
+ Acceptance: saved layouts can be restored.
32
+
33
+ ### REQ-GRPH-018: Export the graph
34
+
35
+ Acceptance: exports include the complete graph.
36
+
37
+ ### REQ-GRPH-020 (replaces: REQ-GRPH-019; aliases: REQ-GRPH-019): Report export errors
38
+
39
+ Acceptance: aliases cannot conceal replaced REQ identities.
@@ -0,0 +1 @@
1
+ {"governed":[{"path":"docs/adr/**","role":"adr"},{"path":"docs/prd/**","role":"prd"}],"domains":["GRPH","GRAPH"],"legacy":["docs/adr/legacy/**"]}
@@ -0,0 +1,8 @@
1
+ ---
2
+ id: GRPH-001
3
+ role: adr
4
+ status: superseded
5
+ ---
6
+ # GRPH-001
7
+
8
+ Original graph dedupe decision.
@@ -0,0 +1,9 @@
1
+ ---
2
+ id: GRPH-002
3
+ role: adr
4
+ status: accepted
5
+ supersedes: [GRPH-001]
6
+ ---
7
+ # GRPH-002
8
+
9
+ Replaces GRPH-001 with the revised dedupe approach.
@@ -0,0 +1 @@
1
+ {"all":true,"diagnostics":[],"resolve":{"GRPH-001":"docs/adr/GRPH-001.md","GRPH-002":"docs/adr/GRPH-002.md"},"indexContains":[]}
@@ -0,0 +1 @@
1
+ {"governed":[{"path":"docs/adr/**","role":"adr"},{"path":"docs/prd/**","role":"prd"}],"domains":["GRPH","GRAPH"],"legacy":["docs/adr/legacy/**"]}
@@ -0,0 +1,8 @@
1
+ ---
2
+ id: GRPH-001
3
+ role: adr
4
+ status: accepted
5
+ ---
6
+ # GRPH-001
7
+
8
+ Original graph dedupe decision, never marked superseded.
@@ -0,0 +1,9 @@
1
+ ---
2
+ id: GRPH-002
3
+ role: adr
4
+ status: accepted
5
+ supersedes: [GRPH-001]
6
+ ---
7
+ # GRPH-002
8
+
9
+ Replaces GRPH-001, whose status was not updated.
@@ -0,0 +1 @@
1
+ {"all":true,"diagnostics":[{"code":"supersede-status-mismatch","severity":"error","path":"docs/adr/GRPH-002.md"}],"resolve":{"GRPH-001":"docs/adr/GRPH-001.md","GRPH-002":"docs/adr/GRPH-002.md"},"indexContains":[]}
@@ -0,0 +1 @@
1
+ {"governed":[{"path":"docs/adr/**","role":"adr"},{"path":"docs/prd/**","role":"prd"}],"domains":["GRPH","GRAPH"],"legacy":["docs/adr/legacy/**"]}
@@ -0,0 +1,9 @@
1
+ ---
2
+ id: GRPH-010
3
+ role: adr
4
+ status: accepted
5
+ supersedes: [legacy:GRPH-007]
6
+ ---
7
+ # GRPH-010
8
+
9
+ Supersedes the archived predecessor named only through the explicit legacy selector above.
@@ -0,0 +1,8 @@
1
+ ---
2
+ id: GRPH-007
3
+ role: adr
4
+ status: accepted
5
+ ---
6
+ # GRPH-007
7
+
8
+ Archived decision, frozen; projected superseded by GRPH-010.
@@ -0,0 +1 @@
1
+ {"all":true,"diagnostics":[],"resolve":{"GRPH-010":"docs/adr/GRPH-010.md","legacy:GRPH-007":"docs/adr/legacy/GRPH-007.md"},"indexContains":["superseded (projected)"]}
@@ -0,0 +1 @@
1
+ {"governed":[{"path":"docs/adr/**","role":"adr"},{"path":"docs/prd/**","role":"prd"}],"domains":["GRPH","GRAPH"],"legacy":["docs/adr/legacy/**"]}
@@ -0,0 +1,9 @@
1
+ ---
2
+ id: GRAPH-007
3
+ role: adr
4
+ status: accepted
5
+ aliases: [GRPH-007]
6
+ ---
7
+ # GRAPH-007
8
+
9
+ Renamed from GRPH-007 to the GRAPH domain; the alias resolves here.
@@ -0,0 +1,8 @@
1
+ ---
2
+ id: GRPH-007
3
+ role: adr
4
+ status: accepted
5
+ ---
6
+ # GRPH-007
7
+
8
+ Archived legacy copy retained under docs/adr/legacy/.
@@ -0,0 +1 @@
1
+ {"all":true,"diagnostics":[],"resolve":{"GRPH-007":"docs/adr/GRAPH-007.md","GRAPH-007":"docs/adr/GRAPH-007.md","legacy:GRPH-007":"docs/adr/legacy/GRPH-007.md"},"indexContains":[]}
@@ -0,0 +1 @@
1
+ {"governed":[{"path":"docs/adr/**","role":"adr"},{"path":"docs/prd/**","role":"prd"}],"domains":["GRPH","GRAPH"],"legacy":["docs/adr/legacy/**"]}
@@ -0,0 +1,8 @@
1
+ ---
2
+ id: GRPH-007
3
+ role: adr
4
+ status: accepted
5
+ ---
6
+ # GRPH-007
7
+
8
+ Archive v1 copy; bare legacy refs to this ID are ambiguous.
@@ -0,0 +1,8 @@
1
+ ---
2
+ id: GRPH-007
3
+ role: adr
4
+ status: accepted
5
+ ---
6
+ # GRPH-007
7
+
8
+ Archive v2 copy; distinguishable only via the @path discriminator.
@@ -0,0 +1 @@
1
+ {"all":true,"diagnostics":[],"resolve":{"legacy:GRPH-007":"ambiguous-legacy-ref","legacy:GRPH-007@docs/adr/legacy/v2/GRPH-007.md":"docs/adr/legacy/v2/GRPH-007.md","legacy:GRPH-007@docs/adr/legacy/v3/GRPH-007.md":"unresolved-ref","legacy:GRPH-007@../x.md":"invalid-ref"},"indexContains":[]}
@@ -0,0 +1 @@
1
+ {"governed":[{"path":"docs/adr/**","role":"adr"},{"path":"docs/prd/**","role":"prd"}],"domains":["GRPH","GRAPH"],"legacy":["docs/adr/legacy/**"]}
@@ -0,0 +1,9 @@
1
+ ---
2
+ id: GRPH-003
3
+ role: adr
4
+ status: accepted
5
+ aliases: [GRPH-050]
6
+ ---
7
+ # GRPH-003
8
+
9
+ First doc claiming the GRPH-050 alias.
@@ -0,0 +1,9 @@
1
+ ---
2
+ id: GRPH-004
3
+ role: adr
4
+ status: accepted
5
+ aliases: [GRPH-050]
6
+ ---
7
+ # GRPH-004
8
+
9
+ Second doc claiming the same GRPH-050 alias; collision.
@@ -0,0 +1,9 @@
1
+ ---
2
+ id: GRPH-005
3
+ role: adr
4
+ status: accepted
5
+ supersedes: [GRPH-999]
6
+ ---
7
+ # GRPH-005
8
+
9
+ References GRPH-999, which does not exist anywhere.
@@ -0,0 +1,9 @@
1
+ ---
2
+ id: GRPH-006
3
+ role: adr
4
+ status: accepted
5
+ supersedes: [GRPH-006]
6
+ ---
7
+ # GRPH-006
8
+
9
+ Self-supersession; cycle of length one.