harness-everything 0.34.0 → 0.36.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 (246) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.github/workflows/ci.yml +2 -0
  4. package/AGENTS.md +3 -0
  5. package/CHANGELOG.md +42 -0
  6. package/ci/fixtures/doc-obligations/derive/acceptance-only/base/docs/prd/graph.md +22 -0
  7. package/ci/fixtures/doc-obligations/derive/acceptance-only/candidate/docs/prd/graph.md +22 -0
  8. package/ci/fixtures/doc-obligations/derive/alias-only/base/docs/prd/graph.md +24 -0
  9. package/ci/fixtures/doc-obligations/derive/alias-only/candidate/docs/prd/graph.md +24 -0
  10. package/ci/fixtures/doc-obligations/derive/assertion-no-revision/base/ci/mechanism-lint.test.js +2 -0
  11. package/ci/fixtures/doc-obligations/derive/assertion-no-revision/base/docs/prd/graph.md +20 -0
  12. package/ci/fixtures/doc-obligations/derive/assertion-no-revision/candidate/ci/mechanism-lint.test.js +2 -0
  13. package/ci/fixtures/doc-obligations/derive/assertion-no-revision/candidate/docs/prd/graph.md +20 -0
  14. package/ci/fixtures/doc-obligations/derive/assertion-no-revision-attested/base/ci/mechanism-lint.test.js +2 -0
  15. package/ci/fixtures/doc-obligations/derive/assertion-no-revision-attested/base/docs/prd/graph.md +20 -0
  16. package/ci/fixtures/doc-obligations/derive/assertion-no-revision-attested/candidate/ci/mechanism-lint.test.js +2 -0
  17. package/ci/fixtures/doc-obligations/derive/assertion-no-revision-attested/candidate/docs/prd/graph.md +20 -0
  18. package/ci/fixtures/doc-obligations/derive/assertion-no-revision-attested/inventory.json +7 -0
  19. package/ci/fixtures/doc-obligations/derive/attribution-impossible/base/ci/mechanism-open.test.js +3 -0
  20. package/ci/fixtures/doc-obligations/derive/attribution-impossible/candidate/ci/mechanism-open.test.js.fixture +2 -0
  21. package/ci/fixtures/doc-obligations/derive/clause-context-typo/base/docs/prd/graph.md +24 -0
  22. package/ci/fixtures/doc-obligations/derive/clause-context-typo/candidate/docs/prd/graph.md +24 -0
  23. package/ci/fixtures/doc-obligations/derive/code-only/base/src/lint.js +1 -0
  24. package/ci/fixtures/doc-obligations/derive/code-only/candidate/src/lint.js +1 -0
  25. package/ci/fixtures/doc-obligations/derive/comment-only-test/base/ci/mechanism-lint.test.js +2 -0
  26. package/ci/fixtures/doc-obligations/derive/comment-only-test/candidate/ci/mechanism-lint.test.js +2 -0
  27. package/ci/fixtures/doc-obligations/derive/computed-member-assert/base/ci/mechanism-c1.test.js +2 -0
  28. package/ci/fixtures/doc-obligations/derive/computed-member-assert/candidate/ci/mechanism-c1.test.js +2 -0
  29. package/ci/fixtures/doc-obligations/derive/computed-member-variable/base/ci/mechanism-c1.test.js +2 -0
  30. package/ci/fixtures/doc-obligations/derive/computed-member-variable/candidate/ci/mechanism-c1.test.js +2 -0
  31. package/ci/fixtures/doc-obligations/derive/config.json +11 -0
  32. package/ci/fixtures/doc-obligations/derive/decision-fence-backtick/base/docs/adr/GRPH-010.md +20 -0
  33. package/ci/fixtures/doc-obligations/derive/decision-fence-backtick/candidate/docs/adr/GRPH-010.md +20 -0
  34. package/ci/fixtures/doc-obligations/derive/decision-fence-tilde/base/docs/adr/GRPH-010.md +20 -0
  35. package/ci/fixtures/doc-obligations/derive/decision-fence-tilde/candidate/docs/adr/GRPH-010.md +20 -0
  36. package/ci/fixtures/doc-obligations/derive/deep-strict-equal/base/ci/mechanism-s1.test.js +2 -0
  37. package/ci/fixtures/doc-obligations/derive/deep-strict-equal/candidate/ci/mechanism-s1.test.js +2 -0
  38. package/ci/fixtures/doc-obligations/derive/deleted-adr/base/docs/adr/GRPH-008.md +14 -0
  39. package/ci/fixtures/doc-obligations/derive/deleted-prd/base/ci/mechanism-lint.test.js +2 -0
  40. package/ci/fixtures/doc-obligations/derive/deleted-prd/base/docs/prd/graph.md +20 -0
  41. package/ci/fixtures/doc-obligations/derive/deleted-prd/candidate/ci/mechanism-lint.test.js +2 -0
  42. package/ci/fixtures/doc-obligations/derive/derived-rename/base/docs/index.md +3 -0
  43. package/ci/fixtures/doc-obligations/derive/derived-rename/base/src/model/a.js +1 -0
  44. package/ci/fixtures/doc-obligations/derive/derived-rename/candidate/docs/index.md +3 -0
  45. package/ci/fixtures/doc-obligations/derive/derived-rename/candidate/src/model/b.js +1 -0
  46. package/ci/fixtures/doc-obligations/derive/derived-rename/config.json +7 -0
  47. package/ci/fixtures/doc-obligations/derive/derived-two-outputs/base/docs/index.md +3 -0
  48. package/ci/fixtures/doc-obligations/derive/derived-two-outputs/base/docs/model-summary.md +3 -0
  49. package/ci/fixtures/doc-obligations/derive/derived-two-outputs/base/src/model.js +1 -0
  50. package/ci/fixtures/doc-obligations/derive/derived-two-outputs/candidate/docs/index.md +3 -0
  51. package/ci/fixtures/doc-obligations/derive/derived-two-outputs/candidate/docs/model-summary.md +3 -0
  52. package/ci/fixtures/doc-obligations/derive/derived-two-outputs/candidate/src/model.js +1 -0
  53. package/ci/fixtures/doc-obligations/derive/derived-two-outputs/config.json +10 -0
  54. package/ci/fixtures/doc-obligations/derive/distinct-logical-prds/base/ci/mechanism-lint.test.js +2 -0
  55. package/ci/fixtures/doc-obligations/derive/distinct-logical-prds/base/docs/prd/graph-one/r001.md +19 -0
  56. package/ci/fixtures/doc-obligations/derive/distinct-logical-prds/base/docs/prd/graph-two/r001.md +19 -0
  57. package/ci/fixtures/doc-obligations/derive/distinct-logical-prds/candidate/ci/mechanism-lint.test.js +2 -0
  58. package/ci/fixtures/doc-obligations/derive/distinct-logical-prds/candidate/docs/prd/graph-one/r001.md +19 -0
  59. package/ci/fixtures/doc-obligations/derive/distinct-logical-prds/candidate/docs/prd/graph-two/r001.md +19 -0
  60. package/ci/fixtures/doc-obligations/derive/docs-only/base/docs/reference/guide.md +3 -0
  61. package/ci/fixtures/doc-obligations/derive/docs-only/candidate/docs/reference/guide.md +3 -0
  62. package/ci/fixtures/doc-obligations/derive/dup-req-id/base/ci/mechanism-lint.test.js +2 -0
  63. package/ci/fixtures/doc-obligations/derive/dup-req-id/base/docs/prd/graph-a.md +20 -0
  64. package/ci/fixtures/doc-obligations/derive/dup-req-id/base/docs/prd/graph-b.md +20 -0
  65. package/ci/fixtures/doc-obligations/derive/dup-req-id/candidate/ci/mechanism-lint.test.js +2 -0
  66. package/ci/fixtures/doc-obligations/derive/dup-req-id/candidate/docs/prd/graph-a.md +20 -0
  67. package/ci/fixtures/doc-obligations/derive/dup-req-id/candidate/docs/prd/graph-b.md +20 -0
  68. package/ci/fixtures/doc-obligations/derive/expect-computed-literal/base/ci/mechanism-e.test.js +2 -0
  69. package/ci/fixtures/doc-obligations/derive/expect-computed-literal/candidate/ci/mechanism-e.test.js +2 -0
  70. package/ci/fixtures/doc-obligations/derive/expect-computed-matcher/base/ci/mechanism-e.test.js +2 -0
  71. package/ci/fixtures/doc-obligations/derive/expect-computed-matcher/candidate/ci/mechanism-e.test.js +2 -0
  72. package/ci/fixtures/doc-obligations/derive/expect-not-to-equal/base/ci/mechanism-s1.test.js +2 -0
  73. package/ci/fixtures/doc-obligations/derive/expect-not-to-equal/candidate/ci/mechanism-s1.test.js +2 -0
  74. package/ci/fixtures/doc-obligations/derive/formatting-only-test/base/ci/mechanism-lint.test.js +2 -0
  75. package/ci/fixtures/doc-obligations/derive/formatting-only-test/candidate/ci/mechanism-lint.test.js +2 -0
  76. package/ci/fixtures/doc-obligations/derive/helper-delegated-test/base/docs/prd/graph.md +18 -0
  77. package/ci/fixtures/doc-obligations/derive/helper-delegated-test/candidate/ci/mechanism-helper.test.js +1 -0
  78. package/ci/fixtures/doc-obligations/derive/helper-delegated-test/candidate/docs/prd/graph.md +18 -0
  79. package/ci/fixtures/doc-obligations/derive/historical-only-req/base/ci/mechanism-lint.test.js +2 -0
  80. package/ci/fixtures/doc-obligations/derive/historical-only-req/base/docs/prd/graph/r001.md +25 -0
  81. package/ci/fixtures/doc-obligations/derive/historical-only-req/candidate/ci/mechanism-lint.test.js +2 -0
  82. package/ci/fixtures/doc-obligations/derive/historical-only-req/candidate/docs/prd/graph/r001.md +25 -0
  83. package/ci/fixtures/doc-obligations/derive/historical-only-req/candidate/docs/prd/graph/r002.md +23 -0
  84. package/ci/fixtures/doc-obligations/derive/in-place-current/base/ci/mechanism-inplace.test.js +2 -0
  85. package/ci/fixtures/doc-obligations/derive/in-place-current/base/docs/prd/graph/r001.md +20 -0
  86. package/ci/fixtures/doc-obligations/derive/in-place-current/base/docs/prd/graph/r002.md +26 -0
  87. package/ci/fixtures/doc-obligations/derive/in-place-current/candidate/ci/mechanism-inplace.test.js +2 -0
  88. package/ci/fixtures/doc-obligations/derive/in-place-current/candidate/docs/prd/graph/r001.md +20 -0
  89. package/ci/fixtures/doc-obligations/derive/in-place-current/candidate/docs/prd/graph/r002.md +28 -0
  90. package/ci/fixtures/doc-obligations/derive/in-place-historical/base/ci/mechanism-inplace.test.js +2 -0
  91. package/ci/fixtures/doc-obligations/derive/in-place-historical/base/docs/prd/graph/r001.md +20 -0
  92. package/ci/fixtures/doc-obligations/derive/in-place-historical/base/docs/prd/graph/r002.md +26 -0
  93. package/ci/fixtures/doc-obligations/derive/in-place-historical/candidate/ci/mechanism-inplace.test.js +2 -0
  94. package/ci/fixtures/doc-obligations/derive/in-place-historical/candidate/docs/prd/graph/r001.md +22 -0
  95. package/ci/fixtures/doc-obligations/derive/in-place-historical/candidate/docs/prd/graph/r002.md +26 -0
  96. package/ci/fixtures/doc-obligations/derive/invalid-clause/base/docs/prd/graph.md +24 -0
  97. package/ci/fixtures/doc-obligations/derive/invalid-clause/candidate/docs/prd/graph.md +24 -0
  98. package/ci/fixtures/doc-obligations/derive/legacy-untagged-fallback/base/ci/mechanism-legacy.test.js +6 -0
  99. package/ci/fixtures/doc-obligations/derive/legacy-untagged-fallback/candidate/ci/mechanism-legacy.test.js +6 -0
  100. package/ci/fixtures/doc-obligations/derive/literal-whitespace-assert/base/ci/mechanism-lint.test.js +2 -0
  101. package/ci/fixtures/doc-obligations/derive/literal-whitespace-assert/candidate/ci/mechanism-lint.test.js +2 -0
  102. package/ci/fixtures/doc-obligations/derive/malformed-citation-attribution/base/ci/mechanism-bad.test.js +6 -0
  103. package/ci/fixtures/doc-obligations/derive/malformed-citation-attribution/candidate/ci/mechanism-bad.test.js.fixture +6 -0
  104. package/ci/fixtures/doc-obligations/derive/malformed-prd/base/ci/mechanism-lint.test.js +2 -0
  105. package/ci/fixtures/doc-obligations/derive/malformed-prd/base/docs/prd/graph.md +20 -0
  106. package/ci/fixtures/doc-obligations/derive/malformed-prd/candidate/ci/mechanism-lint.test.js +2 -0
  107. package/ci/fixtures/doc-obligations/derive/malformed-prd/candidate/docs/prd/graph.md +11 -0
  108. package/ci/fixtures/doc-obligations/derive/missing-approval/base/docs/prd/graph.md +20 -0
  109. package/ci/fixtures/doc-obligations/derive/missing-approval/candidate/docs/prd/graph.md +20 -0
  110. package/ci/fixtures/doc-obligations/derive/mixed-attribution/base/ci/mechanism-mixed.test.js +6 -0
  111. package/ci/fixtures/doc-obligations/derive/mixed-attribution/base/docs/prd/graph.md +24 -0
  112. package/ci/fixtures/doc-obligations/derive/mixed-attribution/candidate/ci/mechanism-mixed.test.js.fixture +5 -0
  113. package/ci/fixtures/doc-obligations/derive/mixed-attribution/candidate/docs/prd/graph.md +24 -0
  114. package/ci/fixtures/doc-obligations/derive/mixed-docs-code/base/ci/mechanism-lint.test.js +2 -0
  115. package/ci/fixtures/doc-obligations/derive/mixed-docs-code/base/docs/reference/guide.md +3 -0
  116. package/ci/fixtures/doc-obligations/derive/mixed-docs-code/base/src/lint.js +1 -0
  117. package/ci/fixtures/doc-obligations/derive/mixed-docs-code/candidate/ci/mechanism-lint.test.js +2 -0
  118. package/ci/fixtures/doc-obligations/derive/mixed-docs-code/candidate/docs/reference/guide.md +3 -0
  119. package/ci/fixtures/doc-obligations/derive/mixed-docs-code/candidate/src/lint.js +1 -0
  120. package/ci/fixtures/doc-obligations/derive/multiline-comment-only/base/ci/mechanism-multi.test.js +5 -0
  121. package/ci/fixtures/doc-obligations/derive/multiline-comment-only/candidate/ci/mechanism-multi.test.js +5 -0
  122. package/ci/fixtures/doc-obligations/derive/multiline-expect/base/ci/mechanism-multi.test.js +6 -0
  123. package/ci/fixtures/doc-obligations/derive/multiline-expect/candidate/ci/mechanism-multi.test.js +6 -0
  124. package/ci/fixtures/doc-obligations/derive/multiline-formatting-only/base/ci/mechanism-multi.test.js +5 -0
  125. package/ci/fixtures/doc-obligations/derive/multiline-formatting-only/candidate/ci/mechanism-multi.test.js +5 -0
  126. package/ci/fixtures/doc-obligations/derive/multiline-numeric-prd/base/ci/mechanism-multi.test.js +5 -0
  127. package/ci/fixtures/doc-obligations/derive/multiline-numeric-prd/base/docs/prd/graph.md +18 -0
  128. package/ci/fixtures/doc-obligations/derive/multiline-numeric-prd/candidate/ci/mechanism-multi.test.js +5 -0
  129. package/ci/fixtures/doc-obligations/derive/multiline-numeric-prd/candidate/docs/prd/graph.md +18 -0
  130. package/ci/fixtures/doc-obligations/derive/multiline-strictequal/base/ci/mechanism-multi.test.js +5 -0
  131. package/ci/fixtures/doc-obligations/derive/multiline-strictequal/candidate/ci/mechanism-multi.test.js +5 -0
  132. package/ci/fixtures/doc-obligations/derive/new-prd/candidate/docs/prd/graph-new.md +20 -0
  133. package/ci/fixtures/doc-obligations/derive/new-reference/candidate/docs/reference/new-note.md +3 -0
  134. package/ci/fixtures/doc-obligations/derive/new-req-test/candidate/ci/mechanism-new.test.js +2 -0
  135. package/ci/fixtures/doc-obligations/derive/orphan-req-test/base/ci/mechanism-lint.test.js +2 -0
  136. package/ci/fixtures/doc-obligations/derive/orphan-req-test/base/docs/prd/graph.md +20 -0
  137. package/ci/fixtures/doc-obligations/derive/orphan-req-test/candidate/ci/mechanism-lint.test.js +2 -0
  138. package/ci/fixtures/doc-obligations/derive/orphan-req-test/candidate/docs/prd/graph.md +20 -0
  139. package/ci/fixtures/doc-obligations/derive/partial-revision/base/ci/mechanism-partial.test.js +5 -0
  140. package/ci/fixtures/doc-obligations/derive/partial-revision/base/docs/prd/graph/r001.md +24 -0
  141. package/ci/fixtures/doc-obligations/derive/partial-revision/candidate/ci/mechanism-partial.test.js +5 -0
  142. package/ci/fixtures/doc-obligations/derive/partial-revision/candidate/docs/prd/graph/r001.md +24 -0
  143. package/ci/fixtures/doc-obligations/derive/partial-revision/candidate/docs/prd/graph/r002.md +26 -0
  144. package/ci/fixtures/doc-obligations/derive/regex-literal-whitespace/base/ci/mechanism-lint.test.js +2 -0
  145. package/ci/fixtures/doc-obligations/derive/regex-literal-whitespace/candidate/ci/mechanism-lint.test.js +2 -0
  146. package/ci/fixtures/doc-obligations/derive/rename/base/docs/reference/old-guide.md +3 -0
  147. package/ci/fixtures/doc-obligations/derive/rename/candidate/docs/reference/guide.md +3 -0
  148. package/ci/fixtures/doc-obligations/derive/replacement-target/base/docs/prd/graph.md +24 -0
  149. package/ci/fixtures/doc-obligations/derive/replacement-target/candidate/docs/prd/graph.md +24 -0
  150. package/ci/fixtures/doc-obligations/derive/req-context-typo/base/docs/prd/graph.md +26 -0
  151. package/ci/fixtures/doc-obligations/derive/req-context-typo/candidate/docs/prd/graph.md +26 -0
  152. package/ci/fixtures/doc-obligations/derive/req-revision/base/ci/mechanism-lint.test.js +2 -0
  153. package/ci/fixtures/doc-obligations/derive/req-revision/base/docs/prd/graph/r001.md +20 -0
  154. package/ci/fixtures/doc-obligations/derive/req-revision/candidate/ci/mechanism-lint.test.js +2 -0
  155. package/ci/fixtures/doc-obligations/derive/req-revision/candidate/docs/prd/graph/r001.md +20 -0
  156. package/ci/fixtures/doc-obligations/derive/req-revision/candidate/docs/prd/graph/r002.md +28 -0
  157. package/ci/fixtures/doc-obligations/derive/req-revision-in-place/base/docs/prd/graph/r001.md +20 -0
  158. package/ci/fixtures/doc-obligations/derive/req-revision-in-place/candidate/docs/prd/graph/r001.md +22 -0
  159. package/ci/fixtures/doc-obligations/derive/retained-revision-chain/base/ci/mechanism-lint.test.js +2 -0
  160. package/ci/fixtures/doc-obligations/derive/retained-revision-chain/base/docs/prd/graph/r001.md +20 -0
  161. package/ci/fixtures/doc-obligations/derive/retained-revision-chain/base/docs/prd/graph/r002.md +26 -0
  162. package/ci/fixtures/doc-obligations/derive/retained-revision-chain/candidate/ci/mechanism-lint.test.js +2 -0
  163. package/ci/fixtures/doc-obligations/derive/retained-revision-chain/candidate/docs/prd/graph/r001.md +20 -0
  164. package/ci/fixtures/doc-obligations/derive/retained-revision-chain/candidate/docs/prd/graph/r002.md +26 -0
  165. package/ci/fixtures/doc-obligations/derive/string-literal-tag/base/ci/mechanism-str.test.js +2 -0
  166. package/ci/fixtures/doc-obligations/derive/string-literal-tag/candidate/ci/mechanism-str.test.js +2 -0
  167. package/ci/fixtures/doc-obligations/derive/tag-inside-test-call/base/ci/mechanism-inside.test.js +5 -0
  168. package/ci/fixtures/doc-obligations/derive/tag-inside-test-call/candidate/ci/mechanism-inside.test.js +5 -0
  169. package/ci/fixtures/doc-obligations/derive/tagged-test/base/ci/mechanism-lint.test.js +2 -0
  170. package/ci/fixtures/doc-obligations/derive/tagged-test/candidate/ci/mechanism-lint.test.js +2 -0
  171. package/ci/fixtures/doc-obligations/derive/tagged-test-prd/base/ci/mechanism-lint.test.js +2 -0
  172. package/ci/fixtures/doc-obligations/derive/tagged-test-prd/base/docs/prd/graph.md +20 -0
  173. package/ci/fixtures/doc-obligations/derive/tagged-test-prd/candidate/ci/mechanism-lint.test.js +2 -0
  174. package/ci/fixtures/doc-obligations/derive/tagged-test-prd/candidate/docs/prd/graph.md +20 -0
  175. package/ci/fixtures/doc-obligations/derive/template-literal-tag/base/ci/mechanism-tpl.test.js +4 -0
  176. package/ci/fixtures/doc-obligations/derive/template-literal-tag/base/docs/prd/graph.md +18 -0
  177. package/ci/fixtures/doc-obligations/derive/template-literal-tag/candidate/ci/mechanism-tpl.test.js +4 -0
  178. package/ci/fixtures/doc-obligations/derive/template-literal-tag/candidate/docs/prd/graph.md +18 -0
  179. package/ci/fixtures/doc-obligations/derive/template-literal-whitespace/base/ci/mechanism-lint.test.js +2 -0
  180. package/ci/fixtures/doc-obligations/derive/template-literal-whitespace/candidate/ci/mechanism-lint.test.js +2 -0
  181. package/ci/fixtures/doc-obligations/derive/title-only-rename/base/ci/mechanism-title.test.js +3 -0
  182. package/ci/fixtures/doc-obligations/derive/title-only-rename/candidate/ci/mechanism-title.test.js +3 -0
  183. package/ci/fixtures/doc-obligations/derive/title-only-unrelated-computed/base/ci/mechanism-u.test.js +4 -0
  184. package/ci/fixtures/doc-obligations/derive/title-only-unrelated-computed/candidate/ci/mechanism-u.test.js +4 -0
  185. package/ci/fixtures/doc-obligations/derive/top-level-no-file-tag/base/ci/mechanism-top.test.js +4 -0
  186. package/ci/fixtures/doc-obligations/derive/top-level-no-file-tag/candidate/ci/mechanism-top.test.js +4 -0
  187. package/ci/fixtures/doc-obligations/derive/trailing-comment-test/base/ci/mechanism-lint.test.js +2 -0
  188. package/ci/fixtures/doc-obligations/derive/trailing-comment-test/base/docs/prd/graph.md +20 -0
  189. package/ci/fixtures/doc-obligations/derive/trailing-comment-test/candidate/ci/mechanism-lint.test.js +2 -0
  190. package/ci/fixtures/doc-obligations/derive/trailing-comment-test/candidate/docs/prd/graph.md +20 -0
  191. package/ci/fixtures/doc-obligations/derive/two-tests-one-file/base/ci/mechanism-two.test.js +6 -0
  192. package/ci/fixtures/doc-obligations/derive/two-tests-one-file/base/docs/prd/graph.md +24 -0
  193. package/ci/fixtures/doc-obligations/derive/two-tests-one-file/candidate/ci/mechanism-two.test.js +6 -0
  194. package/ci/fixtures/doc-obligations/derive/two-tests-one-file/candidate/docs/prd/graph.md +24 -0
  195. package/ci/fixtures/doc-obligations/derive/typo-context/base/docs/adr/GRPH-007.md +14 -0
  196. package/ci/fixtures/doc-obligations/derive/typo-context/candidate/docs/adr/GRPH-007.md +14 -0
  197. package/ci/fixtures/doc-obligations/derive/typo-decision/base/docs/adr/GRPH-007.md +14 -0
  198. package/ci/fixtures/doc-obligations/derive/typo-decision/candidate/docs/adr/GRPH-007.md +14 -0
  199. package/ci/fixtures/doc-obligations/derive/unbalanced-statement/base/ci/mechanism-multi.test.js +5 -0
  200. package/ci/fixtures/doc-obligations/derive/unbalanced-statement/candidate/ci/mechanism-multi.test.js.fixture +4 -0
  201. package/ci/fixtures/doc-obligations/derive/unknown-adr/base/docs/adr/GRPH-009.md +14 -0
  202. package/ci/fixtures/doc-obligations/derive/unknown-adr/candidate/docs/adr/GRPH-009.md +12 -0
  203. package/ci/fixtures/doc-obligations/derive/unsupported-assertion-syntax/base/ci/mechanism-s1.test.js +2 -0
  204. package/ci/fixtures/doc-obligations/derive/unsupported-assertion-syntax/candidate/ci/mechanism-s1.test.js +2 -0
  205. package/ci/fixtures/doc-obligations/derive/whitespace-only-test/base/ci/mechanism-lint.test.js +2 -0
  206. package/ci/fixtures/doc-obligations/derive/whitespace-only-test/candidate/ci/mechanism-lint.test.js +2 -0
  207. package/ci/fixtures/doc-obligations/evidence/base/docs/adr/GRPH-007.md +15 -0
  208. package/ci/fixtures/doc-obligations/evidence/base/docs/prd/PRD-GRPH-001.md +25 -0
  209. package/ci/fixtures/doc-obligations/evidence/candidate/docs/adr/GRPH-007.md +15 -0
  210. package/ci/fixtures/doc-obligations/evidence/candidate/docs/prd/PRD-GRPH-001.md +25 -0
  211. package/ci/mechanism-325-3a-cross.test.js +795 -0
  212. package/ci/mechanism-325-3a-doc-evidence.test.js +1172 -0
  213. package/ci/mechanism-325-3a-doc-obligations.test.js +742 -0
  214. package/ci/mechanism-36-verify-timeout.test.js +534 -0
  215. package/ci/mechanism-37-portability-lint.test.js +71 -0
  216. package/ci/mechanism-38-verify-all.test.js +112 -0
  217. package/ci/mechanism-39-opencode-verify-outcomes.test.js +374 -0
  218. package/ci/mechanism-pr334-haiku.test.js +298 -0
  219. package/ci/mechanism-pr334-luna.test.js +192 -0
  220. package/ci/mechanism-pr334-opencode.test.js +313 -0
  221. package/ci/mechanism-pr334-r2-boundary.test.js +239 -0
  222. package/ci/mechanism-pr334-r2-resolution.test.js +243 -0
  223. package/ci/mechanism-pr334-r2-scope.test.js +127 -0
  224. package/ci/mechanism-pr334-r3-boundary.test.js +356 -0
  225. package/ci/mechanism-pr334-r3-citations.test.js +205 -0
  226. package/ci/mechanism-pr334-r3-headings.test.js +268 -0
  227. package/ci/portability-lint.js +288 -0
  228. package/docs/document-lifecycle.md +57 -1
  229. package/docs/repository-contract.md +1 -1
  230. package/harness-everything/SKILL.md +1 -1
  231. package/harness-everything/scripts/doc-evidence.js +471 -0
  232. package/harness-everything/scripts/doc-lifecycle.js +1 -1
  233. package/harness-everything/scripts/doc-obligations.js +1571 -0
  234. package/opencode-plugin/README.md +33 -2
  235. package/opencode-plugin/hooks/verify.js +87 -11
  236. package/opencode-plugin/index.mjs +216 -25
  237. package/opencode-plugin/plugin.json +1 -1
  238. package/package.json +3 -1
  239. package/plugins/harness-everything/.codex-plugin/plugin.json +1 -1
  240. package/plugins/harness-everything/plugin.json +1 -1
  241. package/plugins/harness-everything/skills/harness-everything/SKILL.md +1 -1
  242. package/plugins/harness-everything/skills/harness-everything/scripts/doc-evidence.js +471 -0
  243. package/plugins/harness-everything/skills/harness-everything/scripts/doc-lifecycle.js +1 -1
  244. package/plugins/harness-everything/skills/harness-everything/scripts/doc-obligations.js +1571 -0
  245. package/sbom.cdx.json +7 -7
  246. package/scripts/verify-all.js +314 -0
