its-magic 0.1.2-9 → 0.1.2

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 (232) hide show
  1. package/README.md +1602 -755
  2. package/bin/its-magic.js +121 -11
  3. package/bin/postinstall.js +21 -0
  4. package/installer.ps1 +759 -0
  5. package/installer.py +981 -0
  6. package/installer.sh +649 -0
  7. package/package.json +18 -14
  8. package/scripts/check_intake_template_parity.py +284 -0
  9. package/scripts/doc_profile_lib.py +415 -0
  10. package/scripts/guard_installer_publish.py +88 -0
  11. package/scripts/intake_bug_routing_guard.py +67 -0
  12. package/scripts/intake_evidence_lib.py +802 -0
  13. package/scripts/intake_evidence_validate.py +73 -0
  14. package/scripts/materialize_codebase_map.py +184 -0
  15. package/scripts/remote_config_summary.py +243 -0
  16. package/template/.cursor/agents/curator.mdc +35 -0
  17. package/template/.cursor/agents/dev.mdc +29 -0
  18. package/template/.cursor/agents/po.mdc +141 -0
  19. package/template/.cursor/agents/qa.mdc +28 -0
  20. package/template/.cursor/agents/release.mdc +28 -0
  21. package/template/.cursor/agents/security.mdc +98 -0
  22. package/template/.cursor/agents/tech-lead.mdc +57 -0
  23. package/template/.cursor/commands/architecture.md +127 -0
  24. package/template/.cursor/commands/ask.md +55 -0
  25. package/template/.cursor/commands/auto.md +533 -0
  26. package/template/.cursor/commands/discovery.md +47 -0
  27. package/template/.cursor/commands/execute.md +343 -0
  28. package/template/.cursor/commands/intake.md +323 -0
  29. package/template/.cursor/commands/map-codebase.md +46 -0
  30. package/template/.cursor/commands/memory-audit.md +175 -0
  31. package/template/.cursor/commands/milestone-complete.md +51 -0
  32. package/template/.cursor/commands/milestone-start.md +59 -0
  33. package/template/.cursor/commands/pause.md +64 -0
  34. package/{.cursor/commands/gsd-phase-context.md → template/.cursor/commands/phase-context.md} +6 -2
  35. package/template/.cursor/commands/plan-verify.md +34 -0
  36. package/template/.cursor/commands/qa.md +226 -0
  37. package/template/.cursor/commands/quick.md +41 -0
  38. package/template/.cursor/commands/refresh-context.md +82 -0
  39. package/template/.cursor/commands/release.md +505 -0
  40. package/template/.cursor/commands/research.md +49 -0
  41. package/template/.cursor/commands/resume.md +67 -0
  42. package/template/.cursor/commands/security-review.md +81 -0
  43. package/template/.cursor/commands/sprint-plan.md +103 -0
  44. package/template/.cursor/commands/status-reconcile.md +95 -0
  45. package/template/.cursor/commands/verify-work.md +152 -0
  46. package/template/.cursor/dev-environment.json.example +22 -0
  47. package/{.cursor → template/.cursor}/hooks/README.md +3 -2
  48. package/{.cursor/hooks/gsd-hook.py → template/.cursor/hooks/hook.py} +15 -6
  49. package/template/.cursor/hooks.json +26 -0
  50. package/template/.cursor/remote.json +31 -0
  51. package/template/.cursor/rules/caveman.mdc +184 -0
  52. package/template/.cursor/rules/coding-standards.mdc +39 -0
  53. package/template/.cursor/rules/core.mdc +111 -0
  54. package/template/.cursor/rules/handoffs.mdc +27 -0
  55. package/template/.cursor/rules/quality.mdc +49 -0
  56. package/template/.cursor/scratchpad.local.example.md +323 -0
  57. package/template/.cursor/scratchpad.md +324 -0
  58. package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/SKILL.md +2 -2
  59. package/template/.cursorignore +6 -0
  60. package/template/.env.example +28 -0
  61. package/template/.github/workflows/ci.yml +194 -0
  62. package/{.github → template/.github}/workflows/deploy.yml +5 -2
  63. package/template/.its-magic-version +1 -0
  64. package/template/README.md +1602 -0
  65. package/template/decisions/DEC-0001.md +11 -0
  66. package/template/decisions/DEC-0002.md +11 -0
  67. package/template/docs/developer/README.md +44 -0
  68. package/template/docs/engineering/architecture.md +9 -0
  69. package/template/docs/engineering/artifact-ordering-policy.md +48 -0
  70. package/template/docs/engineering/artifact-ownership-policy.md +57 -0
  71. package/template/docs/engineering/auto-orchestration-reference.md +1211 -0
  72. package/{docs → template/docs}/engineering/codebase-map.md +0 -5
  73. package/template/docs/engineering/compatibility-report.md +20 -0
  74. package/template/docs/engineering/compatibility-signals.md +7 -0
  75. package/template/docs/engineering/component-scope-report.md +16 -0
  76. package/template/docs/engineering/component-scope.md +19 -0
  77. package/template/docs/engineering/context/installer-owned-paths.manifest +96 -0
  78. package/template/docs/engineering/context/readme-section-affinity.json +30 -0
  79. package/template/docs/engineering/decisions.md +16 -0
  80. package/template/docs/engineering/legacy-drift-audit.md +21 -0
  81. package/template/docs/engineering/manifests/components/api-gateway.manifest.yaml +12 -0
  82. package/template/docs/engineering/manifests/registry.manifest.yaml +20 -0
  83. package/template/docs/engineering/manifests/repo.manifest.yaml +11 -0
  84. package/template/docs/engineering/phase-context.md +16 -0
  85. package/template/docs/engineering/release-targets.json +123 -0
  86. package/template/docs/engineering/research.md +29 -0
  87. package/template/docs/engineering/runbook.md +2320 -0
  88. package/template/docs/engineering/runtime-connectivity.md +81 -0
  89. package/template/docs/engineering/security-review.md +33 -0
  90. package/template/docs/engineering/spec-pack/README.md +20 -0
  91. package/template/docs/engineering/state-archive/README.md +15 -0
  92. package/template/docs/engineering/state.md +20 -0
  93. package/template/docs/engineering/status-normalization-report.md +19 -0
  94. package/template/docs/engineering/token-cost-parity-manifest.md +16 -0
  95. package/template/docs/engineering/us-0084-remote-e2e.md +44 -0
  96. package/template/docs/product/acceptance.md +1 -0
  97. package/template/docs/product/backlog.md +5 -0
  98. package/template/docs/product/vision.md +11 -0
  99. package/template/docs/user-guides/README.md +40 -0
  100. package/{handoffs → template/handoffs}/dev_to_qa.md +0 -3
  101. package/{handoffs → template/handoffs}/po_to_tl.md +0 -3
  102. package/{handoffs → template/handoffs}/qa_to_dev.md +1 -2
  103. package/template/handoffs/release_notes.md +51 -0
  104. package/template/handoffs/release_queue.md +47 -0
  105. package/template/handoffs/release_to_dev.md +31 -0
  106. package/template/handoffs/releases/Sxxxx-release-notes.md +62 -0
  107. package/template/handoffs/resume_brief.md +14 -0
  108. package/{handoffs → template/handoffs}/tl_to_dev.md +0 -2
  109. package/template/handoffs/token_cost_runs/README.md +26 -0
  110. package/template/its_magic/.its-magic-version +1 -0
  111. package/template/its_magic/README.md +9 -0
  112. package/template/scripts/auto_outer_driver.py +521 -0
  113. package/template/scripts/caveman_compress_input.py +903 -0
  114. package/template/scripts/check_downstream_ci_guard.py +67 -0
  115. package/template/scripts/check_intake_template_parity.py +284 -0
  116. package/template/scripts/check_token_cost_parity.py +69 -0
  117. package/template/scripts/dev_environment_lib.py +463 -0
  118. package/template/scripts/doc_profile_lib.py +415 -0
  119. package/template/scripts/downstream_ci_guard_lib.py +222 -0
  120. package/template/scripts/enforce-triad-hot-surface.py +753 -0
  121. package/template/scripts/guard_installer_publish.py +88 -0
  122. package/template/scripts/intake_bug_resume_brief_refresh.py +303 -0
  123. package/template/scripts/intake_bug_routing_guard.py +67 -0
  124. package/template/scripts/intake_evidence_lib.py +802 -0
  125. package/template/scripts/intake_evidence_validate.py +73 -0
  126. package/template/scripts/materialize_codebase_map.py +184 -0
  127. package/template/scripts/pack_json_validate.py +130 -0
  128. package/template/scripts/project_readme_coverage_lib.py +417 -0
  129. package/template/scripts/readme_feature_coverage_lib.py +608 -0
  130. package/template/scripts/remote_config_summary.py +243 -0
  131. package/template/scripts/sync_push_gates.py +198 -0
  132. package/template/scripts/token_cost_compare.py +40 -0
  133. package/template/scripts/token_cost_lib.py +108 -0
  134. package/template/scripts/uat_probe_lib.py +868 -0
  135. package/template/scripts/validate-and-push.ps1 +280 -0
  136. package/template/scripts/validate-and-push.sh +243 -0
  137. package/template/scripts/validate_doc_profile.py +103 -0
  138. package/template/scripts/validate_project_readme_coverage.py +151 -0
  139. package/template/scripts/validate_readme_feature_coverage.py +140 -0
  140. package/template/sprints/S0001/progress.md +1 -0
  141. package/template/sprints/S0001/qa-findings.md +9 -0
  142. package/template/sprints/S0001/release-findings.md +24 -0
  143. package/template/sprints/S0001/sprint.md +9 -0
  144. package/template/sprints/S0001/summary.md +7 -0
  145. package/template/sprints/S0001/tasks.md +1 -0
  146. package/template/sprints/S0001/uat.json +6 -0
  147. package/template/sprints/S0001/uat.md +5 -0
  148. package/template/sprints/quick/Q0001/summary.md +1 -0
  149. package/{sprints → template/sprints}/quick/Q0001/task.json +0 -1
  150. package/.cursor/agents/curator.mdc +0 -21
  151. package/.cursor/agents/dev.mdc +0 -20
  152. package/.cursor/agents/po.mdc +0 -19
  153. package/.cursor/agents/qa.mdc +0 -19
  154. package/.cursor/agents/release.mdc +0 -19
  155. package/.cursor/agents/tech-lead.mdc +0 -21
  156. package/.cursor/commands/gsd-architecture.md +0 -29
  157. package/.cursor/commands/gsd-auto.md +0 -27
  158. package/.cursor/commands/gsd-discovery.md +0 -27
  159. package/.cursor/commands/gsd-execute.md +0 -32
  160. package/.cursor/commands/gsd-intake.md +0 -28
  161. package/.cursor/commands/gsd-map-codebase.md +0 -25
  162. package/.cursor/commands/gsd-milestone-complete.md +0 -24
  163. package/.cursor/commands/gsd-milestone-start.md +0 -26
  164. package/.cursor/commands/gsd-pause.md +0 -25
  165. package/.cursor/commands/gsd-plan-verify.md +0 -26
  166. package/.cursor/commands/gsd-qa.md +0 -28
  167. package/.cursor/commands/gsd-quick.md +0 -24
  168. package/.cursor/commands/gsd-refresh-context.md +0 -26
  169. package/.cursor/commands/gsd-release.md +0 -29
  170. package/.cursor/commands/gsd-research.md +0 -28
  171. package/.cursor/commands/gsd-resume.md +0 -26
  172. package/.cursor/commands/gsd-sprint-plan.md +0 -30
  173. package/.cursor/commands/gsd-verify-work.md +0 -25
  174. package/.cursor/hooks.json +0 -26
  175. package/.cursor/plans/cursor-gsd-team-kit_8cfee9b8.plan.md +0 -57
  176. package/.cursor/remote.json +0 -18
  177. package/.cursor/rules/gsd-core.mdc +0 -18
  178. package/.cursor/rules/gsd-handoffs.mdc +0 -10
  179. package/.cursor/rules/gsd-quality.mdc +0 -15
  180. package/.cursor/scratchpad.md +0 -34
  181. package/.github/workflows/ci.yml +0 -47
  182. package/decisions/DEC-0001.md +0 -21
  183. package/decisions/DEC-0002.md +0 -21
  184. package/docs/engineering/architecture.md +0 -354
  185. package/docs/engineering/decisions.md +0 -6
  186. package/docs/engineering/research.md +0 -11
  187. package/docs/engineering/runbook.md +0 -32
  188. package/docs/engineering/state.md +0 -33
  189. package/docs/product/acceptance.md +0 -6
  190. package/docs/product/backlog.md +0 -7
  191. package/docs/product/vision.md +0 -46
  192. package/gsd-installer.ps1 +0 -189
  193. package/gsd-installer.py +0 -195
  194. package/gsd-installer.sh +0 -201
  195. package/handoffs/release_notes.md +0 -14
  196. package/handoffs/resume_brief.md +0 -8
  197. package/milestones/M0001/milestone.json +0 -7
  198. package/milestones/M0001/phases.json +0 -9
  199. package/milestones/M0001/progress.md +0 -3
  200. package/milestones/M0001/summary.md +0 -3
  201. package/scripts/generate-release-notes.ps1 +0 -74
  202. package/scripts/generate-release-notes.sh +0 -63
  203. package/scripts/release-all.ps1 +0 -423
  204. package/scripts/release-all.sh +0 -226
  205. package/sprints/S0001/progress.md +0 -4
  206. package/sprints/S0001/qa-findings.md +0 -113
  207. package/sprints/S0001/sprint.md +0 -70
  208. package/sprints/S0001/summary.md +0 -46
  209. package/sprints/S0001/tasks.md +0 -35
  210. package/sprints/S0001/uat.json +0 -8
  211. package/sprints/S0001/uat.md +0 -8
  212. package/sprints/quick/Q0001/summary.md +0 -3
  213. /package/{.cursor/rules/gsd-escalation.mdc → template/.cursor/rules/escalation.mdc} +0 -0
  214. /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/acceptance.json +0 -0
  215. /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/acceptance.md +0 -0
  216. /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/architecture.json +0 -0
  217. /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/architecture.md +0 -0
  218. /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/decision.json +0 -0
  219. /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/decision.md +0 -0
  220. /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/handoff.json +0 -0
  221. /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/handoff.md +0 -0
  222. /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/milestone.json +0 -0
  223. /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/phase-context.json +0 -0
  224. /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/plan-verify.json +0 -0
  225. /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/sprint.json +0 -0
  226. /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/sprint.md +0 -0
  227. /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/story.json +0 -0
  228. /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/story.md +0 -0
  229. /package/{.cursor/skills/gsd-team → template/.cursor/skills/its-magic}/templates/uat.json +0 -0
  230. /package/{docs → template/docs}/engineering/context/phase-template.json +0 -0
  231. /package/{docs → template/docs}/engineering/dependencies.json +0 -0
  232. /package/{sprints → template/sprints}/S0001/plan-verify.json +0 -0
