@c4a/context-cli 0.6.19 → 0.7.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 (273) hide show
  1. package/README.md +67 -6
  2. package/README.zh-CN.md +42 -5
  3. package/cli.js +75051 -42154
  4. package/indexers/bundles/context-code-indexer/SKILL.md +20 -0
  5. package/indexers/bundles/context-code-indexer/context-indexer.yaml +230 -0
  6. package/indexers/bundles/context-code-indexer/references/composers/contracts-and-chains.md +23 -0
  7. package/indexers/bundles/context-code-indexer/references/composers/cross-module-chain.md +22 -0
  8. package/indexers/bundles/context-code-indexer/references/composers/development-and-delivery.md +22 -0
  9. package/indexers/bundles/context-code-indexer/references/composers/event-flow.md +21 -0
  10. package/indexers/bundles/context-code-indexer/references/composers/examples-and-documentation.md +22 -0
  11. package/indexers/bundles/context-code-indexer/references/composers/persistence-boundary.md +21 -0
  12. package/indexers/bundles/context-code-indexer/references/composers/protocol-boundary.md +22 -0
  13. package/indexers/bundles/context-code-indexer/references/composers/public-contract.md +23 -0
  14. package/indexers/bundles/context-code-indexer/references/indexer.md +49 -0
  15. package/indexers/bundles/context-code-indexer/references/metrics.md +201 -0
  16. package/indexers/bundles/context-code-indexer/templates/adapter-integration.md +119 -0
  17. package/indexers/bundles/context-code-indexer/templates/api-service.md +118 -0
  18. package/indexers/bundles/context-code-indexer/templates/background-runtime.md +109 -0
  19. package/indexers/bundles/context-code-indexer/templates/cli-tool.md +129 -0
  20. package/indexers/bundles/context-code-indexer/templates/component-library.md +99 -0
  21. package/indexers/bundles/context-code-indexer/templates/contract-source.md +73 -0
  22. package/indexers/bundles/context-code-indexer/templates/data-sync-reconciliation.md +77 -0
  23. package/indexers/bundles/context-code-indexer/templates/derived-generated-source.md +117 -0
  24. package/indexers/bundles/context-code-indexer/templates/domain-service.md +109 -0
  25. package/indexers/bundles/context-code-indexer/templates/event-consumer.md +62 -0
  26. package/indexers/bundles/context-code-indexer/templates/gateway-facade.md +89 -0
  27. package/indexers/bundles/context-code-indexer/templates/monorepo-container.md +124 -0
  28. package/indexers/bundles/context-code-indexer/templates/plugin-extension.md +52 -0
  29. package/indexers/bundles/context-code-indexer/templates/sdk-library.md +132 -0
  30. package/indexers/bundles/context-code-indexer/templates/storage-repository.md +56 -0
  31. package/indexers/bundles/context-code-indexer/templates/web-application.md +146 -0
  32. package/indexers/bundles/context-code-indexer/tests/fixtures/chapters.json +226 -0
  33. package/indexers/bundles/context-code-indexer/tests/fixtures/composers.json +82 -0
  34. package/indexers/bundles/context-code-indexer/tests/fixtures/profiles.json +210 -0
  35. package/indexers/bundles/context-code-indexer/tests/fixtures/scenarios.json +122 -0
  36. package/indexers/bundles/context-markdown-indexer/SKILL.md +20 -0
  37. package/indexers/bundles/context-markdown-indexer/context-indexer.yaml +147 -0
  38. package/indexers/bundles/context-markdown-indexer/references/classification.md +63 -0
  39. package/indexers/bundles/context-markdown-indexer/references/editorial-policy.md +106 -0
  40. package/indexers/bundles/context-markdown-indexer/references/indexer.md +23 -0
  41. package/indexers/bundles/context-markdown-indexer/references/semantic-planning.md +146 -0
  42. package/indexers/bundles/context-markdown-indexer/references/structure-and-artifacts.md +109 -0
  43. package/indexers/bundles/context-markdown-indexer/tests/fixtures/anonymous.json +31 -0
  44. package/indexers/bundles/context-markdown-indexer/tests/fixtures/editorial.json +309 -0
  45. package/indexers/bundles/context-markdown-indexer/tests/fixtures/migration-equivalence.json +186 -0
  46. package/indexers/bundles/context-markdown-indexer/tests/fixtures/profiles.json +171 -0
  47. package/indexers/bundles/context-markdown-indexer/tests/fixtures/routing.json +151 -0
  48. package/indexers/capability-manifest.json +40 -0
  49. package/indexers/contracts/hard-rule-conformance.json +2644 -0
  50. package/indexers/contracts/operator-contract.json +35 -0
  51. package/indexers/contracts/profile-contract.json +10162 -0
  52. package/indexers/release-manifest.json +208 -0
  53. package/package.json +5 -4
  54. package/plugins/README.md +17 -109
  55. package/plugins/README_CN.md +11 -89
  56. package/plugins/VERSION +1 -1
  57. package/plugins/claude/.claude-plugin/plugin.json +3 -11
  58. package/plugins/claude/CLAUDE.md +1 -1
  59. package/plugins/claude/README.md +1 -1
  60. package/plugins/claude/commands/context.md +76 -1
  61. package/plugins/codex/.codex-plugin/plugin.json +6 -17
  62. package/plugins/codex/AGENTS.md +1 -1
  63. package/plugins/codex/README.md +1 -1
  64. package/plugins/codex/skills/context/SKILL.md +77 -13
  65. package/plugins/cursor/.cursor-plugin/plugin.json +4 -17
  66. package/plugins/cursor/AGENTS.md +1 -1
  67. package/plugins/cursor/README.md +3 -2
  68. package/plugins/cursor/commands/c4a-context.md +76 -3
  69. package/plugins/skills/{c4a-context → context}/SKILL.md +78 -14
  70. package/plugins/skills/context-code-indexer/SKILL.md +20 -0
  71. package/plugins/skills/context-code-indexer/context-indexer.yaml +230 -0
  72. package/plugins/skills/context-code-indexer/references/composers/contracts-and-chains.md +23 -0
  73. package/plugins/skills/context-code-indexer/references/composers/cross-module-chain.md +22 -0
  74. package/plugins/skills/context-code-indexer/references/composers/development-and-delivery.md +22 -0
  75. package/plugins/skills/context-code-indexer/references/composers/event-flow.md +21 -0
  76. package/plugins/skills/context-code-indexer/references/composers/examples-and-documentation.md +22 -0
  77. package/plugins/skills/context-code-indexer/references/composers/persistence-boundary.md +21 -0
  78. package/plugins/skills/context-code-indexer/references/composers/protocol-boundary.md +22 -0
  79. package/plugins/skills/context-code-indexer/references/composers/public-contract.md +23 -0
  80. package/plugins/skills/context-code-indexer/references/indexer.md +49 -0
  81. package/plugins/skills/context-code-indexer/references/metrics.md +201 -0
  82. package/plugins/skills/context-code-indexer/templates/adapter-integration.md +119 -0
  83. package/plugins/skills/context-code-indexer/templates/api-service.md +118 -0
  84. package/plugins/skills/context-code-indexer/templates/background-runtime.md +109 -0
  85. package/plugins/skills/context-code-indexer/templates/cli-tool.md +129 -0
  86. package/plugins/skills/context-code-indexer/templates/component-library.md +99 -0
  87. package/plugins/skills/context-code-indexer/templates/contract-source.md +73 -0
  88. package/plugins/skills/context-code-indexer/templates/data-sync-reconciliation.md +77 -0
  89. package/plugins/skills/context-code-indexer/templates/derived-generated-source.md +117 -0
  90. package/plugins/skills/context-code-indexer/templates/domain-service.md +109 -0
  91. package/plugins/skills/context-code-indexer/templates/event-consumer.md +62 -0
  92. package/plugins/skills/context-code-indexer/templates/gateway-facade.md +89 -0
  93. package/plugins/skills/context-code-indexer/templates/monorepo-container.md +124 -0
  94. package/plugins/skills/context-code-indexer/templates/plugin-extension.md +52 -0
  95. package/plugins/skills/context-code-indexer/templates/sdk-library.md +132 -0
  96. package/plugins/skills/context-code-indexer/templates/storage-repository.md +56 -0
  97. package/plugins/skills/context-code-indexer/templates/web-application.md +146 -0
  98. package/plugins/skills/context-code-indexer/tests/fixtures/chapters.json +226 -0
  99. package/plugins/skills/context-code-indexer/tests/fixtures/composers.json +82 -0
  100. package/plugins/skills/context-code-indexer/tests/fixtures/profiles.json +210 -0
  101. package/plugins/skills/context-code-indexer/tests/fixtures/scenarios.json +122 -0
  102. package/plugins/skills/context-markdown-indexer/SKILL.md +20 -0
  103. package/plugins/skills/context-markdown-indexer/context-indexer.yaml +147 -0
  104. package/plugins/skills/context-markdown-indexer/references/classification.md +63 -0
  105. package/plugins/skills/context-markdown-indexer/references/editorial-policy.md +106 -0
  106. package/plugins/skills/context-markdown-indexer/references/indexer.md +23 -0
  107. package/plugins/skills/context-markdown-indexer/references/semantic-planning.md +146 -0
  108. package/plugins/skills/context-markdown-indexer/references/structure-and-artifacts.md +109 -0
  109. package/plugins/skills/context-markdown-indexer/tests/fixtures/anonymous.json +31 -0
  110. package/plugins/skills/context-markdown-indexer/tests/fixtures/editorial.json +309 -0
  111. package/plugins/skills/context-markdown-indexer/tests/fixtures/migration-equivalence.json +186 -0
  112. package/plugins/skills/context-markdown-indexer/tests/fixtures/profiles.json +171 -0
  113. package/plugins/skills/context-markdown-indexer/tests/fixtures/routing.json +151 -0
  114. package/providers/context/actions/accept-main-index-run.yaml +7 -0
  115. package/providers/context/actions/accept-material-answer-run.yaml +7 -0
  116. package/providers/context/actions/accept-post-author-composer-run.yaml +7 -0
  117. package/providers/context/actions/actualize-material-answer-bindings.yaml +8 -0
  118. package/providers/context/actions/apply-document-optimization-guidance.yaml +5 -0
  119. package/providers/context/actions/apply-indexer-project.yaml +7 -0
  120. package/providers/context/actions/audit-material-gap-state.yaml +8 -0
  121. package/providers/context/actions/audit-projected-artifact-fan-out.yaml +8 -0
  122. package/providers/context/actions/authorize-indexer-contract-overlay.yaml +7 -0
  123. package/providers/context/actions/authorize-indexer-dependencies.yaml +7 -0
  124. package/providers/context/actions/authorize-indexer-program-execution.yaml +7 -0
  125. package/providers/context/actions/build-main-index-author-worksets.yaml +7 -0
  126. package/providers/context/actions/build-main-index-catalog-fallback.yaml +7 -0
  127. package/providers/context/actions/build-main-index-partition-worksets.yaml +7 -0
  128. package/providers/context/actions/build-material-question-workset.yaml +7 -0
  129. package/providers/context/actions/build-post-author-composer-worksets.yaml +7 -0
  130. package/providers/context/actions/build-question-target-inventory.yaml +7 -0
  131. package/providers/context/actions/build-subject-catalog.yaml +7 -0
  132. package/providers/context/actions/build-target-resolution-views.yaml +7 -0
  133. package/providers/context/actions/checkpoint-material-answer-review.yaml +8 -0
  134. package/providers/context/actions/checkpoint-material-gaps.yaml +8 -0
  135. package/providers/context/actions/close-indexer-approved-knowledge.yaml +8 -0
  136. package/providers/context/actions/compile-indexer-candidates.yaml +8 -0
  137. package/providers/context/actions/compose-indexer-post-author-fragments.yaml +7 -0
  138. package/providers/context/actions/configure-community-indexer-fallback.yaml +6 -0
  139. package/providers/context/actions/configure-indexer-providers.yaml +6 -0
  140. package/providers/context/actions/confirm-index-requirement-workset.yaml +8 -0
  141. package/providers/context/actions/confirm-subject-reidentification.yaml +8 -0
  142. package/providers/context/actions/converge-main-index-partition-run.yaml +7 -0
  143. package/providers/context/actions/discover-markdown-indexer-providers.yaml +6 -0
  144. package/providers/context/actions/evaluate-material-gaps.yaml +8 -0
  145. package/providers/context/actions/fail-main-index-run.yaml +7 -0
  146. package/providers/context/actions/fail-material-answer-run.yaml +7 -0
  147. package/providers/context/actions/fail-post-author-composer-run.yaml +7 -0
  148. package/providers/context/actions/inspect-index-candidate-review-readiness.yaml +8 -0
  149. package/providers/context/actions/inspect-index-profile-failure.yaml +7 -0
  150. package/providers/context/actions/inspect-indexer-dependencies.yaml +7 -0
  151. package/providers/context/actions/inspect-indexer-program-execution.yaml +7 -0
  152. package/providers/context/actions/inspect-indexer-project-proposal.yaml +7 -0
  153. package/providers/context/actions/inspect-markdown-provider-capture.yaml +7 -0
  154. package/providers/context/actions/inspect-material-answer-review.yaml +8 -0
  155. package/providers/context/actions/materialize-indexer-instructions.yaml +7 -0
  156. package/providers/context/actions/observe-indexer-project.yaml +7 -0
  157. package/providers/context/actions/observe-main-index-run-ledger.yaml +7 -0
  158. package/providers/context/actions/observe-material-answer-runs.yaml +7 -0
  159. package/providers/context/actions/observe-post-author-composer-worksets.yaml +7 -0
  160. package/providers/context/actions/override-index-profile-audit.yaml +7 -0
  161. package/providers/context/actions/prepare-indexer-customization-project.yaml +7 -0
  162. package/providers/context/actions/prepare-main-index-run-ledger.yaml +7 -0
  163. package/providers/context/actions/prepare-material-answer-runs.yaml +7 -0
  164. package/providers/context/actions/propose-indexer-customization.yaml +7 -0
  165. package/providers/context/actions/propose-overlay-question-amendment.yaml +7 -0
  166. package/providers/context/actions/rebind-indexer-selection-to-requirement.yaml +7 -0
  167. package/providers/context/actions/reconcile-indexer-results.yaml +7 -0
  168. package/providers/context/actions/record-index-profile-revision.yaml +7 -0
  169. package/providers/context/actions/report-index-profile-failure.yaml +7 -0
  170. package/providers/context/actions/report-indexer-incremental-impact.yaml +8 -0
  171. package/providers/context/actions/resolve-effective-composers.yaml +7 -0
  172. package/providers/context/actions/review-material-answer-candidate.yaml +8 -0
  173. package/providers/context/actions/revise-index-output.yaml +7 -0
  174. package/providers/context/actions/route-index-requirement-confirmation.yaml +8 -0
  175. package/providers/context/actions/route-indexer-provider-selection.yaml +7 -0
  176. package/providers/context/actions/run-indexer-agent-step.yaml +7 -0
  177. package/providers/context/actions/run-indexer-post-author-composer.yaml +7 -0
  178. package/providers/context/actions/run-material-answer-indexers.yaml +7 -0
  179. package/providers/context/actions/start-main-index-run.yaml +7 -0
  180. package/providers/context/actions/start-material-answer-run.yaml +7 -0
  181. package/providers/context/actions/start-post-author-composer-run.yaml +7 -0
  182. package/providers/context/actions/validate-indexer-contract-overlays.yaml +7 -0
  183. package/providers/context/actions/validate-indexer-customization.yaml +7 -0
  184. package/providers/context/actions/validate-indexer-selection-proposal.yaml +7 -0
  185. package/providers/context/actions/validate-main-index-run.yaml +7 -0
  186. package/providers/context/actions/validate-markdown-provider-selection.yaml +7 -0
  187. package/providers/context/actions/validate-subject-key-schemas.yaml +8 -0
  188. package/providers/context/codes.yaml +70 -0
  189. package/providers/context/graphs/indexer.yaml +1068 -0
  190. package/providers/context/graphs/workspace.yaml +20 -1
  191. package/providers/context/manifest.json +1433 -121
  192. package/providers/context/provider.yaml +3 -2
  193. package/providers/context/resources/manuals/reference/code-extractors.md +2 -2
  194. package/providers/context/resources/manuals/reference/project-api.md +2 -2
  195. package/providers/context/resources/procedures/code-extraction.md +6 -2
  196. package/providers/context/resources/procedures/code-index-audit.md +36 -6
  197. package/providers/context/resources/procedures/document-optimization.md +23 -4
  198. package/providers/context/resources/semantic/code-index/templates/adapter.md +9 -0
  199. package/providers/context/resources/semantic/code-index/templates/contracts-and-chains.md +81 -0
  200. package/providers/context/resources/views/resolved-indexer-instructions.yaml +23 -0
  201. package/providers/context/schemas/document-optimization-decisions.schema.json +1 -1
  202. package/providers/context/schemas/indexer-agent-step-input.schema.json +30 -0
  203. package/providers/context/schemas/indexer-agent-step-result.schema.json +47 -0
  204. package/providers/context/schemas/indexer-candidate-compile-input.schema.json +57 -0
  205. package/providers/context/schemas/indexer-candidate-compile-output.schema.json +38 -0
  206. package/providers/context/schemas/indexer-candidate-review-readiness-input.schema.json +46 -0
  207. package/providers/context/schemas/indexer-candidate-review-readiness-output.schema.json +104 -0
  208. package/providers/context/schemas/indexer-contract-overlay-authorization-input.schema.json +32 -0
  209. package/providers/context/schemas/indexer-contract-overlay-authorization-result.schema.json +121 -0
  210. package/providers/context/schemas/indexer-contract-overlay-validation-input.schema.json +90 -0
  211. package/providers/context/schemas/indexer-contract-overlay-validation-result.schema.json +158 -0
  212. package/providers/context/schemas/indexer-customization-project-preparation-result.schema.json +44 -0
  213. package/providers/context/schemas/indexer-customization-proposal-draft.schema.json +83 -0
  214. package/providers/context/schemas/indexer-customization-validation-result.schema.json +36 -0
  215. package/providers/context/schemas/indexer-dependency-authorization-input.schema.json +71 -0
  216. package/providers/context/schemas/indexer-dependency-authorization-result.schema.json +138 -0
  217. package/providers/context/schemas/indexer-incremental-impact-input.schema.json +31 -0
  218. package/providers/context/schemas/indexer-incremental-impact-output.schema.json +52 -0
  219. package/providers/context/schemas/indexer-main-lifecycle-input.schema.json +187 -0
  220. package/providers/context/schemas/indexer-main-lifecycle-output.schema.json +180 -0
  221. package/providers/context/schemas/indexer-markdown-provider-capture-input.schema.json +17 -0
  222. package/providers/context/schemas/indexer-markdown-provider-capture-output.schema.json +54 -0
  223. package/providers/context/schemas/indexer-markdown-provider-validation-input.schema.json +34 -0
  224. package/providers/context/schemas/indexer-markdown-provider-validation-output.schema.json +75 -0
  225. package/providers/context/schemas/indexer-material-answer-lifecycle-input.schema.json +90 -0
  226. package/providers/context/schemas/indexer-material-answer-lifecycle-output.schema.json +80 -0
  227. package/providers/context/schemas/indexer-material-answer-review-inspection-input.schema.json +32 -0
  228. package/providers/context/schemas/indexer-material-answer-review-inspection-output.schema.json +32 -0
  229. package/providers/context/schemas/indexer-material-answer-review-resolution-input.schema.json +19 -0
  230. package/providers/context/schemas/indexer-material-answer-review-resolution-output.schema.json +87 -0
  231. package/providers/context/schemas/indexer-material-gap-lifecycle-input.schema.json +86 -0
  232. package/providers/context/schemas/indexer-material-gap-lifecycle-output.schema.json +19 -0
  233. package/providers/context/schemas/indexer-materialize-request.schema.json +53 -0
  234. package/providers/context/schemas/indexer-materialized-resource.schema.json +57 -0
  235. package/providers/context/schemas/indexer-overlay-question-amendment.schema.json +13 -0
  236. package/providers/context/schemas/indexer-overlay-question-proposal-input.schema.json +40 -0
  237. package/providers/context/schemas/indexer-overlay-question-rebind-input.schema.json +35 -0
  238. package/providers/context/schemas/indexer-overlay-question-rebind-result.schema.json +25 -0
  239. package/providers/context/schemas/indexer-post-author-fragment-request.schema.json +26 -0
  240. package/providers/context/schemas/indexer-post-author-fragment-result.schema.json +18 -0
  241. package/providers/context/schemas/indexer-post-author-lifecycle-input.schema.json +94 -0
  242. package/providers/context/schemas/indexer-post-author-lifecycle-output.schema.json +72 -0
  243. package/providers/context/schemas/indexer-profile-failure-inspection-input.schema.json +13 -0
  244. package/providers/context/schemas/indexer-profile-failure-inspection-result.schema.json +19 -0
  245. package/providers/context/schemas/indexer-profile-failure-report-input.schema.json +22 -0
  246. package/providers/context/schemas/indexer-profile-failure-report-result.schema.json +49 -0
  247. package/providers/context/schemas/indexer-profile-override-decision.schema.json +20 -0
  248. package/providers/context/schemas/indexer-profile-override-result.schema.json +49 -0
  249. package/providers/context/schemas/indexer-profile-revision-agent-input.schema.json +18 -0
  250. package/providers/context/schemas/indexer-profile-revision-record-input.schema.json +31 -0
  251. package/providers/context/schemas/indexer-profile-revision-record-result.schema.json +45 -0
  252. package/providers/context/schemas/indexer-program-execution-authorization-input.schema.json +145 -0
  253. package/providers/context/schemas/indexer-program-execution-authorization-result.schema.json +60 -0
  254. package/providers/context/schemas/indexer-project-action-result.schema.json +19 -0
  255. package/providers/context/schemas/indexer-project-gate-input.schema.json +100 -0
  256. package/providers/context/schemas/indexer-project-observation-input.schema.json +16 -0
  257. package/providers/context/schemas/indexer-project-observation-result.schema.json +42 -0
  258. package/providers/context/schemas/indexer-provider-route-input.schema.json +55 -0
  259. package/providers/context/schemas/indexer-provider-route-report.schema.json +188 -0
  260. package/providers/context/schemas/indexer-requirement-confirmation-input.schema.json +27 -0
  261. package/providers/context/schemas/indexer-requirement-confirmation-output.schema.json +24 -0
  262. package/providers/context/schemas/indexer-result-reconciliation-input.schema.json +59 -0
  263. package/providers/context/schemas/indexer-result-reconciliation-output.schema.json +43 -0
  264. package/providers/context/schemas/indexer-selection-proposal-input.schema.json +12 -0
  265. package/providers/context/schemas/indexer-selection-proposal-validation.schema.json +23 -0
  266. package/providers/context/schemas/indexer-subject-reidentification-input.schema.json +37 -0
  267. package/providers/context/schemas/indexer-subject-reidentification-output.schema.json +31 -0
  268. package/providers/context/skills/configure-indexer-providers/SKILL.md +58 -0
  269. package/providers/context/skills/prepare-indexer-customization-project/SKILL.md +31 -0
  270. package/providers/context/skills/propose-indexer-customization/SKILL.md +40 -0
  271. package/providers/context/skills/revise-index-output/SKILL.md +12 -0
  272. package/providers/context/skills/run-indexer-agent-step/SKILL.md +20 -0
  273. package/providers/context/skills/run-indexer-post-author-composer/SKILL.md +21 -0