@@ -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.34.0",
13
+ "version": "0.36.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.34.0",
4
+ "version": "0.36.0",
5
5
  "author": {
6
6
  "name": "Miya Daniel"
7
7
  },
@@ -180,6 +180,8 @@ jobs:
180
180
  run: npm run test:plugin:submission
181
181
  - name: Platform compatibility matrix matches official-source and installer contracts
182
182
  run: npm run test:platform:compatibility
183
+ - name: Test sources stay portable across the OS matrix
184
+ run: npm run test:portability
183
185
 
184
186
  installer-e2e:
185
187
  strategy:
package/AGENTS.md CHANGED
@@ -65,8 +65,11 @@ npm run test:routing:invariants
65
65
  npm run test:plugin:openai
66
66
  npm run test:plugin:submission
67
67
  npm run test:platform:compatibility
68
+ npm run test:portability
68
69
  ```
69
70
 
71
+ `npm run verify:all` runs this set in CI order and prints paste-ready evidence; every known gate stays in the report as PASS/FAIL/UNCHECKED with a reason. `-- --fast` runs the pre-push subset, `-- --clean` runs every gate in a fresh detached worktree of HEAD, and `-- --node22` adds the Node.js 22 execution smoke-test lane (Node 22 dependency-install compatibility stays UNCHECKED locally; CI's runtime-floor job owns it).
72
+
70
73
  If waza is installed (`~/bin/waza`), also run:
71
74
 
72
75
  ```bash
