harness-everything 0.33.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 (76) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +23 -0
  4. package/ci/fixtures/doc-lifecycle/prd-revisions/config.json +9 -0
  5. package/ci/fixtures/doc-lifecycle/prd-revisions/packaged/config.json +20 -0
  6. package/ci/fixtures/doc-lifecycle/prd-revisions/packaged/expected.json +12 -0
  7. package/ci/fixtures/doc-lifecycle/prd-revisions/packaged/invalid-fork/docs/prd/graph/r001.md +20 -0
  8. package/ci/fixtures/doc-lifecycle/prd-revisions/packaged/invalid-fork/docs/prd/graph/r002.md +26 -0
  9. package/ci/fixtures/doc-lifecycle/prd-revisions/packaged/invalid-fork/docs/prd/graph/r003.md +26 -0
  10. package/ci/fixtures/doc-lifecycle/prd-revisions/packaged/valid/docs/prd/graph/r001.md +20 -0
  11. package/ci/fixtures/doc-lifecycle/prd-revisions/packaged/valid/docs/prd/graph/r002.md +26 -0
  12. package/ci/fixtures/doc-lifecycle/prd-revisions/ten-reqs/r001.body.md +39 -0
  13. package/ci/fixtures/doc-lifecycle/prd-revisions/ten-reqs/r002-dropped.body.md +35 -0
  14. package/ci/fixtures/doc-lifecycle/prd-revisions/ten-reqs/r002-incomplete.body.md +37 -0
  15. package/ci/fixtures/doc-lifecycle/prd-revisions/ten-reqs/r002-one-replaced.body.md +39 -0
  16. package/ci/fixtures/doc-lifecycle/prd-revisions/ten-reqs/r002-overlap.body.md +39 -0
  17. package/ci/fixtures/doc-lifecycle/scenarios/active-to-active/config.json +1 -0
  18. package/ci/fixtures/doc-lifecycle/scenarios/active-to-active/docs/adr/GRPH-001.md +8 -0
  19. package/ci/fixtures/doc-lifecycle/scenarios/active-to-active/docs/adr/GRPH-002.md +9 -0
  20. package/ci/fixtures/doc-lifecycle/scenarios/active-to-active/expected.json +1 -0
  21. package/ci/fixtures/doc-lifecycle/scenarios/active-to-active-mismatch/config.json +1 -0
  22. package/ci/fixtures/doc-lifecycle/scenarios/active-to-active-mismatch/docs/adr/GRPH-001.md +8 -0
  23. package/ci/fixtures/doc-lifecycle/scenarios/active-to-active-mismatch/docs/adr/GRPH-002.md +9 -0
  24. package/ci/fixtures/doc-lifecycle/scenarios/active-to-active-mismatch/expected.json +1 -0
  25. package/ci/fixtures/doc-lifecycle/scenarios/active-to-legacy/config.json +1 -0
  26. package/ci/fixtures/doc-lifecycle/scenarios/active-to-legacy/docs/adr/GRPH-010.md +9 -0
  27. package/ci/fixtures/doc-lifecycle/scenarios/active-to-legacy/docs/adr/legacy/GRPH-007.md +8 -0
  28. package/ci/fixtures/doc-lifecycle/scenarios/active-to-legacy/expected.json +1 -0
  29. package/ci/fixtures/doc-lifecycle/scenarios/alias-rename/config.json +1 -0
  30. package/ci/fixtures/doc-lifecycle/scenarios/alias-rename/docs/adr/GRAPH-007.md +9 -0
  31. package/ci/fixtures/doc-lifecycle/scenarios/alias-rename/docs/adr/legacy/GRPH-007.md +8 -0
  32. package/ci/fixtures/doc-lifecycle/scenarios/alias-rename/expected.json +1 -0
  33. package/ci/fixtures/doc-lifecycle/scenarios/duplicate-legacy/config.json +1 -0
  34. package/ci/fixtures/doc-lifecycle/scenarios/duplicate-legacy/docs/adr/legacy/v1/GRPH-007.md +8 -0
  35. package/ci/fixtures/doc-lifecycle/scenarios/duplicate-legacy/docs/adr/legacy/v2/GRPH-007.md +8 -0
  36. package/ci/fixtures/doc-lifecycle/scenarios/duplicate-legacy/expected.json +1 -0
  37. package/ci/fixtures/doc-lifecycle/scenarios/invalid-refs/config.json +1 -0
  38. package/ci/fixtures/doc-lifecycle/scenarios/invalid-refs/docs/adr/GRPH-003.md +9 -0
  39. package/ci/fixtures/doc-lifecycle/scenarios/invalid-refs/docs/adr/GRPH-004.md +9 -0
  40. package/ci/fixtures/doc-lifecycle/scenarios/invalid-refs/docs/adr/GRPH-005.md +9 -0
  41. package/ci/fixtures/doc-lifecycle/scenarios/invalid-refs/docs/adr/GRPH-006.md +9 -0
  42. package/ci/fixtures/doc-lifecycle/scenarios/invalid-refs/docs/adr/GRPH-007.md +9 -0
  43. package/ci/fixtures/doc-lifecycle/scenarios/invalid-refs/expected.json +1 -0
  44. package/ci/fixtures/doc-lifecycle/scenarios/pending-edge/config.json +1 -0
  45. package/ci/fixtures/doc-lifecycle/scenarios/pending-edge/docs/adr/GRPH-020.md +8 -0
  46. package/ci/fixtures/doc-lifecycle/scenarios/pending-edge/docs/adr/GRPH-021.md +9 -0
  47. package/ci/fixtures/doc-lifecycle/scenarios/pending-edge/expected.json +1 -0
  48. package/ci/fixtures/doc-lifecycle/scenarios/recorded-conflict/config.json +1 -0
  49. package/ci/fixtures/doc-lifecycle/scenarios/recorded-conflict/docs/adr/GRPH-003.md +8 -0
  50. package/ci/fixtures/doc-lifecycle/scenarios/recorded-conflict/docs/prd/graph.md +10 -0
  51. package/ci/fixtures/doc-lifecycle/scenarios/recorded-conflict/expected.json +1 -0
  52. package/ci/mechanism-2aw-project-docs-config.test.js +759 -0
  53. package/ci/mechanism-2ax-doc-lifecycle.test.js +1061 -0
  54. package/ci/mechanism-2ay-prd-revisions.test.js +2891 -0
  55. package/docs/document-lifecycle.md +206 -0
  56. package/harness-everything/SKILL.md +1 -1
  57. package/harness-everything/scripts/doc-lifecycle.js +2401 -0
  58. package/harness-everything/scripts/project-docs-resolver.js +764 -0
  59. package/multi-agent-workspace/SKILL.md +1 -1
  60. package/multi-agent-workspace/scripts/project-docs-resolver.js +437 -30
  61. package/opencode-plugin/plugin.json +1 -1
  62. package/package.json +1 -1
  63. package/plugins/harness-everything/.codex-plugin/plugin.json +1 -1
  64. package/plugins/harness-everything/plugin.json +1 -1
  65. package/plugins/harness-everything/skills/harness-everything/SKILL.md +1 -1
  66. package/plugins/harness-everything/skills/harness-everything/scripts/doc-lifecycle.js +2401 -0
  67. package/plugins/harness-everything/skills/harness-everything/scripts/project-docs-resolver.js +764 -0
  68. package/plugins/harness-everything/skills/multi-agent-workspace/SKILL.md +1 -1
  69. package/plugins/harness-everything/skills/multi-agent-workspace/scripts/project-docs-resolver.js +437 -30
  70. package/plugins/harness-everything/skills/to-spec/SKILL.md +1 -1
  71. package/plugins/harness-everything/skills/to-spec/scripts/check-project-docs.js +168 -54
  72. package/plugins/harness-everything/skills/to-spec/scripts/project-docs-resolver.js +749 -96
  73. package/sbom.cdx.json +7 -7
  74. package/to-spec/SKILL.md +1 -1
  75. package/to-spec/scripts/check-project-docs.js +168 -54
  76. 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.33.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.33.0",