@@ -0,0 +1,309 @@
1
+ {
2
+ "protocol": "context.indexer.markdown-editorial-fixture-set/v1",
3
+ "anonymized": true,
4
+ "cases": [
5
+ {
6
+ "id": "anonymous-unanswered-questions",
7
+ "profile": "faq-support",
8
+ "detection_scope": "section",
9
+ "source_markdown": "Should the interface expose a summary?\n\nHow should retries be verified?",
10
+ "expected_signal": {
11
+ "code": "unanswered-question-set",
12
+ "confidence": "review",
13
+ "recommended_action": "omit",
14
+ "omission_reason": "unanswered-question"
15
+ },
16
+ "selected_outcome": "omit",
17
+ "assessment": null
18
+ },
19
+ {
20
+ "id": "anonymous-answered-questions",
21
+ "profile": "faq-support",
22
+ "detection_scope": "section",
23
+ "source_markdown": "How is stable mode enabled?\nUse `stableMode`.\n\nHow is the result verified?\nRun `tool verify` and inspect the success state.",
24
+ "expected_signal": {
25
+ "code": "answered-question-set",
26
+ "confidence": "review",
27
+ "recommended_action": "reshape",
28
+ "omission_reason": null
29
+ },
30
+ "selected_outcome": "reshape",
31
+ "assessment": null
32
+ },
33
+ {
34
+ "id": "anonymous-empty-table-row",
35
+ "profile": "test-validation",
36
+ "detection_scope": "section",
37
+ "source_markdown": "| Check | Result |\n| --- | --- |\n| | |",
38
+ "expected_signal": {
39
+ "code": "empty-table-row",
40
+ "confidence": "high",
41
+ "recommended_action": "repair",
42
+ "omission_reason": null
43
+ },
44
+ "selected_outcome": "repair",
45
+ "assessment": null
46
+ },
47
+ {
48
+ "id": "anonymous-placeholder-only",
49
+ "profile": "standard-policy",
50
+ "detection_scope": "section",
51
+ "source_markdown": "TBD",
52
+ "expected_signal": {
53
+ "code": "placeholder-content",
54
+ "confidence": "high",
55
+ "recommended_action": "omit",
56
+ "omission_reason": "empty-or-placeholder"
57
+ },
58
+ "selected_outcome": "omit",
59
+ "assessment": null
60
+ },
61
+ {
62
+ "id": "anonymous-wide-complex-table",
63
+ "profile": "technical-guide",
64
+ "detection_scope": "section",
65
+ "source_markdown": "| Mode | Input | Output | Recovery | Reference |\n| --- | --- | --- | --- | --- |\n| stable | request | result | retry | [Guide](https://example.invalid/guide) |",
66
+ "expected_signal": {
67
+ "code": "wide-table",
68
+ "confidence": "high",
69
+ "recommended_action": "reshape",
70
+ "omission_reason": null
71
+ },
72
+ "selected_outcome": "reshape",
73
+ "assessment": null
74
+ },
75
+ {
76
+ "id": "anonymous-long-table-cell",
77
+ "profile": "technical-guide",
78
+ "detection_scope": "section",
79
+ "source_markdown": "| Item | Detail |\n| --- | --- |\n| stable | This cell contains a deliberately extended evidence-preserving explanation of the runtime boundary, its input contract, its output contract, its recovery condition, and the exact reader task. The explanation remains in one lookup cell even though it is long enough that a reader would benefit from a short index and a separate detail entry with the same facts and evidence. |",
80
+ "expected_signal": {
81
+ "code": "long-table-cell",
82
+ "confidence": "high",
83
+ "recommended_action": "reshape",
84
+ "omission_reason": null
85
+ },
86
+ "selected_outcome": "reshape",
87
+ "assessment": null
88
+ },
89
+ {
90
+ "id": "anonymous-raw-link",
91
+ "profile": "user-and-developer-guide",
92
+ "detection_scope": "section",
93
+ "source_markdown": "Read https://example.invalid/guide for the procedure.",
94
+ "expected_signal": {
95
+ "code": "raw-or-unlabeled-link",
96
+ "confidence": "high",
97
+ "recommended_action": "repair",
98
+ "omission_reason": null
99
+ },
100
+ "selected_outcome": "repair",
101
+ "assessment": null
102
+ },
103
+ {
104
+ "id": "anonymous-adjacent-links",
105
+ "profile": "user-and-developer-guide",
106
+ "detection_scope": "section",
107
+ "source_markdown": "[First guide](https://example.invalid/first)[Second guide](https://example.invalid/second)",
108
+ "expected_signal": {
109
+ "code": "adjacent-links",
110
+ "confidence": "high",
111
+ "recommended_action": "repair",
112
+ "omission_reason": null
113
+ },
114
+ "selected_outcome": "repair",
115
+ "assessment": null
116
+ },
117
+ {
118
+ "id": "anonymous-volatile-destination",
119
+ "profile": "public-api-reference",
120
+ "detection_scope": "section",
121
+ "source_markdown": "Open [the diagnostic view](https://example.invalid/view?expires=temporary-value).",
122
+ "expected_signal": {
123
+ "code": "volatile-query-url",
124
+ "confidence": "review",
125
+ "recommended_action": "request-input",
126
+ "omission_reason": "volatile-reference"
127
+ },
128
+ "selected_outcome": "request-input",
129
+ "assessment": null
130
+ },
131
+ {
132
+ "id": "anonymous-obsolete-only-block",
133
+ "profile": "incident-review",
134
+ "detection_scope": "section",
135
+ "source_markdown": "~~The retired mode is no longer available.~~",
136
+ "expected_signal": {
137
+ "code": "strikethrough-only-block",
138
+ "confidence": "review",
139
+ "recommended_action": "omit",
140
+ "omission_reason": "obsolete-without-replacement"
141
+ },
142
+ "selected_outcome": "omit",
143
+ "assessment": null
144
+ },
145
+ {
146
+ "id": "anonymous-open-proposal",
147
+ "profile": "product-requirements",
148
+ "detection_scope": "section",
149
+ "source_markdown": "Maybe add a second feedback path?",
150
+ "expected_signal": {
151
+ "code": "brainstorm-without-decision",
152
+ "confidence": "review",
153
+ "recommended_action": "omit",
154
+ "omission_reason": "draft-without-decision"
155
+ },
156
+ "selected_outcome": "omit",
157
+ "assessment": null
158
+ },
159
+ {
160
+ "id": "anonymous-duplicate-representation",
161
+ "profile": "domain-reference",
162
+ "detection_scope": "cross-section",
163
+ "source_markdown": "The same definition appears in two source-backed Sections with equivalent authority and lifecycle.",
164
+ "expected_signal": {
165
+ "code": "duplicate-fragment",
166
+ "confidence": "high",
167
+ "recommended_action": "omit",
168
+ "omission_reason": "duplicate-content"
169
+ },
170
+ "selected_outcome": "omit",
171
+ "assessment": null
172
+ },
173
+ {
174
+ "id": "anonymous-unstable-owner",
175
+ "profile": "runbook",
176
+ "detection_scope": "section",
177
+ "source_markdown": "Owner: sample-person",
178
+ "expected_signal": {
179
+ "code": "unstable-owner-reference",
180
+ "confidence": "review",
181
+ "recommended_action": "request-input",
182
+ "omission_reason": null
183
+ },
184
+ "selected_outcome": "request-input",
185
+ "assessment": null
186
+ },
187
+ {
188
+ "id": "anonymous-sensitive-value-boundary",
189
+ "profile": "public-api-reference",
190
+ "detection_scope": "safety-baseline",
191
+ "source_markdown": "A credential-shaped value is present in the authorized source view but is intentionally not reproduced in this fixture.",
192
+ "expected_signal": {
193
+ "code": "sensitive-value-candidate",
194
+ "confidence": "review",
195
+ "recommended_action": "request-input",
196
+ "omission_reason": "sensitive-value-candidate"
197
+ },
198
+ "selected_outcome": "request-input",
199
+ "assessment": null
200
+ },
201
+ {
202
+ "id": "anonymous-heading-hierarchy",
203
+ "profile": "documentation-site",
204
+ "detection_scope": "section",
205
+ "source_markdown": "## Runtime\n\n#### Recovery",
206
+ "expected_signal": {
207
+ "code": "heading-hierarchy-invalid",
208
+ "confidence": "high",
209
+ "recommended_action": "repair",
210
+ "omission_reason": null
211
+ },
212
+ "selected_outcome": "repair",
213
+ "assessment": null
214
+ },
215
+ {
216
+ "id": "anonymous-overloaded-heading",
217
+ "profile": "documentation-site",
218
+ "detection_scope": "section",
219
+ "source_markdown": "## [Guide](https://example.invalid/guide) [Reference](https://example.invalid/reference)",
220
+ "expected_signal": {
221
+ "code": "heading-content-overloaded",
222
+ "confidence": "high",
223
+ "recommended_action": "repair",
224
+ "omission_reason": null
225
+ },
226
+ "selected_outcome": "repair",
227
+ "assessment": null
228
+ },
229
+ {
230
+ "id": "anonymous-damaged-markdown",
231
+ "profile": "documentation-site",
232
+ "detection_scope": "section",
233
+ "source_markdown": "```text\nunclosed example",
234
+ "expected_signal": {
235
+ "code": "markdown-syntax-damaged",
236
+ "confidence": "high",
237
+ "recommended_action": "repair",
238
+ "omission_reason": null
239
+ },
240
+ "selected_outcome": "repair",
241
+ "assessment": null
242
+ },
243
+ {
244
+ "id": "anonymous-conversion-residue",
245
+ "profile": "release-migration-guide",
246
+ "detection_scope": "section",
247
+ "source_markdown": "<!-- conversion:source-marker -->",
248
+ "expected_signal": {
249
+ "code": "conversion-artifact",
250
+ "confidence": "high",
251
+ "recommended_action": "omit",
252
+ "omission_reason": "conversion-artifact"
253
+ },
254
+ "selected_outcome": "omit",
255
+ "assessment": null
256
+ },
257
+ {
258
+ "id": "anonymous-facts-and-draft",
259
+ "profile": "decision-record",
260
+ "detection_scope": "section",
261
+ "source_markdown": "The current mode uses stable processing.\n\nMaybe add another strategy later.",
262
+ "expected_signal": {
263
+ "code": "mixed-facts-and-draft",
264
+ "confidence": "review",
265
+ "recommended_action": "reshape",
266
+ "omission_reason": null
267
+ },
268
+ "selected_outcome": "reshape",
269
+ "assessment": null
270
+ },
271
+ {
272
+ "id": "anonymous-clean-reference",
273
+ "profile": "domain-reference",
274
+ "detection_scope": "section",
275
+ "source_markdown": "A stable term names the durable boundary described by this source.",
276
+ "expected_signal": null,
277
+ "selected_outcome": "keep",
278
+ "assessment": null
279
+ },
280
+ {
281
+ "id": "anonymous-stable-role-assessment",
282
+ "profile": "runbook",
283
+ "detection_scope": "section",
284
+ "source_markdown": "Owner: platform-operations",
285
+ "expected_signal": {
286
+ "code": "unstable-owner-reference",
287
+ "confidence": "review",
288
+ "recommended_action": "request-input",
289
+ "omission_reason": null
290
+ },
291
+ "selected_outcome": "keep",
292
+ "assessment": "unstable-owner-reference: false-positive because this Section defines platform-operations as a stable responsibility."
293
+ },
294
+ {
295
+ "id": "anonymous-historical-source-fidelity",
296
+ "profile": "incident-review",
297
+ "detection_scope": "section",
298
+ "source_markdown": "~~Historical label retained from the source record.~~",
299
+ "expected_signal": {
300
+ "code": "strikethrough-only-block",
301
+ "confidence": "review",
302
+ "recommended_action": "omit",
303
+ "omission_reason": "obsolete-without-replacement"
304
+ },
305
+ "selected_outcome": "keep",
306
+ "assessment": "strikethrough-only-block: keeping the quoted historical label preserves source fidelity for this incident record."
307
+ }
308
+ ]
309
+ }
@@ -0,0 +1,186 @@
1
+ {
2
+ "protocol": "context.indexer.markdown-migration-equivalence-fixture-set/v1",
3
+ "anonymized": true,
4
+ "cases": [
5
+ {
6
+ "id": "evidence-first",
7
+ "rule_id": "evidence-first",
8
+ "authority": "community-instructions",
9
+ "source_shape": "A captured page has an operations-looking path but its body is a product acceptance specification.",
10
+ "expected_decision": "classify-from-body-authority-and-reader-task",
11
+ "forbidden_decision": "classify-from-path",
12
+ "recovery": "Read the complete authorized evidence before returning a Section intent."
13
+ },
14
+ {
15
+ "id": "complete-evidence-read",
16
+ "rule_id": "complete-evidence-read",
17
+ "authority": "community-instructions",
18
+ "source_shape": "A long page preview shows only headings while the required evidence view still has unread pages.",
19
+ "expected_decision": "continue-current-evidence-read",
20
+ "forbidden_decision": "decide-from-heading-preview",
21
+ "recovery": "Follow the current workset evidence continuation before authoring."
22
+ },
23
+ {
24
+ "id": "mixed-section-intents",
25
+ "rule_id": "mixed-section-intents",
26
+ "authority": "community-instructions",
27
+ "source_shape": "One document contains product behavior, technical design, and a recovery procedure.",
28
+ "expected_decision": "classify-each-section",
29
+ "forbidden_decision": "force-one-document-classification",
30
+ "recovery": "Split along continuous reader-task boundaries and return registered intents."
31
+ },
32
+ {
33
+ "id": "reuse-exact-subject",
34
+ "rule_id": "reuse-exact-subject",
35
+ "authority": "community-instructions",
36
+ "source_shape": "The target-resolution view contains an exact current subject with matching evidence.",
37
+ "expected_decision": "reuse-existing",
38
+ "forbidden_decision": "create-title-alias",
39
+ "recovery": "Use the supplied target identity and leave identity derivation to Context."
40
+ },
41
+ {
42
+ "id": "independent-subject",
43
+ "rule_id": "independent-subject",
44
+ "authority": "community-instructions",
45
+ "source_shape": "A separately named component has its own contract, lifecycle, and standalone reader questions.",
46
+ "expected_decision": "create-independent",
47
+ "forbidden_decision": "merge-into-unrelated-parent",
48
+ "recovery": "Bind the independent decision to current evidence and a permitted SubjectKey schema."
49
+ },
50
+ {
51
+ "id": "local-heading-stays-section",
52
+ "rule_id": "local-heading-stays-section",
53
+ "authority": "community-instructions",
54
+ "source_shape": "A local heading contains one warning that only makes sense inside the parent guide.",
55
+ "expected_decision": "retain-section-group",
56
+ "forbidden_decision": "create-thin-subject",
57
+ "recovery": "Keep the warning as a source-backed Section under the owning Artifact."
58
+ },
59
+ {
60
+ "id": "navigation-only",
61
+ "rule_id": "navigation-only",
62
+ "authority": "community-instructions",
63
+ "source_shape": "A page contains labels and unresolved links but no citable reader content.",
64
+ "expected_decision": "request-material",
65
+ "forbidden_decision": "publish-empty-artifact",
66
+ "recovery": "Return the registered missing-material or unsupported disposition."
67
+ },
68
+ {
69
+ "id": "density-only-guides-reading",
70
+ "rule_id": "density-only-guides-reading",
71
+ "authority": "community-instructions",
72
+ "source_shape": "A fragmented note contains many short independent claims.",
73
+ "expected_decision": "use-micro-reading",
74
+ "forbidden_decision": "infer-quality-from-density",
75
+ "recovery": "Keep evidence windows narrow, then apply the normal semantic gates."
76
+ },
77
+ {
78
+ "id": "duplicate-same-boundary",
79
+ "rule_id": "duplicate-same-boundary",
80
+ "authority": "community-instructions",
81
+ "source_shape": "Two paragraphs repeat the same claim for the same reader task and authority.",
82
+ "expected_decision": "collapse-duplicate",
83
+ "forbidden_decision": "publish-repeated-sections",
84
+ "recovery": "Retain one canonical statement with its evidence boundary."
85
+ },
86
+ {
87
+ "id": "conflicting-evidence",
88
+ "rule_id": "conflicting-evidence",
89
+ "authority": "community-instructions",
90
+ "source_shape": "Two current sources disagree and the workset supplies no precedence.",
91
+ "expected_decision": "keep-unresolved",
92
+ "forbidden_decision": "choose-by-file-order",
93
+ "recovery": "Return a material question or supported diagnostic instead of guessing."
94
+ },
95
+ {
96
+ "id": "source-backed-relation",
97
+ "rule_id": "source-backed-relation",
98
+ "authority": "community-instructions",
99
+ "source_shape": "A cited Section explicitly states that one authorized component consumes another component's output.",
100
+ "expected_decision": "emit-owned-cited-claim",
101
+ "forbidden_decision": "emit-endpoint-only-relation",
102
+ "recovery": "Keep the claim only under the Section carrying relation evidence."
103
+ },
104
+ {
105
+ "id": "source-authored-uncertainty",
106
+ "rule_id": "source-authored-uncertainty",
107
+ "authority": "community-instructions",
108
+ "source_shape": "The source explicitly describes a possible cause, while the structured schema has no confidence field.",
109
+ "expected_decision": "preserve-uncertainty-in-prose",
110
+ "forbidden_decision": "invent-confidence-field",
111
+ "recovery": "Keep Agent uncertainty unresolved and preserve only source-authored uncertainty."
112
+ },
113
+ {
114
+ "id": "canonical-layout-identity",
115
+ "rule_id": "canonical-layout-identity",
116
+ "authority": "context-layout",
117
+ "source_shape": "An accepted Result carries a current SubjectKey and Section projection intents.",
118
+ "expected_decision": "derive-node-artifact-view-section-and-path",
119
+ "forbidden_decision": "accept-hand-authored-path",
120
+ "recovery": "Recompute the proposal from the current Result and contract."
121
+ },
122
+ {
123
+ "id": "layout-collision",
124
+ "rule_id": "layout-collision",
125
+ "authority": "context-layout",
126
+ "source_shape": "Two proposals claim the same Node, Artifact, Section, or output path.",
127
+ "expected_decision": "reject-collision",
128
+ "forbidden_decision": "resolve-with-alias",
129
+ "recovery": "Return to current subject resolution instead of mutating a path."
130
+ },
131
+ {
132
+ "id": "destructive-layout-change",
133
+ "rule_id": "destructive-layout-change",
134
+ "authority": "context-layout",
135
+ "source_shape": "A current Artifact would be removed or moved after a new Result.",
136
+ "expected_decision": "require-confirm-layout-change",
137
+ "forbidden_decision": "apply-destructive-change-silently",
138
+ "recovery": "Bind one human confirmation to the exact base and target digests."
139
+ },
140
+ {
141
+ "id": "eligible-omission",
142
+ "rule_id": "eligible-omission",
143
+ "authority": "community-instructions",
144
+ "source_shape": "A Section is only an unanswered placeholder and the analyzer supplies an eligible omission reason.",
145
+ "expected_decision": "omit-with-exact-reason",
146
+ "forbidden_decision": "publish-placeholder",
147
+ "recovery": "Use the exact eligible omission reason and preserve lifecycle audit in Context."
148
+ },
149
+ {
150
+ "id": "protected-knowledge-retention",
151
+ "rule_id": "protected-knowledge-retention",
152
+ "authority": "community-instructions",
153
+ "source_shape": "A question has an evidence-backed answer and a deprecation names its replacement.",
154
+ "expected_decision": "retain-knowledge",
155
+ "forbidden_decision": "omit-by-label",
156
+ "recovery": "Repair or reshape without removing the answer or replacement."
157
+ },
158
+ {
159
+ "id": "missing-input",
160
+ "rule_id": "missing-input",
161
+ "authority": "community-instructions",
162
+ "source_shape": "A Section contains an ambiguous owner or link purpose that current evidence cannot recover.",
163
+ "expected_decision": "request-input",
164
+ "forbidden_decision": "keep-to-avoid-pause",
165
+ "recovery": "Ask one concise batched question after completing independent safe work."
166
+ },
167
+ {
168
+ "id": "stale-recovery",
169
+ "rule_id": "stale-recovery",
170
+ "authority": "context-layout",
171
+ "source_shape": "The workset, profile contract, or source digest changes before layout acceptance.",
172
+ "expected_decision": "reject-stale-and-recompute",
173
+ "forbidden_decision": "patch-digest-or-path",
174
+ "recovery": "Resume from the fresh Context route and recompute the bound Result and layout."
175
+ },
176
+ {
177
+ "id": "three-attempt-guidance",
178
+ "rule_id": "three-attempt-guidance",
179
+ "authority": "context-revision",
180
+ "source_shape": "The same current quality problem survives three accepted revision attempts while other Sections pass.",
181
+ "expected_decision": "request-aggregated-guidance",
182
+ "forbidden_decision": "restart-passing-sections",
183
+ "recovery": "Ask for content organization, source fidelity, or missing material once."
184
+ }
185
+ ]
186
+ }
@@ -0,0 +1,171 @@
1
+ [
2
+ {
3
+ "protocol": "context.indexer.authoring-fixture/v1",
4
+ "id": "anonymous-domain-reference",
5
+ "anonymized": true,
6
+ "profile": "domain-reference",
7
+ "source_role": "authoritative-document",
8
+ "logical_unit_id": "reader-subject",
9
+ "logical_unit_ref": "node:anonymous-domain-reference",
10
+ "canonical_facts": { "target": { "eligible": true } },
11
+ "artifact_policy_variant": "standard",
12
+ "artifacts": [{ "artifact_id": "content", "artifact_kind": "content", "purpose": "required", "reader_question_refs": ["question:source-authority"], "evidence_refs": ["evidence:anonymous-domain-reference-source"] }],
13
+ "evidence_refs": ["evidence:anonymous-domain-reference-source"]
14
+ },
15
+ {
16
+ "protocol": "context.indexer.authoring-fixture/v1",
17
+ "id": "anonymous-product-requirements",
18
+ "anonymized": true,
19
+ "profile": "product-requirements",
20
+ "source_role": "authoritative-document",
21
+ "logical_unit_id": "reader-subject",
22
+ "logical_unit_ref": "node:anonymous-product-requirements",
23
+ "canonical_facts": { "target": { "eligible": true } },
24
+ "artifact_policy_variant": "standard",
25
+ "artifacts": [{ "artifact_id": "content", "artifact_kind": "content", "purpose": "required", "reader_question_refs": ["question:source-authority"], "evidence_refs": ["evidence:anonymous-product-requirements-source"] }],
26
+ "evidence_refs": ["evidence:anonymous-product-requirements-source"]
27
+ },
28
+ {
29
+ "protocol": "context.indexer.authoring-fixture/v1",
30
+ "id": "anonymous-technical-guide",
31
+ "anonymized": true,
32
+ "profile": "technical-guide",
33
+ "source_role": "authoritative-document",
34
+ "logical_unit_id": "reader-subject",
35
+ "logical_unit_ref": "node:anonymous-technical-guide",
36
+ "canonical_facts": { "target": { "eligible": true } },
37
+ "artifact_policy_variant": "standard",
38
+ "artifacts": [{ "artifact_id": "content", "artifact_kind": "content", "purpose": "required", "reader_question_refs": ["question:source-authority"], "evidence_refs": ["evidence:anonymous-technical-guide-source"] }],
39
+ "evidence_refs": ["evidence:anonymous-technical-guide-source"]
40
+ },
41
+ {
42
+ "protocol": "context.indexer.authoring-fixture/v1",
43
+ "id": "anonymous-user-and-developer-guide",
44
+ "anonymized": true,
45
+ "profile": "user-and-developer-guide",
46
+ "source_role": "supporting-document",
47
+ "logical_unit_id": "reader-subject",
48
+ "logical_unit_ref": "node:anonymous-user-and-developer-guide",
49
+ "canonical_facts": { "target": { "eligible": true } },
50
+ "artifact_policy_variant": "standard",
51
+ "artifacts": [{ "artifact_id": "content", "artifact_kind": "content", "purpose": "required", "reader_question_refs": ["question:source-authority"], "evidence_refs": ["evidence:anonymous-user-and-developer-guide-source"] }],
52
+ "evidence_refs": ["evidence:anonymous-user-and-developer-guide-source"]
53
+ },
54
+ {
55
+ "protocol": "context.indexer.authoring-fixture/v1",
56
+ "id": "anonymous-public-api-reference",
57
+ "anonymized": true,
58
+ "profile": "public-api-reference",
59
+ "source_role": "authoritative-document",
60
+ "logical_unit_id": "reader-subject",
61
+ "logical_unit_ref": "node:anonymous-public-api-reference",
62
+ "canonical_facts": { "target": { "eligible": true } },
63
+ "artifact_policy_variant": "standard",
64
+ "artifacts": [{ "artifact_id": "content", "artifact_kind": "content", "purpose": "required", "reader_question_refs": ["question:source-authority"], "evidence_refs": ["evidence:anonymous-public-api-reference-source"] }],
65
+ "evidence_refs": ["evidence:anonymous-public-api-reference-source"]
66
+ },
67
+ {
68
+ "protocol": "context.indexer.authoring-fixture/v1",
69
+ "id": "anonymous-runbook",
70
+ "anonymized": true,
71
+ "profile": "runbook",
72
+ "source_role": "operational-document",
73
+ "logical_unit_id": "reader-subject",
74
+ "logical_unit_ref": "node:anonymous-runbook",
75
+ "canonical_facts": { "target": { "eligible": true } },
76
+ "artifact_policy_variant": "standard",
77
+ "artifacts": [{ "artifact_id": "content", "artifact_kind": "content", "purpose": "required", "reader_question_refs": ["question:source-authority"], "evidence_refs": ["evidence:anonymous-runbook-source"] }],
78
+ "evidence_refs": ["evidence:anonymous-runbook-source"]
79
+ },
80
+ {
81
+ "protocol": "context.indexer.authoring-fixture/v1",
82
+ "id": "anonymous-faq-support",
83
+ "anonymized": true,
84
+ "profile": "faq-support",
85
+ "source_role": "supporting-document",
86
+ "logical_unit_id": "reader-subject",
87
+ "logical_unit_ref": "node:anonymous-faq-support",
88
+ "canonical_facts": { "target": { "eligible": true } },
89
+ "artifact_policy_variant": "standard",
90
+ "artifacts": [{ "artifact_id": "content", "artifact_kind": "content", "purpose": "required", "reader_question_refs": ["question:source-authority"], "evidence_refs": ["evidence:anonymous-faq-support-source"] }],
91
+ "evidence_refs": ["evidence:anonymous-faq-support-source"]
92
+ },
93
+ {
94
+ "protocol": "context.indexer.authoring-fixture/v1",
95
+ "id": "anonymous-standard-policy",
96
+ "anonymized": true,
97
+ "profile": "standard-policy",
98
+ "source_role": "authoritative-document",
99
+ "logical_unit_id": "reader-subject",
100
+ "logical_unit_ref": "node:anonymous-standard-policy",
101
+ "canonical_facts": { "target": { "eligible": true } },
102
+ "artifact_policy_variant": "standard",
103
+ "artifacts": [{ "artifact_id": "content", "artifact_kind": "content", "purpose": "required", "reader_question_refs": ["question:source-authority"], "evidence_refs": ["evidence:anonymous-standard-policy-source"] }],
104
+ "evidence_refs": ["evidence:anonymous-standard-policy-source"]
105
+ },
106
+ {
107
+ "protocol": "context.indexer.authoring-fixture/v1",
108
+ "id": "anonymous-decision-record",
109
+ "anonymized": true,
110
+ "profile": "decision-record",
111
+ "source_role": "decision-record",
112
+ "logical_unit_id": "reader-subject",
113
+ "logical_unit_ref": "node:anonymous-decision-record",
114
+ "canonical_facts": { "target": { "eligible": true } },
115
+ "artifact_policy_variant": "standard",
116
+ "artifacts": [{ "artifact_id": "content", "artifact_kind": "content", "purpose": "required", "reader_question_refs": ["question:source-authority"], "evidence_refs": ["evidence:anonymous-decision-record-source"] }],
117
+ "evidence_refs": ["evidence:anonymous-decision-record-source"]
118
+ },
119
+ {
120
+ "protocol": "context.indexer.authoring-fixture/v1",
121
+ "id": "anonymous-incident-review",
122
+ "anonymized": true,
123
+ "profile": "incident-review",
124
+ "source_role": "operational-document",
125
+ "logical_unit_id": "reader-subject",
126
+ "logical_unit_ref": "node:anonymous-incident-review",
127
+ "canonical_facts": { "target": { "eligible": true } },
128
+ "artifact_policy_variant": "standard",
129
+ "artifacts": [{ "artifact_id": "content", "artifact_kind": "content", "purpose": "required", "reader_question_refs": ["question:source-authority"], "evidence_refs": ["evidence:anonymous-incident-review-source"] }],
130
+ "evidence_refs": ["evidence:anonymous-incident-review-source"]
131
+ },
132
+ {
133
+ "protocol": "context.indexer.authoring-fixture/v1",
134
+ "id": "anonymous-test-validation",
135
+ "anonymized": true,
136
+ "profile": "test-validation",
137
+ "source_role": "authoritative-document",
138
+ "logical_unit_id": "reader-subject",
139
+ "logical_unit_ref": "node:anonymous-test-validation",
140
+ "canonical_facts": { "target": { "eligible": true } },
141
+ "artifact_policy_variant": "standard",
142
+ "artifacts": [{ "artifact_id": "content", "artifact_kind": "content", "purpose": "required", "reader_question_refs": ["question:source-authority"], "evidence_refs": ["evidence:anonymous-test-validation-source"] }],
143
+ "evidence_refs": ["evidence:anonymous-test-validation-source"]
144
+ },
145
+ {
146
+ "protocol": "context.indexer.authoring-fixture/v1",
147
+ "id": "anonymous-release-migration-guide",
148
+ "anonymized": true,
149
+ "profile": "release-migration-guide",
150
+ "source_role": "operational-document",
151
+ "logical_unit_id": "reader-subject",
152
+ "logical_unit_ref": "node:anonymous-release-migration-guide",
153
+ "canonical_facts": { "target": { "eligible": true } },
154
+ "artifact_policy_variant": "standard",
155
+ "artifacts": [{ "artifact_id": "content", "artifact_kind": "content", "purpose": "required", "reader_question_refs": ["question:source-authority"], "evidence_refs": ["evidence:anonymous-release-migration-guide-source"] }],
156
+ "evidence_refs": ["evidence:anonymous-release-migration-guide-source"]
157
+ },
158
+ {
159
+ "protocol": "context.indexer.authoring-fixture/v1",
160
+ "id": "anonymous-documentation-site",
161
+ "anonymized": true,
162
+ "profile": "documentation-site",
163
+ "source_role": "authoritative-document",
164
+ "logical_unit_id": "reader-subject",
165
+ "logical_unit_ref": "node:anonymous-documentation-site",
166
+ "canonical_facts": { "target": { "eligible": true } },
167
+ "artifact_policy_variant": "standard",
168
+ "artifacts": [{ "artifact_id": "content", "artifact_kind": "content", "purpose": "required", "reader_question_refs": ["question:source-authority"], "evidence_refs": ["evidence:anonymous-documentation-site-source"] }],
169
+ "evidence_refs": ["evidence:anonymous-documentation-site-source"]
170
+ }
171
+ ]