package/CHANGELOG.md CHANGED
@@ -2,6 +2,48 @@
2
2
 
3
3
  All notable changes to this project are documented in this file.
4
4
 
5
+ ## [0.36.0](https://github.com/dyphn1/Harness-everything/compare/v0.35.0...v0.36.0) (2026-10-18)
6
+
7
+ ### Features
8
+
9
+ * **verify:** add one-shot local gate runner and portability lint ([af1ef16](https://github.com/dyphn1/Harness-everything/commit/af1ef164c1f05e8779160f010cc20a1a122ea69e))
10
+
11
+ ### Bug Fixes
12
+
13
+ * **opencode-plugin:** give idle verification a real budget instead of a 60s cap ([60973f0](https://github.com/dyphn1/Harness-everything/commit/60973f0afb5f5fdb450620aaff5ab5d5138f9976))
14
+ * **opencode-plugin:** keep both streams in signatures, timeout only on budget expiry ([fa65afe](https://github.com/dyphn1/Harness-everything/commit/fa65afe0bf358fa4f35a787227d31901cdee700a))
15
+ * **opencode-plugin:** keep Jest Console payload lines out of failure markers ([2e1f0bb](https://github.com/dyphn1/Harness-everything/commit/2e1f0bb0eeddcac9c4c77991040873d2b5f5ca23))
16
+ * **opencode-plugin:** rank test-level failure markers over suite-level context ([46811a1](https://github.com/dyphn1/Harness-everything/commit/46811a1389bda7fe9aa88f280d9d44a4cc3e98e5))
17
+ * **opencode:** recognize indented Mocha failure markers ([1041493](https://github.com/dyphn1/Harness-everything/commit/1041493eeea2f25030e0218d89e607a3f4e48bab))
18
+ * **opencode:** respect Jest Console indentation when parsing failure markers ([cd38f1e](https://github.com/dyphn1/Harness-everything/commit/cd38f1eba564025641c47776ea540c83629f2428))
19
+ * **verify:** classify verification outcomes and normalize breaker signatures ([e2ea651](https://github.com/dyphn1/Harness-everything/commit/e2ea6511ca3c400b8f94086a8496af20a8a1823b))
20
+ * **verify:** close portability-lint and verify-all review gaps ([05e2d8c](https://github.com/dyphn1/Harness-everything/commit/05e2d8ca0f4328426c60ffc4e66804358cd86941))
21
+
22
+ ## [0.35.0](https://github.com/dyphn1/Harness-everything/compare/v0.34.0...v0.35.0) (2026-10-18)
23
+
24
+ ### Features
25
+
26
+ * **doc-lifecycle:** add phase 3a doc-change obligation derivation and evidence producer ([61590e1](https://github.com/dyphn1/Harness-everything/commit/61590e1e4ee39652964df5120ded085cd5cf6ecc)), closes [#325](https://github.com/dyphn1/Harness-everything/issues/325) [#325](https://github.com/dyphn1/Harness-everything/issues/325)
27
+
28
+ ### Bug Fixes
29
+
30
+ * **doc-lifecycle:** address review findings on phase 3a ([#334](https://github.com/dyphn1/Harness-everything/issues/334)) ([3a0f3ae](https://github.com/dyphn1/Harness-everything/commit/3a0f3aec6461cd0570c8b1de7a93dd37419a5fda)), closes [#335](https://github.com/dyphn1/Harness-everything/issues/335) [#325](https://github.com/dyphn1/Harness-everything/issues/325)
31
+ * **doc-lifecycle:** close phase 3a review round 2 gaps ([#334](https://github.com/dyphn1/Harness-everything/issues/334)) ([643c489](https://github.com/dyphn1/Harness-everything/commit/643c4899a0f43d3c27fcc26dae06c0b5b421a657)), closes [#325](https://github.com/dyphn1/Harness-everything/issues/325)
32
+ * **doc-lifecycle:** close phase 3a review round 3 gaps ([#334](https://github.com/dyphn1/Harness-everything/issues/334)) ([ccb7c48](https://github.com/dyphn1/Harness-everything/commit/ccb7c487fa67415f8ef183fba7484b237b558c93)), closes [#325](https://github.com/dyphn1/Harness-everything/issues/325)
33
+ * **doc-lifecycle:** harden requirement identity and revision evidence ([a4c1d03](https://github.com/dyphn1/Harness-everything/commit/a4c1d03db1b0c6ec0315c0b9e9c1a65d2437adbb))
34
+ * **doc-lifecycle:** preserve requirement resolution and trigger scope ([352ceb3](https://github.com/dyphn1/Harness-everything/commit/352ceb31a28cda92f88a0d7ab64381aa907c2ee3))
35
+ * **doc-lifecycle:** retain changed citations and decision obligations ([c68cf40](https://github.com/dyphn1/Harness-everything/commit/c68cf40a4b188169a98cbb66d511a2c5561cdde4))
36
+
37
+ ## [Unreleased]
38
+
39
+ ### Bug Fixes
40
+
41
+ * **doc-obligations:** keep changed REQ citations in unknown sync scope and recognize indented Decision headings
42
+ * **doc-obligations:** keep title-only REQ test edits out of new-test and assertion scope
43
+ * **doc-obligations:** reject PRD revision identities not chained to the base declaration
44
+ * **doc-obligations:** keep unrelated REQ-citing tests out of requirement-sync scope
45
+ * **doc-evidence:** keep unresolved requirement identities out of observed requirement-sync failures
46
+
5
47
  ## [0.34.0](https://github.com/dyphn1/Harness-everything/compare/v0.33.0...v0.34.0) (2026-10-17)
6
48
 
7
49
  ### Features
@@ -0,0 +1,22 @@
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:b25abca04f8d754127ca52e4832c346aedfc5c3fe1b844b0ea8b568f08bd29f6"
13
+ ---
14
+ # Graph
15
+
16
+ ### REQ-GRPH-001
17
+
18
+ The router records one topology per task.
19
+
20
+ #### Acceptance
21
+
22
+ - exactly one topology is recorded
@@ -0,0 +1,22 @@
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:842b30aa81c8fbe346e53a328708f163f90b9e0bba7ee080c08d918426b4977e"
13
+ ---
14
+ # Graph
15
+
16
+ ### REQ-GRPH-001
17
+
18
+ The router records one topology per task.
19
+
20
+ #### Acceptance
21
+
22
+ - one or more topologies are recorded
@@ -0,0 +1,24 @@
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:be987b0583efa406fc1d271a0cadee449a345e45f2e9a91e6707bbde06547ef2"
13
+ ---
14
+ # Graph
15
+
16
+ ## Context
17
+
18
+ The router is deterministic.
19
+
20
+ ### REQ-GRPH-020 (aliases: REQ-GRAPH-020): Export
21
+
22
+ The graph exports a stable index.
23
+
24
+ Acceptance: the index is byte-identical across runs.
@@ -0,0 +1,24 @@
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:d85bce39a521bd142110733356b88133a6c33036715d6d9248e2b3a7711591a9"
13
+ ---
14
+ # Graph
15
+
16
+ ## Context
17
+
18
+ The router is deterministic.
19
+
20
+ ### REQ-GRPH-020 (aliases: REQ-GRAPH-021): Export
21
+
22
+ The graph exports a stable index.
23
+
24
+ Acceptance: the index is byte-identical across runs.
@@ -0,0 +1,2 @@
1
+ // REQ-GRPH-001
2
+ assert.equal(run(), 1);
@@ -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:a103bf860ed9d2cf7100d93eb8f0e3c3bce322d47e0f9fd83914b5bcc264ef70"
13
+ ---
14
+ # Graph
15
+
16
+ ### REQ-GRPH-001
17
+
18
+ The router records one topology per task.
19
+
20
+ Acceptance: exactly one topology is recorded.
@@ -0,0 +1,2 @@
1
+ // REQ-GRPH-001
2
+ assert.equal(run(), 2);
@@ -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:a103bf860ed9d2cf7100d93eb8f0e3c3bce322d47e0f9fd83914b5bcc264ef70"
13
+ ---
14
+ # Graph
15
+
16
+ ### REQ-GRPH-001
17
+
18
+ The router records one topology per task.
19
+
20
+ Acceptance: exactly one topology is recorded.
@@ -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:a103bf860ed9d2cf7100d93eb8f0e3c3bce322d47e0f9fd83914b5bcc264ef70"
13
+ ---
14
+ # Graph
15
+
16
+ ### REQ-GRPH-001
17
+
18
+ The router records one topology per task.
19
+
20
+ Acceptance: exactly one topology is recorded.
@@ -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:a103bf860ed9d2cf7100d93eb8f0e3c3bce322d47e0f9fd83914b5bcc264ef70"
13
+ ---
14
+ # Graph
15
+
16
+ ### REQ-GRPH-001
17
+
18
+ The router records one topology per task.
19
+
20
+ Acceptance: exactly one topology is recorded.
@@ -0,0 +1,7 @@
1
+ {
2
+ "complete": true,
3
+ "waiverInventoryComplete": true,
4
+ "baseDigest": "ae509889693e7c586b2641654ff1fb4d1ec355c3735fb1839996a5e9a34a2c70",
5
+ "candidateDigest": "598c5319ac32def29c3c087cd286db9edaf632609aa5fefef854d3b8c9a46007",
6
+ "configDigest": "e1df4edbdeafb51eac88e1c4256ee2613b647055bbc2f3ed458bfe872d9a09a5"
7
+ }
@@ -0,0 +1,3 @@
1
+ test('REQ-GRPH-011 check', () => {
2
+ assert.equal(run(), 1);
3
+ });
@@ -0,0 +1,2 @@
1
+ test('REQ-GRPH-011 check', () => {
2
+ assert.equal(run(), 2);
@@ -0,0 +1,24 @@
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:631fcb9e83c127ab08bdb8fb1c1367dd1c5119c4a83b636484e0e397c0cfb679"
13
+ ---
14
+ # Graph
15
+
16
+ ## Context
17
+
18
+ The router is deterministic.
19
+
20
+ ### REQ-GRPH-020 (replaces: REQ-GRPH-012): Export
21
+
22
+ The graph exports a stable index.
23
+
24
+ Acceptance: the index is byte-identical across runs.
@@ -0,0 +1,24 @@
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:1bfd88602d309cd322b7502a2917d493fcc4252a91b1a7f24f45c220b4f6b367"
13
+ ---
14
+ # Graph
15
+
16
+ ## Context
17
+
18
+ The router is determinstic.
19
+
20
+ ### REQ-GRPH-020 (replaces: REQ-GRPH-012): Export
21
+
22
+ The graph exports a stable index.
23
+
24
+ Acceptance: the index is byte-identical across runs.
@@ -0,0 +1 @@
1
+ exports.run = () => 1;
@@ -0,0 +1 @@
1
+ exports.run = () => 2;
@@ -0,0 +1,2 @@
1
+ // REQ-GRPH-001: router check
2
+ assert.equal(run(), 1);
@@ -0,0 +1,2 @@
1
+ // REQ-GRPH-001: router check (reworded)
2
+ assert.equal(run(), 1);
@@ -0,0 +1,2 @@
1
+ // REQ-GRPH-011
2
+ assert['deepStrictEqual'](run(), 1);
@@ -0,0 +1,2 @@
1
+ // REQ-GRPH-011
2
+ assert['deepStrictEqual'](run(), 2);
@@ -0,0 +1,2 @@
1
+ // REQ-GRPH-011
2
+ assert[method](run(), 1);
@@ -0,0 +1,2 @@
1
+ // REQ-GRPH-011
2
+ assert[method](run(), 2);
@@ -0,0 +1,11 @@
1
+ {
2
+ "governed": [
3
+ { "path": "docs/prd/**", "role": "prd" },
4
+ { "path": "docs/adr/**", "role": "adr" },
5
+ { "path": "docs/reference/**", "role": "reference" }
6
+ ],
7
+ "domains": ["GRPH"],
8
+ "legacy": ["docs/adr/legacy/**"],
9
+ "derived": [{ "path": "docs/roadmap/index.md", "generator": "npm run docs:index" }],
10
+ "tickets": "tracker"
11
+ }
@@ -0,0 +1,20 @@
1
+ ---
2
+ id: GRPH-010
3
+ role: adr
4
+ status: accepted
5
+ ---
6
+ # GRPH-010 Fenced examples
7
+
8
+ ## Context
9
+
10
+ Examples help readers.
11
+
12
+ ## Decision
13
+
14
+ Run lint first.
15
+
16
+ ```md
17
+ # Example
18
+ ```
19
+
20
+ Then check links.
@@ -0,0 +1,20 @@
1
+ ---
2
+ id: GRPH-010
3
+ role: adr
4
+ status: accepted
5
+ ---
6
+ # GRPH-010 Fenced examples
7
+
8
+ ## Context
9
+
10
+ Examples help readers.
11
+
12
+ ## Decision
13
+
14
+ Run lint first.
15
+
16
+ ```md
17
+ # Example
18
+ ```
19
+
20
+ Then check links and record evidence.
@@ -0,0 +1,20 @@
1
+ ---
2
+ id: GRPH-010
3
+ role: adr
4
+ status: accepted
5
+ ---
6
+ # GRPH-010 Fenced examples
7
+
8
+ ## Context
9
+
10
+ Examples help readers.
11
+
12
+ ## Decision
13
+
14
+ Run lint first.
15
+
16
+ ~~~md
17
+ # Example
18
+ ~~~
19
+
20
+ Then check links.
@@ -0,0 +1,20 @@
1
+ ---
2
+ id: GRPH-010
3
+ role: adr
4
+ status: accepted
5
+ ---
6
+ # GRPH-010 Fenced examples
7
+
8
+ ## Context
9
+
10
+ Examples help readers.
11
+
12
+ ## Decision
13
+
14
+ Run lint first.
15
+
16
+ ~~~md
17
+ # Example
18
+ ~~~
19
+
20
+ Then check links and record evidence.
@@ -0,0 +1,2 @@
1
+ // REQ-GRPH-011
2
+ assert.deepStrictEqual(run(), 1);
@@ -0,0 +1,2 @@
1
+ // REQ-GRPH-011
2
+ assert.deepStrictEqual(run(), 2);
@@ -0,0 +1,14 @@
1
+ ---
2
+ id: GRPH-008
3
+ role: adr
4
+ status: accepted
5
+ ---
6
+ # GRPH-008 Batch writes
7
+
8
+ ## Context
9
+
10
+ Writes arrive in bursts.
11
+
12
+ ## Decision
13
+
14
+ Batch writes per second.
@@ -0,0 +1,2 @@
1
+ // REQ-GRPH-001
2
+ assert.equal(run(), 1);
@@ -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:a103bf860ed9d2cf7100d93eb8f0e3c3bce322d47e0f9fd83914b5bcc264ef70"
13
+ ---
14
+ # Graph
15
+
16
+ ### REQ-GRPH-001
17
+
18
+ The router records one topology per task.
19
+
20
+ Acceptance: exactly one topology is recorded.
@@ -0,0 +1,2 @@
1
+ // REQ-GRPH-001
2
+ assert.equal(run(), 2);
@@ -0,0 +1,3 @@
1
+ # Index
2
+
3
+ Generated from the model.
@@ -0,0 +1,3 @@
1
+ # Index
2
+
3
+ Generated from the model.
@@ -0,0 +1,7 @@
1
+ {
2
+ "governed": [{ "path": "docs/reference/**", "role": "reference" }],
3
+ "domains": ["GRPH"],
4
+ "legacy": [],
5
+ "derived": [{ "path": "docs/index.md", "sources": ["src/model/**"], "generator": "npm run docs:index" }],
6
+ "tickets": "tracker"
7
+ }
@@ -0,0 +1,3 @@
1
+ # Index
2
+
3
+ Generated from the model.
@@ -0,0 +1,3 @@
1
+ # Summary
2
+
3
+ Generated from the model.
@@ -0,0 +1,3 @@
1
+ # Index
2
+
3
+ Generated from the model.
@@ -0,0 +1,3 @@
1
+ # Summary
2
+
3
+ Generated from the model.
@@ -0,0 +1,10 @@
1
+ {
2
+ "governed": [{ "path": "docs/reference/**", "role": "reference" }],
3
+ "domains": ["GRPH"],
4
+ "legacy": [],
5
+ "derived": [
6
+ { "path": "docs/index.md", "sources": ["src/model.js"], "generator": "npm run docs:index" },
7
+ { "path": "docs/model-summary.md", "sources": ["src/model.js"], "generator": "npm run docs:summary" }
8
+ ],
9
+ "tickets": "tracker"
10
+ }
@@ -0,0 +1,2 @@
1
+ // REQ-GRPH-011
2
+ assert.equal(run(), 1);
@@ -0,0 +1,19 @@
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:918eb7f37004bb9527a46a8e827161629cdef3c45dae374154ff319847cfe7f9"
13
+ ---
14
+ ### REQ-GRPH-011: Stable requirement
15
+
16
+ The router keeps the stable behavior.
17
+
18
+ Acceptance: preserve the stable behavior.
19
+