4
+ "version": "0.34.0",
5
5
  "author": {
6
6
  "name": "Miya Daniel"
7
7
  },
package/CHANGELOG.md CHANGED
@@ -2,6 +2,29 @@
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
+
5
28
  ## [0.33.0](https://github.com/dyphn1/Harness-everything/compare/v0.32.0...v0.33.0) (2026-10-17)
6
29
 
7
30
  ### Features
@@ -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.
@@ -0,0 +1,9 @@
1
+ ---
2
+ id: GRPH-007
3
+ role: adr
4
+ status: accepted
5
+ aliases: ["legacy:GRPH-001"]
6
+ ---
7
+ # GRPH-007
8
+
9
+ Uses the reserved legacy: prefix inside aliases; invalid-alias.
@@ -0,0 +1 @@
1
+ {"all": true, "diagnostics": [{"code": "alias-collision", "severity": "error", "path": "docs/adr/GRPH-003.md", "candidates": ["docs/adr/GRPH-004.md"]}, {"code": "alias-collision", "severity": "error", "path": "docs/adr/GRPH-004.md", "candidates": ["docs/adr/GRPH-003.md"]}, {"code": "unresolved-ref", "severity": "error", "path": "docs/adr/GRPH-005.md"}, {"code": "supersede-cycle", "severity": "error", "path": "docs/adr/GRPH-006.md"}, {"code": "invalid-alias", "severity": "error", "path": "docs/adr/GRPH-007.md"}], "resolve": {"GRPH-003": "docs/adr/GRPH-003.md", "GRPH-006": "docs/adr/GRPH-006.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-020
3
+ role: adr
4
+ status: accepted
5
+ ---
6
+ # GRPH-020
7
+
8
+ Active decision; proposed successor does not require status change yet.
@@ -0,0 +1,9 @@
1
+ ---
2
+ id: GRPH-021
3
+ role: adr
4
+ status: proposed
5
+ supersedes: [GRPH-020]
6
+ ---
7
+ # GRPH-021
8
+
9
+ Proposed successor; edge is pending, not effective.
@@ -0,0 +1 @@
1
+ {"all":true,"diagnostics":[],"resolve":{"GRPH-020":"docs/adr/GRPH-020.md","GRPH-021":"docs/adr/GRPH-021.md"},"indexContains":["pending"]}
@@ -0,0 +1 @@
1
+ {"governed":[{"path":"docs/adr/**","role":"adr"},{"path":"docs/prd/**","role":"prd"}],"domains":["GRPH","GRAPH"],"legacy":["docs/adr/legacy/**"]}