package/package.json CHANGED
@@ -1,27 +1,31 @@
1
1
  {
2
2
  "name": "its-magic",
3
- "version": "0.1.2-9",
3
+ "version": "0.1.2",
4
4
  "description": "its-magic - AI dev team workflow for Cursor.",
5
5
  "license": "MIT",
6
6
  "bin": {
7
7
  "its-magic": "bin/its-magic.js"
8
8
  },
9
9
  "files": [
10
- ".cursor/",
11
- ".github/",
12
- "decisions/",
13
- "docs/",
14
- "handoffs/",
15
- "milestones/",
16
- "scripts/",
17
- "sprints/",
18
- "gsd-installer.ps1",
19
- "gsd-installer.sh",
20
- "gsd-installer.py",
21
- "README.md",
22
- "bin/its-magic.js"
10
+ "template/",
11
+ "installer.ps1",
12
+ "installer.sh",
13
+ "installer.py",
14
+ "scripts/doc_profile_lib.py",
15
+ "scripts/intake_evidence_validate.py",
16
+ "scripts/intake_evidence_lib.py",
17
+ "scripts/intake_bug_routing_guard.py",
18
+ "scripts/check_intake_template_parity.py",
19
+ "scripts/materialize_codebase_map.py",
20
+ "scripts/remote_config_summary.py",
21
+ "scripts/guard_installer_publish.py",
22
+ "bin/its-magic.js",
23
+ "bin/postinstall.js"
23
24
  ],
24
25
  "scripts": {
26
+ "guard:installer": "python scripts/guard_installer_publish.py",
27
+ "prepublishOnly": "npm run guard:installer",
28
+ "postinstall": "node bin/postinstall.js",
25
29
  "release:patch": "npm version patch && npm publish",
26
30
  "release:minor": "npm version minor && npm publish",
27
31
  "release:major": "npm version major && npm publish",
@@ -0,0 +1,284 @@
1
+ #!/usr/bin/env python3
2
+ """Verify active vs template/scripts/ bytes match for DEC-0063 intake gate modules (BUG-0001).
3
+
4
+ Scoped modes (DEC-0073 §10 / US-0090):
5
+ --scope=intake (default) DEC-0063 intake pair table.
6
+ --scope=caveman-compress DEC-0073 caveman input-compression pair table.
7
+ --scope=readme-feature-coverage DEC-0074 README feature-coverage pair table.
8
+ --scope=downstream-ci-guard DEC-0075 downstream CI guard script pair table.
9
+ --scope=us-0092 DEC-0078 full-autonomy outer driver + probe surfaces.
10
+ --scope=us-0093 DEC-0079 browser UAT probe surfaces.
11
+ --scope=us-0095 DEC-0080 native in-chat auto-chain surfaces.
12
+ --scope=bug-0012 DEC-0081 native-chain compliance surfaces (BUG-0012).
13
+ --scope=us-0096 DEC-0082 delivery modes surfaces (US-0096).
14
+ --scope=project-readme DEC-0083 project README bootstrap surfaces (US-0097).
15
+ --scope=dev-environment DEC-0084 dev auto-launch profile surfaces (US-0098).
16
+ --scope=all union of all tables.
17
+ """
18
+
19
+ from __future__ import annotations
20
+
21
+ import argparse
22
+ import sys
23
+ from pathlib import Path
24
+
25
+ INTAKE_TEMPLATE_PAIRS: tuple[tuple[str, str], ...] = (
26
+ ("scripts/intake_evidence_validate.py", "template/scripts/intake_evidence_validate.py"),
27
+ ("scripts/intake_evidence_lib.py", "template/scripts/intake_evidence_lib.py"),
28
+ ("scripts/intake_bug_routing_guard.py", "template/scripts/intake_bug_routing_guard.py"),
29
+ ("scripts/intake_bug_resume_brief_refresh.py", "template/scripts/intake_bug_resume_brief_refresh.py"),
30
+ ("scripts/check_intake_template_parity.py", "template/scripts/check_intake_template_parity.py"),
31
+ )
32
+
33
+ # DEC-0073 §10 / US-0090 — Caveman input-compression surface pairs. Contents
34
+ # must be byte-identical between active and template paths; installer delivers
35
+ # template copies (BUG-0003 / DEC-0066).
36
+ CAVEMAN_COMPRESS_PAIRS: tuple[tuple[str, str], ...] = (
37
+ ("scripts/caveman_compress_input.py", "template/scripts/caveman_compress_input.py"),
38
+ ("docs/engineering/context/installer-owned-paths.manifest",
39
+ "template/docs/engineering/context/installer-owned-paths.manifest"),
40
+ ("docs/engineering/runbook.md", "template/docs/engineering/runbook.md"),
41
+ ("docs/engineering/auto-orchestration-reference.md",
42
+ "template/docs/engineering/auto-orchestration-reference.md"),
43
+ )
44
+
45
+ README_FEATURE_COVERAGE_PAIRS: tuple[tuple[str, str], ...] = (
46
+ (
47
+ "scripts/validate_readme_feature_coverage.py",
48
+ "template/scripts/validate_readme_feature_coverage.py",
49
+ ),
50
+ (
51
+ "scripts/readme_feature_coverage_lib.py",
52
+ "template/scripts/readme_feature_coverage_lib.py",
53
+ ),
54
+ (
55
+ "docs/engineering/context/readme-section-affinity.json",
56
+ "template/docs/engineering/context/readme-section-affinity.json",
57
+ ),
58
+ (".cursor/commands/release.md", "template/.cursor/commands/release.md"),
59
+ ("docs/engineering/runbook.md", "template/docs/engineering/runbook.md"),
60
+ (
61
+ "docs/engineering/context/installer-owned-paths.manifest",
62
+ "template/docs/engineering/context/installer-owned-paths.manifest",
63
+ ),
64
+ (
65
+ "scripts/check_intake_template_parity.py",
66
+ "template/scripts/check_intake_template_parity.py",
67
+ ),
68
+ )
69
+
70
+ US0092_PAIRS: tuple[tuple[str, str], ...] = (
71
+ ("scripts/auto_outer_driver.py", "template/scripts/auto_outer_driver.py"),
72
+ ("scripts/uat_probe_lib.py", "template/scripts/uat_probe_lib.py"),
73
+ (
74
+ "docs/engineering/context/installer-owned-paths.manifest",
75
+ "template/docs/engineering/context/installer-owned-paths.manifest",
76
+ ),
77
+ (".cursor/commands/auto.md", "template/.cursor/commands/auto.md"),
78
+ (".cursor/commands/verify-work.md", "template/.cursor/commands/verify-work.md"),
79
+ (".cursor/commands/qa.md", "template/.cursor/commands/qa.md"),
80
+ (
81
+ "docs/engineering/auto-orchestration-reference.md",
82
+ "template/docs/engineering/auto-orchestration-reference.md",
83
+ ),
84
+ ("docs/engineering/runbook.md", "template/docs/engineering/runbook.md"),
85
+ )
86
+
87
+ US0093_PAIRS: tuple[tuple[str, str], ...] = (
88
+ ("scripts/uat_probe_lib.py", "template/scripts/uat_probe_lib.py"),
89
+ (".cursor/commands/verify-work.md", "template/.cursor/commands/verify-work.md"),
90
+ (".cursor/commands/qa.md", "template/.cursor/commands/qa.md"),
91
+ (".cursor/commands/execute.md", "template/.cursor/commands/execute.md"),
92
+ (
93
+ ".cursor/scratchpad.local.example.md",
94
+ "template/.cursor/scratchpad.local.example.md",
95
+ ),
96
+ ("docs/engineering/runbook.md", "template/docs/engineering/runbook.md"),
97
+ (
98
+ "docs/engineering/auto-orchestration-reference.md",
99
+ "template/docs/engineering/auto-orchestration-reference.md",
100
+ ),
101
+ (
102
+ "docs/engineering/context/installer-owned-paths.manifest",
103
+ "template/docs/engineering/context/installer-owned-paths.manifest",
104
+ ),
105
+ )
106
+
107
+ US0095_PAIRS: tuple[tuple[str, str], ...] = (
108
+ (".cursor/commands/auto.md", "template/.cursor/commands/auto.md"),
109
+ (
110
+ "docs/engineering/auto-orchestration-reference.md",
111
+ "template/docs/engineering/auto-orchestration-reference.md",
112
+ ),
113
+ ("docs/engineering/runbook.md", "template/docs/engineering/runbook.md"),
114
+ ("README.md", "template/README.md"),
115
+ (
116
+ "scripts/check_intake_template_parity.py",
117
+ "template/scripts/check_intake_template_parity.py",
118
+ ),
119
+ )
120
+
121
+ BUG0012_PAIRS: tuple[tuple[str, str], ...] = (
122
+ (".cursor/commands/auto.md", "template/.cursor/commands/auto.md"),
123
+ (
124
+ "docs/engineering/auto-orchestration-reference.md",
125
+ "template/docs/engineering/auto-orchestration-reference.md",
126
+ ),
127
+ ("docs/engineering/runbook.md", "template/docs/engineering/runbook.md"),
128
+ (
129
+ "scripts/check_intake_template_parity.py",
130
+ "template/scripts/check_intake_template_parity.py",
131
+ ),
132
+ )
133
+
134
+ US0096_PAIRS: tuple[tuple[str, str], ...] = (
135
+ (
136
+ ".cursor/scratchpad.local.example.md",
137
+ "template/.cursor/scratchpad.local.example.md",
138
+ ),
139
+ (".cursor/commands/auto.md", "template/.cursor/commands/auto.md"),
140
+ (
141
+ "docs/engineering/auto-orchestration-reference.md",
142
+ "template/docs/engineering/auto-orchestration-reference.md",
143
+ ),
144
+ ("docs/engineering/runbook.md", "template/docs/engineering/runbook.md"),
145
+ (".cursor/commands/quick.md", "template/.cursor/commands/quick.md"),
146
+ (
147
+ "scripts/check_intake_template_parity.py",
148
+ "template/scripts/check_intake_template_parity.py",
149
+ ),
150
+ ("scripts/pack_json_validate.py", "template/scripts/pack_json_validate.py"),
151
+ )
152
+
153
+ PROJECT_README_PAIRS: tuple[tuple[str, str], ...] = (
154
+ (
155
+ "scripts/validate_project_readme_coverage.py",
156
+ "template/scripts/validate_project_readme_coverage.py",
157
+ ),
158
+ (
159
+ "scripts/project_readme_coverage_lib.py",
160
+ "template/scripts/project_readme_coverage_lib.py",
161
+ ),
162
+ (".cursor/commands/execute.md", "template/.cursor/commands/execute.md"),
163
+ (".cursor/commands/release.md", "template/.cursor/commands/release.md"),
164
+ ("docs/engineering/runbook.md", "template/docs/engineering/runbook.md"),
165
+ (
166
+ "docs/engineering/context/installer-owned-paths.manifest",
167
+ "template/docs/engineering/context/installer-owned-paths.manifest",
168
+ ),
169
+ (
170
+ ".cursor/scratchpad.local.example.md",
171
+ "template/.cursor/scratchpad.local.example.md",
172
+ ),
173
+ (
174
+ "scripts/check_intake_template_parity.py",
175
+ "template/scripts/check_intake_template_parity.py",
176
+ ),
177
+ )
178
+
179
+ DEV_ENVIRONMENT_PAIRS: tuple[tuple[str, str], ...] = (
180
+ (".cursor/commands/execute.md", "template/.cursor/commands/execute.md"),
181
+ (".cursor/scratchpad.md", "template/.cursor/scratchpad.md"),
182
+ (
183
+ ".cursor/scratchpad.local.example.md",
184
+ "template/.cursor/scratchpad.local.example.md",
185
+ ),
186
+ (
187
+ "template/.cursor/dev-environment.json.example",
188
+ "template/.cursor/dev-environment.json.example",
189
+ ),
190
+ (
191
+ "scripts/dev_environment_lib.py",
192
+ "template/scripts/dev_environment_lib.py",
193
+ ),
194
+ ("docs/engineering/runbook.md", "template/docs/engineering/runbook.md"),
195
+ (
196
+ "docs/engineering/auto-orchestration-reference.md",
197
+ "template/docs/engineering/auto-orchestration-reference.md",
198
+ ),
199
+ (
200
+ "scripts/check_intake_template_parity.py",
201
+ "template/scripts/check_intake_template_parity.py",
202
+ ),
203
+ )
204
+
205
+ DOWNSTREAM_CI_GUARD_PAIRS: tuple[tuple[str, str], ...] = (
206
+ (
207
+ "scripts/check_downstream_ci_guard.py",
208
+ "template/scripts/check_downstream_ci_guard.py",
209
+ ),
210
+ (
211
+ "scripts/downstream_ci_guard_lib.py",
212
+ "template/scripts/downstream_ci_guard_lib.py",
213
+ ),
214
+ )
215
+
216
+ SCOPES: dict[str, tuple[tuple[str, str], ...]] = {
217
+ "intake": INTAKE_TEMPLATE_PAIRS,
218
+ "caveman-compress": CAVEMAN_COMPRESS_PAIRS,
219
+ "readme-feature-coverage": README_FEATURE_COVERAGE_PAIRS,
220
+ "downstream-ci-guard": DOWNSTREAM_CI_GUARD_PAIRS,
221
+ "us-0092": US0092_PAIRS,
222
+ "us-0093": US0093_PAIRS,
223
+ "us-0095": US0095_PAIRS,
224
+ "bug-0012": BUG0012_PAIRS,
225
+ "us-0096": US0096_PAIRS,
226
+ "project-readme": PROJECT_README_PAIRS,
227
+ "dev-environment": DEV_ENVIRONMENT_PAIRS,
228
+ "all": (
229
+ INTAKE_TEMPLATE_PAIRS
230
+ + CAVEMAN_COMPRESS_PAIRS
231
+ + README_FEATURE_COVERAGE_PAIRS
232
+ + DOWNSTREAM_CI_GUARD_PAIRS
233
+ + US0092_PAIRS
234
+ + US0093_PAIRS
235
+ + US0095_PAIRS
236
+ + BUG0012_PAIRS
237
+ + US0096_PAIRS
238
+ + PROJECT_README_PAIRS
239
+ + DEV_ENVIRONMENT_PAIRS
240
+ ),
241
+ }
242
+
243
+
244
+ def main() -> int:
245
+ p = argparse.ArgumentParser(description=__doc__)
246
+ p.add_argument(
247
+ "--repo",
248
+ type=Path,
249
+ default=Path(__file__).resolve().parent.parent,
250
+ help="Repository root",
251
+ )
252
+ p.add_argument(
253
+ "--scope",
254
+ choices=sorted(SCOPES.keys()),
255
+ default="intake",
256
+ help="Parity pair table to verify.",
257
+ )
258
+ args = p.parse_args()
259
+ root: Path = args.repo
260
+ pairs = SCOPES[args.scope]
261
+ failed = False
262
+ for rel_active, rel_tpl in pairs:
263
+ a = root / rel_active
264
+ t = root / rel_tpl
265
+ if not a.is_file() or not t.is_file():
266
+ print(f"[INTAKE_TEMPLATE_PARITY_ERROR] missing file: {rel_active} or {rel_tpl}")
267
+ failed = True
268
+ continue
269
+ ba = a.read_bytes()
270
+ bt = t.read_bytes()
271
+ if ba != bt:
272
+ print(
273
+ f"[INTAKE_TEMPLATE_PARITY_ERROR] mismatch: {rel_active} ({len(ba)}b) "
274
+ f"!= {rel_tpl} ({len(bt)}b)"
275
+ )
276
+ failed = True
277
+ if failed:
278
+ return 2
279
+ print(f"[INTAKE_TEMPLATE_PARITY_OK] scope={args.scope}")
280
+ return 0
281
+
282
+
283
+ if __name__ == "__main__":
284
+ sys.exit(main())