@harness-engineering/cli 2.7.1 → 3.0.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 (197) hide show
  1. package/dist/agents/personas/adversarial-reviewer.yaml +43 -0
  2. package/dist/agents/personas/frontend-races-reviewer.yaml +54 -0
  3. package/dist/agents/personas/typescript-strict-reviewer.yaml +53 -0
  4. package/dist/agents/skills/CHANGELOG.md +12 -0
  5. package/dist/agents/skills/claude-code/align-design-system/SKILL.md +18 -0
  6. package/dist/agents/skills/claude-code/align-design-system/skill.yaml +3 -0
  7. package/dist/agents/skills/claude-code/harness-audit-harness-strength/SKILL.md +188 -0
  8. package/dist/agents/skills/claude-code/harness-audit-harness-strength/skill.yaml +54 -0
  9. package/dist/agents/skills/claude-code/harness-autopilot/SKILL.md +2 -0
  10. package/dist/agents/skills/claude-code/harness-brainstorming/SKILL.md +58 -12
  11. package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +107 -22
  12. package/dist/agents/skills/claude-code/harness-code-review/references/confidence-rubric.md +45 -0
  13. package/dist/agents/skills/claude-code/harness-code-review/references/risk-keywords.md +40 -0
  14. package/dist/agents/skills/claude-code/harness-code-review/skill.yaml +3 -0
  15. package/dist/agents/skills/claude-code/harness-compound/SKILL.md +7 -4
  16. package/dist/agents/skills/claude-code/harness-execution/SKILL.md +1 -1
  17. package/dist/agents/skills/claude-code/harness-git-workflow/SKILL.md +2 -0
  18. package/dist/agents/skills/claude-code/harness-ideate/SKILL.md +279 -0
  19. package/dist/agents/skills/claude-code/harness-ideate/references/scoring.md +88 -0
  20. package/dist/agents/skills/claude-code/harness-ideate/skill.yaml +66 -0
  21. package/dist/agents/skills/claude-code/harness-knowledge-pipeline/SKILL.md +2 -0
  22. package/dist/agents/skills/claude-code/harness-planning/SKILL.md +14 -4
  23. package/dist/agents/skills/claude-code/harness-pulse/SKILL.md +12 -16
  24. package/dist/agents/skills/claude-code/harness-roadmap/SKILL.md +62 -4
  25. package/dist/agents/skills/claude-code/harness-roadmap-pilot/SKILL.md +36 -6
  26. package/dist/agents/skills/claude-code/harness-strategy/SKILL.md +152 -0
  27. package/dist/agents/skills/claude-code/harness-strategy/references/interview.md +122 -0
  28. package/dist/agents/skills/claude-code/harness-strategy/skill.yaml +54 -0
  29. package/dist/agents/skills/claude-code/harness-test-advisor/SKILL.md +80 -2
  30. package/dist/agents/skills/claude-code/harness-test-advisor/skill.yaml +4 -1
  31. package/dist/agents/skills/claude-code/initialize-harness-project/SKILL.md +86 -18
  32. package/dist/agents/skills/claude-code/initialize-harness-project/skill.yaml +1 -0
  33. package/dist/agents/skills/claude-code/outcome-eval/SKILL.md +97 -0
  34. package/dist/agents/skills/claude-code/outcome-eval/skill.yaml +51 -0
  35. package/dist/agents/skills/codex/align-design-system/SKILL.md +18 -0
  36. package/dist/agents/skills/codex/align-design-system/skill.yaml +3 -0
  37. package/dist/agents/skills/codex/harness-audit-harness-strength/SKILL.md +188 -0
  38. package/dist/agents/skills/codex/harness-audit-harness-strength/skill.yaml +54 -0
  39. package/dist/agents/skills/codex/harness-autopilot/SKILL.md +2 -0
  40. package/dist/agents/skills/codex/harness-brainstorming/SKILL.md +58 -12
  41. package/dist/agents/skills/codex/harness-code-review/SKILL.md +107 -22
  42. package/dist/agents/skills/codex/harness-code-review/references/confidence-rubric.md +45 -0
  43. package/dist/agents/skills/codex/harness-code-review/references/risk-keywords.md +40 -0
  44. package/dist/agents/skills/codex/harness-code-review/skill.yaml +3 -0
  45. package/dist/agents/skills/codex/harness-compound/SKILL.md +7 -4
  46. package/dist/agents/skills/codex/harness-execution/SKILL.md +1 -1
  47. package/dist/agents/skills/codex/harness-git-workflow/SKILL.md +2 -0
  48. package/dist/agents/skills/codex/harness-ideate/SKILL.md +279 -0
  49. package/dist/agents/skills/codex/harness-ideate/references/scoring.md +88 -0
  50. package/dist/agents/skills/codex/harness-ideate/skill.yaml +66 -0
  51. package/dist/agents/skills/codex/harness-knowledge-pipeline/SKILL.md +2 -0
  52. package/dist/agents/skills/codex/harness-planning/SKILL.md +14 -4
  53. package/dist/agents/skills/codex/harness-pulse/SKILL.md +12 -16
  54. package/dist/agents/skills/codex/harness-roadmap/SKILL.md +62 -4
  55. package/dist/agents/skills/codex/harness-roadmap-pilot/SKILL.md +36 -6
  56. package/dist/agents/skills/codex/harness-strategy/SKILL.md +152 -0
  57. package/dist/agents/skills/codex/harness-strategy/references/interview.md +122 -0
  58. package/dist/agents/skills/codex/harness-strategy/skill.yaml +54 -0
  59. package/dist/agents/skills/codex/harness-test-advisor/SKILL.md +80 -2
  60. package/dist/agents/skills/codex/harness-test-advisor/skill.yaml +4 -1
  61. package/dist/agents/skills/codex/initialize-harness-project/SKILL.md +86 -18
  62. package/dist/agents/skills/codex/initialize-harness-project/skill.yaml +1 -0
  63. package/dist/agents/skills/codex/outcome-eval/SKILL.md +97 -0
  64. package/dist/agents/skills/codex/outcome-eval/skill.yaml +51 -0
  65. package/dist/agents/skills/cursor/align-design-system/SKILL.md +18 -0
  66. package/dist/agents/skills/cursor/align-design-system/skill.yaml +3 -0
  67. package/dist/agents/skills/cursor/harness-audit-harness-strength/SKILL.md +188 -0
  68. package/dist/agents/skills/cursor/harness-audit-harness-strength/skill.yaml +54 -0
  69. package/dist/agents/skills/cursor/harness-autopilot/SKILL.md +2 -0
  70. package/dist/agents/skills/cursor/harness-brainstorming/SKILL.md +58 -12
  71. package/dist/agents/skills/cursor/harness-code-review/SKILL.md +107 -22
  72. package/dist/agents/skills/cursor/harness-code-review/references/confidence-rubric.md +45 -0
  73. package/dist/agents/skills/cursor/harness-code-review/references/risk-keywords.md +40 -0
  74. package/dist/agents/skills/cursor/harness-code-review/skill.yaml +3 -0
  75. package/dist/agents/skills/cursor/harness-compound/SKILL.md +7 -4
  76. package/dist/agents/skills/cursor/harness-execution/SKILL.md +1 -1
  77. package/dist/agents/skills/cursor/harness-git-workflow/SKILL.md +2 -0
  78. package/dist/agents/skills/cursor/harness-ideate/SKILL.md +279 -0
  79. package/dist/agents/skills/cursor/harness-ideate/references/scoring.md +88 -0
  80. package/dist/agents/skills/cursor/harness-ideate/skill.yaml +66 -0
  81. package/dist/agents/skills/cursor/harness-knowledge-pipeline/SKILL.md +2 -0
  82. package/dist/agents/skills/cursor/harness-planning/SKILL.md +14 -4
  83. package/dist/agents/skills/cursor/harness-pulse/SKILL.md +12 -16
  84. package/dist/agents/skills/cursor/harness-roadmap/SKILL.md +62 -4
  85. package/dist/agents/skills/cursor/harness-roadmap-pilot/SKILL.md +36 -6
  86. package/dist/agents/skills/cursor/harness-strategy/SKILL.md +152 -0
  87. package/dist/agents/skills/cursor/harness-strategy/references/interview.md +122 -0
  88. package/dist/agents/skills/cursor/harness-strategy/skill.yaml +54 -0
  89. package/dist/agents/skills/cursor/harness-test-advisor/SKILL.md +80 -2
  90. package/dist/agents/skills/cursor/harness-test-advisor/skill.yaml +4 -1
  91. package/dist/agents/skills/cursor/initialize-harness-project/SKILL.md +86 -18
  92. package/dist/agents/skills/cursor/initialize-harness-project/skill.yaml +1 -0
  93. package/dist/agents/skills/cursor/outcome-eval/SKILL.md +97 -0
  94. package/dist/agents/skills/cursor/outcome-eval/skill.yaml +51 -0
  95. package/dist/agents/skills/gemini-cli/align-design-system/SKILL.md +18 -0
  96. package/dist/agents/skills/gemini-cli/align-design-system/skill.yaml +3 -0
  97. package/dist/agents/skills/gemini-cli/harness-audit-harness-strength/SKILL.md +188 -0
  98. package/dist/agents/skills/gemini-cli/harness-audit-harness-strength/skill.yaml +54 -0
  99. package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +2 -0
  100. package/dist/agents/skills/gemini-cli/harness-brainstorming/SKILL.md +58 -12
  101. package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +107 -22
  102. package/dist/agents/skills/gemini-cli/harness-code-review/references/confidence-rubric.md +45 -0
  103. package/dist/agents/skills/gemini-cli/harness-code-review/references/risk-keywords.md +40 -0
  104. package/dist/agents/skills/gemini-cli/harness-code-review/skill.yaml +3 -0
  105. package/dist/agents/skills/gemini-cli/harness-compound/SKILL.md +7 -4
  106. package/dist/agents/skills/gemini-cli/harness-execution/SKILL.md +1 -1
  107. package/dist/agents/skills/gemini-cli/harness-git-workflow/SKILL.md +2 -0
  108. package/dist/agents/skills/gemini-cli/harness-ideate/SKILL.md +279 -0
  109. package/dist/agents/skills/gemini-cli/harness-ideate/references/scoring.md +88 -0
  110. package/dist/agents/skills/gemini-cli/harness-ideate/skill.yaml +66 -0
  111. package/dist/agents/skills/gemini-cli/harness-knowledge-pipeline/SKILL.md +2 -0
  112. package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +14 -4
  113. package/dist/agents/skills/gemini-cli/harness-pulse/SKILL.md +12 -16
  114. package/dist/agents/skills/gemini-cli/harness-roadmap/SKILL.md +62 -4
  115. package/dist/agents/skills/gemini-cli/harness-roadmap-pilot/SKILL.md +36 -6
  116. package/dist/agents/skills/gemini-cli/harness-strategy/SKILL.md +152 -0
  117. package/dist/agents/skills/gemini-cli/harness-strategy/references/interview.md +122 -0
  118. package/dist/agents/skills/gemini-cli/harness-strategy/skill.yaml +54 -0
  119. package/dist/agents/skills/gemini-cli/harness-test-advisor/SKILL.md +80 -2
  120. package/dist/agents/skills/gemini-cli/harness-test-advisor/skill.yaml +4 -1
  121. package/dist/agents/skills/gemini-cli/initialize-harness-project/SKILL.md +86 -18
  122. package/dist/agents/skills/gemini-cli/initialize-harness-project/skill.yaml +1 -0
  123. package/dist/agents/skills/gemini-cli/outcome-eval/SKILL.md +97 -0
  124. package/dist/agents/skills/gemini-cli/outcome-eval/skill.yaml +51 -0
  125. package/dist/agents/skills/package.json +1 -1
  126. package/dist/agents/skills/tests/harness-strategy.test.ts +145 -0
  127. package/dist/agents/skills/tests/harness-test-advisor.test.ts +94 -0
  128. package/dist/agents-md-XOJE5ETA.js +13 -0
  129. package/dist/analyzer-V633GUHY-MBCQWKDU.js +26 -0
  130. package/dist/{architecture-LUR2I67H.js → architecture-JEZPJ725.js} +6 -6
  131. package/dist/{assess-project-OJWECOP2.js → assess-project-RHXOQNMM.js} +1 -1
  132. package/dist/bin/harness-mcp.js +17 -17
  133. package/dist/bin/harness.js +27 -27
  134. package/dist/{check-phase-gate-HS5KYLRO.js → check-phase-gate-GNDOMS35.js} +6 -6
  135. package/dist/{chunk-6UHDQP2N.js → chunk-2N4OENGE.js} +1 -1
  136. package/dist/{chunk-O2ASYKA6.js → chunk-3ISHDWO7.js} +2 -2
  137. package/dist/{chunk-GGSNWH7P.js → chunk-527G27VI.js} +5 -5
  138. package/dist/{chunk-N5NSSLMU.js → chunk-6WQCLCBO.js} +2 -2
  139. package/dist/{chunk-OH3NXXUY.js → chunk-BDGTZRZ6.js} +11 -1
  140. package/dist/{chunk-Z3TMCCZB.js → chunk-BYVT5LVO.js} +9 -9
  141. package/dist/{chunk-TIH53QXY.js → chunk-CLI4K2CH.js} +1 -1
  142. package/dist/{chunk-VSIRUZQP.js → chunk-DE5U6KOL.js} +2 -2
  143. package/dist/{chunk-FXZI6NJ2.js → chunk-GGKRA7A7.js} +51 -4
  144. package/dist/{chunk-RJ2WEES5.js → chunk-GSP2XIVS.js} +2 -2
  145. package/dist/{chunk-CZPOPMMI.js → chunk-HEIMJJI4.js} +3 -3
  146. package/dist/{chunk-7AF6C5GE.js → chunk-HWTUUQOW.js} +3 -3
  147. package/dist/{chunk-FC4JPM6W.js → chunk-KAJOS3BA.js} +3 -3
  148. package/dist/{chunk-NIVWM7OW.js → chunk-MGUPSE6D.js} +10 -10
  149. package/dist/{chunk-WZY5U6NS.js → chunk-N24HCQA4.js} +3351 -887
  150. package/dist/{chunk-Y4T6ENKQ.js → chunk-N55WOGN3.js} +86 -17
  151. package/dist/{chunk-INBTDBV2.js → chunk-NWLGL3IR.js} +1 -1
  152. package/dist/{chunk-FEKBXX2J.js → chunk-ONCPJGHY.js} +9 -9
  153. package/dist/{chunk-PTHX545Q.js → chunk-PC2R5RUJ.js} +2 -2
  154. package/dist/{chunk-H2ZJOJ7A.js → chunk-PP6ZRL5T.js} +316 -42
  155. package/dist/{chunk-LECXPXS3.js → chunk-QBC7DI4Q.js} +2 -2
  156. package/dist/{chunk-B2VAYLYI.js → chunk-UX3PQKVZ.js} +8 -3
  157. package/dist/{chunk-7PLIWP7U.js → chunk-WWEVS7RO.js} +4409 -743
  158. package/dist/{chunk-LGYXR2KZ.js → chunk-XFU6SB2Q.js} +1122 -689
  159. package/dist/{chunk-KN3EMDZ5.js → chunk-XX4OLNWQ.js} +23 -3
  160. package/dist/{chunk-VI4IS55S.js → chunk-YQSYCBAH.js} +6 -6
  161. package/dist/{chunk-LYIPI2SJ.js → chunk-Z4AWEIBY.js} +6 -6
  162. package/dist/{ci-workflow-MDSTHJOY.js → ci-workflow-ORZ4F45F.js} +5 -5
  163. package/dist/{dist-E3SAAHCM.js → dist-ICW4QUEW.js} +5 -1
  164. package/dist/{dist-72ID44UE.js → dist-LHINSVK4.js} +136 -4
  165. package/dist/{dist-R3TOOPJ7.js → dist-OWHMNL4W.js} +1 -1
  166. package/dist/{docs-2RFOJ6XY.js → docs-AU3DXFFO.js} +6 -6
  167. package/dist/engine-6GPWOYQH.js +13 -0
  168. package/dist/{entropy-3UX6644G.js → entropy-VLKDRMRT.js} +5 -5
  169. package/dist/{feedback-CVCFYND4.js → feedback-YXYY44ZC.js} +1 -1
  170. package/dist/{generate-agent-definitions-HZ3XENWO.js → generate-agent-definitions-XIHQPKG3.js} +6 -6
  171. package/dist/{glob-helper-EX4YZKZO.js → glob-helper-GLZAURJC.js} +1 -1
  172. package/dist/{graph-loader-EIFEOUVI.js → graph-loader-HHXN5FLP.js} +1 -1
  173. package/dist/hooks/cost-tracker.js +29 -6
  174. package/dist/index.d.ts +202 -0
  175. package/dist/index.js +27 -27
  176. package/dist/{loader-6RHWU5FH.js → loader-YAN56MT3.js} +5 -5
  177. package/dist/{mcp-OYR26JDI.js → mcp-RK3SFVYB.js} +17 -17
  178. package/dist/{performance-JJMIRXCH.js → performance-64DPTLLQ.js} +6 -6
  179. package/dist/{review-pipeline-BHQZIXWZ.js → review-pipeline-NENG6LW7.js} +5 -5
  180. package/dist/{runtime-DALTAVTN.js → runtime-FFIIRT2T.js} +5 -5
  181. package/dist/{scan-LYKLM4EQ.js → scan-P7YFKB77.js} +1 -1
  182. package/dist/{security-RMLMYFPB.js → security-3PIBN35B.js} +1 -1
  183. package/dist/templates/basic/harness.config.json.hbs +34 -0
  184. package/dist/templates/ci/README.md +86 -0
  185. package/dist/templates/ci/required-review.ruleset.json +20 -0
  186. package/dist/templates/ci/required-review.yml.hbs +57 -0
  187. package/dist/templates/ci/template.json +5 -0
  188. package/dist/templates/intermediate/harness.config.json.hbs +36 -0
  189. package/dist/templates/orchestrator/harness.orchestrator.md +9 -0
  190. package/dist/{tool-tiers-B7JC2XC3.js → tool-tiers-OKK5FE57.js} +2 -0
  191. package/dist/{validate-R7DZRDFK.js → validate-7IAF2ES3.js} +6 -6
  192. package/dist/validate-cross-check-QPSAOZKD.js +13 -0
  193. package/package.json +8 -8
  194. package/dist/agents-md-FKMKH6ZF.js +0 -13
  195. package/dist/analyzer-H3AHBFSL-KPOPJYRB.js +0 -26
  196. package/dist/engine-BSFKOGPN.js +0 -13
  197. package/dist/validate-cross-check-AUUZFNVL.js +0 -13
@@ -0,0 +1,51 @@
1
+ name: outcome-eval
2
+ version: '0.1.0'
3
+ description: >-
4
+ LLM-judgment skill that produces a structured, confidence-rated verdict on
5
+ whether an implementation satisfied its spec. Reads the spec's acceptance
6
+ section, the change diff, and test output; emits an OutcomeVerdict
7
+ (SATISFIED | NOT_SATISFIED | INCONCLUSIVE) with confidence, rationale, and
8
+ unmet criteria. Authority is derived in TypeScript, never from the LLM: a
9
+ high-confidence NOT_SATISFIED blocks ship; every other verdict is advisory.
10
+ The verdict persists as an execution_outcome node and feeds skill-effectiveness
11
+ baselines. The harness's first blocking post-execution spec-satisfaction gate.
12
+ stability: draft
13
+ cognitive_mode: constructive-architect
14
+ triggers:
15
+ - manual
16
+ - on_pr
17
+ platforms:
18
+ - claude-code
19
+ tools:
20
+ - Bash
21
+ - Read
22
+ - Glob
23
+ - Grep
24
+ mcp:
25
+ tool: outcome_eval
26
+ # specPath, diff, and testOutput are ALL required. diff/testOutput are the
27
+ # evidence the judge reasons over: omitting them degrades the verdict to
28
+ # INCONCLUSIVE/advisory (never blocking), so the agent MUST supply them.
29
+ input:
30
+ specPath: 'string (required) — absolute or repo-relative path to the spec markdown to judge against'
31
+ diff: 'string (required) — unified diff of the change under judgment (git diff); omission degrades the verdict to INCONCLUSIVE/advisory'
32
+ testOutput: 'string (required) — captured test-runner stdout+stderr; omission degrades the verdict to INCONCLUSIVE/advisory'
33
+ model: 'string (optional) — model override for the outcome-eval LLM call'
34
+ path: 'string (optional) — project root used to resolve the knowledge graph (default cwd)'
35
+ type: rigid
36
+ tier: 2
37
+ phases:
38
+ - name: gather
39
+ description: Collect the unified diff (git diff), capture test output, resolve the spec path
40
+ required: true
41
+ - name: resolve
42
+ description: Resolve the judgment section (Success Criteria -> User-Visible Behavior -> Overview)
43
+ required: true
44
+ - name: judge
45
+ description: Invoke OutcomeEvaluator.evaluate(); LLM returns verdict/confidence/rationale/unmetCriteria; authority derived in TS
46
+ required: true
47
+ - name: gate
48
+ description: Render the verdict; on a blocking verdict (NOT_SATISFIED + high confidence) halt before Ship
49
+ required: true
50
+ state:
51
+ persistent: false
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@harness-engineering/skills",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "private": true,
5
5
  "description": "Agent skills for harness engineering",
6
6
  "type": "module",
@@ -0,0 +1,145 @@
1
+ // agents/skills/tests/harness-strategy.test.ts
2
+ //
3
+ // Contract tests for the harness-strategy skill. The skill prose itself is
4
+ // executed by an agent (not by node), so behavioral correctness is
5
+ // human-judged in practice. Phase 2 of the strategic-anchor spec owns:
6
+ // - the three pushback rules are *named and cited* in references/interview.md
7
+ // - the 2-round cap is documented
8
+ // - the anti-pattern fixtures exist for each rule
9
+ // - the writer integration is documented in SKILL.md
10
+ //
11
+ // Generic structure, schema, and platform-parity coverage lives in sibling files
12
+ // (structure.test.ts, schema.test.ts, references.test.ts, platform-parity.test.ts).
13
+
14
+ import { describe, it, expect } from 'vitest';
15
+ import { readFileSync, existsSync } from 'fs';
16
+ import { resolve, dirname } from 'path';
17
+ import { fileURLToPath } from 'url';
18
+ import { ALLOWED_PLATFORMS } from './schema';
19
+
20
+ const __dirname = dirname(fileURLToPath(import.meta.url));
21
+ const SKILLS_DIR = resolve(__dirname, '..');
22
+
23
+ const SKILL_NAME = 'harness-strategy';
24
+
25
+ function skillFile(platform: string, file: string): string {
26
+ return resolve(SKILLS_DIR, platform, SKILL_NAME, file);
27
+ }
28
+
29
+ describe('harness-strategy skill — Phase 2 contract', () => {
30
+ describe('skill files exist in every supported platform', () => {
31
+ for (const platform of ALLOWED_PLATFORMS) {
32
+ it(`${platform}/${SKILL_NAME}/SKILL.md exists`, () => {
33
+ expect(existsSync(skillFile(platform, 'SKILL.md'))).toBe(true);
34
+ });
35
+ it(`${platform}/${SKILL_NAME}/skill.yaml exists`, () => {
36
+ expect(existsSync(skillFile(platform, 'skill.yaml'))).toBe(true);
37
+ });
38
+ it(`${platform}/${SKILL_NAME}/references/interview.md exists`, () => {
39
+ expect(existsSync(skillFile(platform, 'references/interview.md'))).toBe(true);
40
+ });
41
+ }
42
+ });
43
+
44
+ describe('references/interview.md documents the three pushback rules', () => {
45
+ const interview = readFileSync(skillFile('claude-code', 'references/interview.md'), 'utf-8');
46
+
47
+ it('names "Fluff detection"', () => {
48
+ expect(interview).toMatch(/Fluff detection/);
49
+ });
50
+
51
+ it('names "Goal-as-strategy"', () => {
52
+ expect(interview).toMatch(/Goal-as-strategy/);
53
+ });
54
+
55
+ it('names "Feature-list-as-strategy"', () => {
56
+ expect(interview).toMatch(/Feature-list-as-strategy/);
57
+ });
58
+
59
+ it('includes a repair script keyword for each rule', () => {
60
+ // Each rule's repair script anchors on a specific keyword the agent
61
+ // quotes when pushing back. Test these by name to keep prose tweaks
62
+ // free while catching accidental rule deletion.
63
+ expect(interview).toMatch(/concrete diagnosis/i);
64
+ expect(interview).toMatch(/\bbet\b/);
65
+ expect(interview).toMatch(/coherent action/i);
66
+ });
67
+
68
+ it('documents the 2-round cap explicitly', () => {
69
+ expect(interview).toMatch(/2[ -]?[Rr]ound|two[ -]?round|AT MOST TWICE|at most twice/);
70
+ expect(interview).toMatch(/cap/i);
71
+ });
72
+
73
+ it('documents separation from docs/roadmap.md', () => {
74
+ expect(interview).toMatch(/docs\/roadmap\.md/);
75
+ expect(interview).toMatch(/[Dd]ecision 1/);
76
+ });
77
+
78
+ it('includes anti-pattern fixtures for each rule', () => {
79
+ expect(interview).toMatch(/Fluff detection fixture/);
80
+ expect(interview).toMatch(/Goal-as-strategy fixture/);
81
+ expect(interview).toMatch(/Feature-list-as-strategy fixture/);
82
+ });
83
+ });
84
+
85
+ describe('SKILL.md documents the writer integration', () => {
86
+ const skillMd = readFileSync(skillFile('claude-code', 'SKILL.md'), 'utf-8');
87
+
88
+ it('references writeStrategyDoc as the sanctioned write path', () => {
89
+ expect(skillMd).toMatch(/writeStrategyDoc/);
90
+ });
91
+
92
+ it('references @harness-engineering/core as the import source', () => {
93
+ expect(skillMd).toMatch(/@harness-engineering\/core/);
94
+ });
95
+
96
+ it('documents the stdin-piped Node one-liner pattern', () => {
97
+ // The pattern protects against shell injection from user-supplied
98
+ // section bodies. SKILL.md must show the stdin route, not a shell-arg
99
+ // route, so the agent doesn't paste user input into the command line.
100
+ expect(skillMd).toMatch(/readFileSync\(0/);
101
+ expect(skillMd).toMatch(/JSON\.parse/);
102
+ });
103
+
104
+ it('documents Phase 0 routing for present-but-invalid files', () => {
105
+ expect(skillMd).toMatch(/present-but-invalid|present and invalid/i);
106
+ expect(skillMd).toMatch(/STRATEGY\.md\.bak\.[<{]/);
107
+ });
108
+
109
+ it('documents the four downstream consumers in the handoff phase', () => {
110
+ expect(skillMd).toMatch(/harness-brainstorming/);
111
+ expect(skillMd).toMatch(/harness-ideate/);
112
+ expect(skillMd).toMatch(/harness-roadmap-pilot/);
113
+ expect(skillMd).toMatch(/BusinessKnowledgeIngestor/);
114
+ });
115
+ });
116
+
117
+ describe('skill.yaml metadata', () => {
118
+ const yamlPath = skillFile('claude-code', 'skill.yaml');
119
+ const yaml = readFileSync(yamlPath, 'utf-8');
120
+
121
+ it('declares type: rigid (configuration-interviewer)', () => {
122
+ expect(yaml).toMatch(/type:\s*rigid/);
123
+ expect(yaml).toMatch(/cognitive_mode:\s*configuration-interviewer/);
124
+ });
125
+
126
+ it('declares the four required platforms', () => {
127
+ expect(yaml).toMatch(/claude-code/);
128
+ expect(yaml).toMatch(/gemini-cli/);
129
+ expect(yaml).toMatch(/cursor/);
130
+ expect(yaml).toMatch(/codex/);
131
+ });
132
+
133
+ it('declares manual-only trigger (strategy is never auto-fired)', () => {
134
+ expect(yaml).toMatch(/triggers:\s*\n\s*-\s*manual\s*\n/);
135
+ // No other triggers allowed — strategy is human-owned.
136
+ expect(yaml).not.toMatch(/-\s*on_/);
137
+ });
138
+
139
+ it('declares persistent state with STRATEGY.md and .bak files', () => {
140
+ expect(yaml).toMatch(/persistent:\s*true/);
141
+ expect(yaml).toMatch(/STRATEGY\.md\s*$/m);
142
+ expect(yaml).toMatch(/STRATEGY\.md\.bak/);
143
+ });
144
+ });
145
+ });
@@ -0,0 +1,94 @@
1
+ // agents/skills/tests/harness-test-advisor.test.ts
2
+ //
3
+ // Contract tests for the harness-test-advisor skill. Locks in the Coverage
4
+ // Audit mode contract from GH issue 488: skill exposes an audit entry point,
5
+ // SKILL.md documents the three audit phases (INVENTORY, QUALITY REVIEW,
6
+ // GAP REPORT), and the canary plugin agents are named as the remediation
7
+ // path. Generic schema/structure/parity checks live in the sibling
8
+ // *.test.ts files.
9
+
10
+ import { describe, it, expect } from 'vitest';
11
+ import { readFileSync } from 'fs';
12
+ import { resolve, dirname } from 'path';
13
+ import { fileURLToPath } from 'url';
14
+ import { parse } from 'yaml';
15
+
16
+ const __dirname = dirname(fileURLToPath(import.meta.url));
17
+ const SKILLS_DIR = resolve(__dirname, '..');
18
+
19
+ const SKILL_NAME = 'harness-test-advisor';
20
+ const PLATFORMS = ['claude-code', 'gemini-cli', 'cursor', 'codex'] as const;
21
+
22
+ function readSkillYaml(platform: string): Record<string, unknown> {
23
+ const path = resolve(SKILLS_DIR, platform, SKILL_NAME, 'skill.yaml');
24
+ return parse(readFileSync(path, 'utf-8'));
25
+ }
26
+
27
+ function readSkillMd(platform: string): string {
28
+ return readFileSync(resolve(SKILLS_DIR, platform, SKILL_NAME, 'SKILL.md'), 'utf-8');
29
+ }
30
+
31
+ describe('harness-test-advisor Coverage Audit metadata', () => {
32
+ it.each(PLATFORMS)('%s skill.yaml exposes an audit CLI arg', (platform) => {
33
+ const meta = readSkillYaml(platform) as {
34
+ cli: { args: Array<{ name: string }> };
35
+ };
36
+ const argNames = meta.cli.args.map((a) => a.name);
37
+ expect(argNames).toContain('audit');
38
+ });
39
+
40
+ it.each(PLATFORMS)(
41
+ '%s skill.yaml description advertises coverage audit alongside selection',
42
+ (platform) => {
43
+ const meta = readSkillYaml(platform) as { description: string };
44
+ expect(meta.description).toMatch(/coverage/i);
45
+ }
46
+ );
47
+ });
48
+
49
+ describe('harness-test-advisor SKILL.md surfaces Coverage Audit mode', () => {
50
+ it.each(PLATFORMS)('%s SKILL.md advertises Coverage Audit in When to Use', (platform) => {
51
+ const body = readSkillMd(platform);
52
+ const whenToUse = body.split('## Prerequisites')[0] ?? '';
53
+ expect(whenToUse).toMatch(/Coverage Audit/);
54
+ });
55
+
56
+ const AUDIT_PHASES = ['INVENTORY', 'QUALITY REVIEW', 'GAP REPORT'];
57
+
58
+ it.each(PLATFORMS)('%s SKILL.md declares the three Coverage Audit phases', (platform) => {
59
+ const body = readSkillMd(platform);
60
+ for (const phase of AUDIT_PHASES) {
61
+ expect(body, `missing Coverage Audit phase "${phase}" in ${platform}`).toContain(phase);
62
+ }
63
+ });
64
+
65
+ const CANARY_SKILLS = [
66
+ 'canary:canary-review-test',
67
+ 'canary:canary-write-test',
68
+ 'canary:canary-pick-framework',
69
+ ];
70
+
71
+ it.each(PLATFORMS)('%s SKILL.md routes audit follow-ups to canary plugin skills', (platform) => {
72
+ const body = readSkillMd(platform);
73
+ for (const skill of CANARY_SKILLS) {
74
+ expect(body, `missing canary skill reference "${skill}" in ${platform}`).toContain(skill);
75
+ }
76
+ });
77
+ });
78
+
79
+ describe('harness-test-advisor wires the canary MCP tools (deterministic path)', () => {
80
+ // The audit probes the canary CLI for graceful degradation and uses the
81
+ // deterministic framework recommender — separate from the generative plugin path.
82
+ const CANARY_MCP_TOOLS = ['canary_probe', 'canary_recommend_framework'];
83
+
84
+ it.each(PLATFORMS)('%s SKILL.md declares an audit PROBE phase', (platform) => {
85
+ expect(readSkillMd(platform)).toMatch(/Audit Phase 0: PROBE/);
86
+ });
87
+
88
+ it.each(PLATFORMS)('%s SKILL.md references both canary MCP tools', (platform) => {
89
+ const body = readSkillMd(platform);
90
+ for (const tool of CANARY_MCP_TOOLS) {
91
+ expect(body, `missing canary MCP tool "${tool}" in ${platform}`).toContain(tool);
92
+ }
93
+ });
94
+ });
@@ -0,0 +1,13 @@
1
+ import {
2
+ generateAgentsMd
3
+ } from "./chunk-QBC7DI4Q.js";
4
+ import "./chunk-N24HCQA4.js";
5
+ import "./chunk-N55WOGN3.js";
6
+ import "./chunk-BDGTZRZ6.js";
7
+ import "./chunk-PP6ZRL5T.js";
8
+ import "./chunk-QCLOIUMX.js";
9
+ import "./chunk-XARGEOJV.js";
10
+ import "./chunk-KFQGP6VL.js";
11
+ export {
12
+ generateAgentsMd
13
+ };
@@ -0,0 +1,26 @@
1
+ import {
2
+ EntropyAnalyzer,
3
+ init_chunk_MUWJHO2S,
4
+ init_chunk_S4DTDJ6J
5
+ } from "./chunk-N55WOGN3.js";
6
+ import "./chunk-BDGTZRZ6.js";
7
+ import "./chunk-PP6ZRL5T.js";
8
+ import {
9
+ init_chunk_7P6ASYW6
10
+ } from "./chunk-XARGEOJV.js";
11
+ import {
12
+ __esm
13
+ } from "./chunk-KFQGP6VL.js";
14
+
15
+ // ../core/dist/analyzer-V633GUHY.mjs
16
+ var init_analyzer_V633GUHY = __esm({
17
+ "../core/dist/analyzer-V633GUHY.mjs"() {
18
+ init_chunk_S4DTDJ6J();
19
+ init_chunk_MUWJHO2S();
20
+ init_chunk_7P6ASYW6();
21
+ }
22
+ });
23
+ init_analyzer_V633GUHY();
24
+ export {
25
+ EntropyAnalyzer
26
+ };
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  checkDependenciesDefinition,
3
3
  handleCheckDependencies
4
- } from "./chunk-GGSNWH7P.js";
5
- import "./chunk-VSIRUZQP.js";
4
+ } from "./chunk-527G27VI.js";
5
+ import "./chunk-DE5U6KOL.js";
6
6
  import "./chunk-RC3OI5NK.js";
7
7
  import "./chunk-W6Y7ZW3Y.js";
8
- import "./chunk-WZY5U6NS.js";
9
- import "./chunk-Y4T6ENKQ.js";
10
- import "./chunk-OH3NXXUY.js";
11
- import "./chunk-H2ZJOJ7A.js";
8
+ import "./chunk-N24HCQA4.js";
9
+ import "./chunk-N55WOGN3.js";
10
+ import "./chunk-BDGTZRZ6.js";
11
+ import "./chunk-PP6ZRL5T.js";
12
12
  import "./chunk-QCLOIUMX.js";
13
13
  import "./chunk-XARGEOJV.js";
14
14
  import "./chunk-KFQGP6VL.js";
@@ -2,7 +2,7 @@ import {
2
2
  assessProjectDefinition,
3
3
  handleAssessProject,
4
4
  parseToolResponse
5
- } from "./chunk-VI4IS55S.js";
5
+ } from "./chunk-YQSYCBAH.js";
6
6
  import "./chunk-RC3OI5NK.js";
7
7
  import "./chunk-W6Y7ZW3Y.js";
8
8
  import "./chunk-KFQGP6VL.js";
@@ -1,33 +1,33 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  startServer
4
- } from "../chunk-7PLIWP7U.js";
5
- import "../chunk-CZPOPMMI.js";
6
- import "../chunk-KN3EMDZ5.js";
7
- import "../chunk-VI4IS55S.js";
8
- import "../chunk-LYIPI2SJ.js";
9
- import "../chunk-FEKBXX2J.js";
4
+ } from "../chunk-WWEVS7RO.js";
5
+ import "../chunk-HEIMJJI4.js";
6
+ import "../chunk-XX4OLNWQ.js";
7
+ import "../chunk-YQSYCBAH.js";
8
+ import "../chunk-Z4AWEIBY.js";
9
+ import "../chunk-ONCPJGHY.js";
10
10
  import "../chunk-IOW3MW2K.js";
11
- import "../chunk-Z3TMCCZB.js";
11
+ import "../chunk-BYVT5LVO.js";
12
12
  import "../chunk-3ISINLYT.js";
13
- import "../chunk-TIH53QXY.js";
14
- import "../chunk-7AF6C5GE.js";
15
- import "../chunk-GGSNWH7P.js";
16
- import "../chunk-VSIRUZQP.js";
17
- import "../chunk-NIVWM7OW.js";
13
+ import "../chunk-CLI4K2CH.js";
14
+ import "../chunk-HWTUUQOW.js";
15
+ import "../chunk-527G27VI.js";
16
+ import "../chunk-DE5U6KOL.js";
17
+ import "../chunk-MGUPSE6D.js";
18
18
  import "../chunk-RC3OI5NK.js";
19
19
  import "../chunk-W6Y7ZW3Y.js";
20
20
  import "../chunk-27AJKSQY.js";
21
21
  import "../chunk-6B6UN6SG.js";
22
22
  import "../chunk-HIK6OEUF.js";
23
- import "../chunk-FXZI6NJ2.js";
23
+ import "../chunk-GGKRA7A7.js";
24
24
  import "../chunk-ZCZD7FHU.js";
25
25
  import "../chunk-EBJQ6N4M.js";
26
26
  import "../chunk-3WGJMBKH.js";
27
- import "../chunk-WZY5U6NS.js";
28
- import "../chunk-Y4T6ENKQ.js";
29
- import "../chunk-OH3NXXUY.js";
30
- import "../chunk-H2ZJOJ7A.js";
27
+ import "../chunk-N24HCQA4.js";
28
+ import "../chunk-N55WOGN3.js";
29
+ import "../chunk-BDGTZRZ6.js";
30
+ import "../chunk-PP6ZRL5T.js";
31
31
  import "../chunk-QCLOIUMX.js";
32
32
  import "../chunk-XARGEOJV.js";
33
33
  import "../chunk-KFQGP6VL.js";
@@ -3,38 +3,38 @@ import {
3
3
  createProgram,
4
4
  installCommandTelemetry,
5
5
  printFirstRunWelcome
6
- } from "../chunk-LGYXR2KZ.js";
7
- import "../chunk-N5NSSLMU.js";
8
- import "../chunk-LECXPXS3.js";
9
- import "../chunk-RJ2WEES5.js";
10
- import "../chunk-O2ASYKA6.js";
11
- import "../chunk-INBTDBV2.js";
6
+ } from "../chunk-XFU6SB2Q.js";
7
+ import "../chunk-6WQCLCBO.js";
8
+ import "../chunk-QBC7DI4Q.js";
9
+ import "../chunk-GSP2XIVS.js";
10
+ import "../chunk-3ISHDWO7.js";
11
+ import "../chunk-NWLGL3IR.js";
12
12
  import "../chunk-KET4QQZB.js";
13
- import "../chunk-6UHDQP2N.js";
14
- import "../chunk-B2VAYLYI.js";
13
+ import "../chunk-2N4OENGE.js";
14
+ import "../chunk-UX3PQKVZ.js";
15
15
  import "../chunk-CQ553GZO.js";
16
16
  import "../chunk-ZP5E7YET.js";
17
- import "../chunk-PTHX545Q.js";
17
+ import "../chunk-PC2R5RUJ.js";
18
18
  import "../chunk-GISMXMVL.js";
19
19
  import "../chunk-WWACIIBA.js";
20
20
  import "../chunk-TEFCFC4H.js";
21
- import "../chunk-FC4JPM6W.js";
21
+ import "../chunk-KAJOS3BA.js";
22
22
  import {
23
23
  dispatchSkillsFromGit
24
- } from "../chunk-7PLIWP7U.js";
25
- import "../chunk-CZPOPMMI.js";
26
- import "../chunk-KN3EMDZ5.js";
27
- import "../chunk-VI4IS55S.js";
28
- import "../chunk-LYIPI2SJ.js";
29
- import "../chunk-FEKBXX2J.js";
24
+ } from "../chunk-WWEVS7RO.js";
25
+ import "../chunk-HEIMJJI4.js";
26
+ import "../chunk-XX4OLNWQ.js";
27
+ import "../chunk-YQSYCBAH.js";
28
+ import "../chunk-Z4AWEIBY.js";
29
+ import "../chunk-ONCPJGHY.js";
30
30
  import "../chunk-IOW3MW2K.js";
31
- import "../chunk-Z3TMCCZB.js";
31
+ import "../chunk-BYVT5LVO.js";
32
32
  import "../chunk-3ISINLYT.js";
33
- import "../chunk-TIH53QXY.js";
34
- import "../chunk-7AF6C5GE.js";
35
- import "../chunk-GGSNWH7P.js";
36
- import "../chunk-VSIRUZQP.js";
37
- import "../chunk-NIVWM7OW.js";
33
+ import "../chunk-CLI4K2CH.js";
34
+ import "../chunk-HWTUUQOW.js";
35
+ import "../chunk-527G27VI.js";
36
+ import "../chunk-DE5U6KOL.js";
37
+ import "../chunk-MGUPSE6D.js";
38
38
  import "../chunk-RC3OI5NK.js";
39
39
  import "../chunk-W6Y7ZW3Y.js";
40
40
  import "../chunk-27AJKSQY.js";
@@ -43,7 +43,7 @@ import "../chunk-HIK6OEUF.js";
43
43
  import {
44
44
  findConfigFile,
45
45
  loadConfig
46
- } from "../chunk-FXZI6NJ2.js";
46
+ } from "../chunk-GGKRA7A7.js";
47
47
  import "../chunk-ZCZD7FHU.js";
48
48
  import "../chunk-EBJQ6N4M.js";
49
49
  import {
@@ -56,13 +56,13 @@ import {
56
56
  readCheckState,
57
57
  shouldRunCheck,
58
58
  spawnBackgroundCheck
59
- } from "../chunk-WZY5U6NS.js";
59
+ } from "../chunk-N24HCQA4.js";
60
60
  import {
61
61
  CLI_VERSION
62
62
  } from "../chunk-BM3PWGXQ.js";
63
- import "../chunk-Y4T6ENKQ.js";
64
- import "../chunk-OH3NXXUY.js";
65
- import "../chunk-H2ZJOJ7A.js";
63
+ import "../chunk-N55WOGN3.js";
64
+ import "../chunk-BDGTZRZ6.js";
65
+ import "../chunk-PP6ZRL5T.js";
66
66
  import "../chunk-QCLOIUMX.js";
67
67
  import "../chunk-XARGEOJV.js";
68
68
  import "../chunk-KFQGP6VL.js";
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  createCheckPhaseGateCommand,
3
3
  runCheckPhaseGate
4
- } from "./chunk-FC4JPM6W.js";
5
- import "./chunk-FXZI6NJ2.js";
4
+ } from "./chunk-KAJOS3BA.js";
5
+ import "./chunk-GGKRA7A7.js";
6
6
  import "./chunk-ZCZD7FHU.js";
7
7
  import "./chunk-EBJQ6N4M.js";
8
8
  import "./chunk-3WGJMBKH.js";
9
- import "./chunk-WZY5U6NS.js";
10
- import "./chunk-Y4T6ENKQ.js";
11
- import "./chunk-OH3NXXUY.js";
12
- import "./chunk-H2ZJOJ7A.js";
9
+ import "./chunk-N24HCQA4.js";
10
+ import "./chunk-N55WOGN3.js";
11
+ import "./chunk-BDGTZRZ6.js";
12
+ import "./chunk-PP6ZRL5T.js";
13
13
  import "./chunk-QCLOIUMX.js";
14
14
  import "./chunk-XARGEOJV.js";
15
15
  import "./chunk-KFQGP6VL.js";
@@ -41,7 +41,7 @@ async function runScan(projectPath) {
41
41
  KnowledgeIngestor,
42
42
  GitIngestor,
43
43
  RequirementIngestor
44
- } = await import("./dist-R3TOOPJ7.js");
44
+ } = await import("./dist-OWHMNL4W.js");
45
45
  const store = new GraphStore();
46
46
  const start = Date.now();
47
47
  const ingestOptions = loadIngestOptions(projectPath);
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  init_dist
3
- } from "./chunk-WZY5U6NS.js";
3
+ } from "./chunk-N24HCQA4.js";
4
4
  import {
5
5
  Ok
6
- } from "./chunk-OH3NXXUY.js";
6
+ } from "./chunk-BDGTZRZ6.js";
7
7
 
8
8
  // src/commands/validate-cross-check.ts
9
9
  init_dist();
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveProjectConfig
3
- } from "./chunk-VSIRUZQP.js";
3
+ } from "./chunk-DE5U6KOL.js";
4
4
  import {
5
5
  resultToMcpResponse
6
6
  } from "./chunk-RC3OI5NK.js";
@@ -38,7 +38,7 @@ async function handleCheckDependencies(input) {
38
38
  const configResult = resolveProjectConfig(projectPath);
39
39
  if (!configResult.ok) return resultToMcpResponse(configResult);
40
40
  try {
41
- const { validateDependencies, TypeScriptParser } = await import("./dist-72ID44UE.js");
41
+ const { validateDependencies, TypeScriptParser } = await import("./dist-LHINSVK4.js");
42
42
  const config = configResult.value;
43
43
  const rawLayers = Array.isArray(config.layers) ? config.layers : [];
44
44
  const layers = rawLayers.map((l) => ({
@@ -47,11 +47,11 @@ async function handleCheckDependencies(input) {
47
47
  allowedDependencies: l.allowedDependencies
48
48
  }));
49
49
  const parser = new TypeScriptParser();
50
- const { loadGraphStore } = await import("./graph-loader-EIFEOUVI.js");
50
+ const { loadGraphStore } = await import("./graph-loader-HHXN5FLP.js");
51
51
  const store = await loadGraphStore(projectPath);
52
52
  let graphDependencyData;
53
53
  if (store) {
54
- const { GraphConstraintAdapter } = await import("./dist-R3TOOPJ7.js");
54
+ const { GraphConstraintAdapter } = await import("./dist-OWHMNL4W.js");
55
55
  const adapter = new GraphConstraintAdapter(store);
56
56
  const graphData = adapter.computeDependencyGraph();
57
57
  graphDependencyData = {
@@ -69,7 +69,7 @@ async function handleCheckDependencies(input) {
69
69
  if (store) {
70
70
  const designTokenNodes = store.findNodes({ type: "design_token" });
71
71
  if (designTokenNodes.length > 0) {
72
- const { DesignConstraintAdapter } = await import("./dist-R3TOOPJ7.js");
72
+ const { DesignConstraintAdapter } = await import("./dist-OWHMNL4W.js");
73
73
  const designAdapter = new DesignConstraintAdapter(store);
74
74
  const fileNodes = store.findNodes({ type: "file" });
75
75
  for (const fileNode of fileNodes) {
@@ -3,11 +3,11 @@ import {
3
3
  } from "./chunk-KET4QQZB.js";
4
4
  import {
5
5
  init_dist
6
- } from "./chunk-WZY5U6NS.js";
6
+ } from "./chunk-N24HCQA4.js";
7
7
  import {
8
8
  Err,
9
9
  Ok
10
- } from "./chunk-OH3NXXUY.js";
10
+ } from "./chunk-BDGTZRZ6.js";
11
11
 
12
12
  // src/persona/generators/runtime.ts
13
13
  init_dist();
@@ -21,7 +21,7 @@ function isOk(result) {
21
21
  function isErr(result) {
22
22
  return result.ok === false;
23
23
  }
24
- var STANDARD_COGNITIVE_MODES, DEFAULT_SKILL_CONTEXT_BUDGET, SESSION_SECTION_NAMES, TrajectoryMetadataSchema, PromptCacheStatsSchema, OTLPKeyValueSchema, OTLPSpanSchema, TokenScopeSchema, BridgeKindSchema, AuthTokenSchema, AuthTokenPublicSchema, AuthAuditEntrySchema, WebhookSubscriptionSchema, WebhookSubscriptionPublicSchema, GatewayEventSchema, WebhookDeliveryStatusSchema, WebhookDeliverySchema, INDEXED_FILE_KINDS, SessionSummarySchema, INSIGHTS_KEYS, SESSIONS_DEFAULTS, NotificationSinkKindSchema, NotificationSeveritySchema, NotificationActionSchema, NotificationEnvelopeSchema, NotificationSinkConfigSchema, NotificationsConfigSchema, NotificationDeliveryResultSchema, SkillProvenanceSchema, ProposalKindSchema, ProposalStatusSchema, ProposalGateFindingSchema, ProposalGateSchema, ProposalDecisionSchema, ProposalContentSchema, ProposalSourceSchema, SkillProposalSchema, EmitSkillProposalInputSchema, EditProposalInputSchema;
24
+ var STANDARD_COGNITIVE_MODES, DEFAULT_SKILL_CONTEXT_BUDGET, SESSION_SECTION_NAMES, TrajectoryMetadataSchema, PromptCacheStatsSchema, OTLPKeyValueSchema, OTLPSpanSchema, REQUIRED_STRATEGY_SECTIONS, OPTIONAL_STRATEGY_SECTIONS, TokenScopeSchema, BridgeKindSchema, AuthTokenSchema, AuthTokenPublicSchema, AuthAuditEntrySchema, WebhookSubscriptionSchema, WebhookSubscriptionPublicSchema, GatewayEventSchema, WebhookDeliveryStatusSchema, WebhookDeliverySchema, INDEXED_FILE_KINDS, SessionSummarySchema, INSIGHTS_KEYS, SESSIONS_DEFAULTS, NotificationSinkKindSchema, NotificationSeveritySchema, NotificationActionSchema, NotificationEnvelopeSchema, NotificationSinkConfigSchema, NotificationsConfigSchema, NotificationDeliveryResultSchema, SkillProvenanceSchema, ProposalKindSchema, ProposalStatusSchema, ProposalGateFindingSchema, ProposalGateSchema, ProposalDecisionSchema, ProposalContentSchema, ProposalSourceSchema, SkillProposalSchema, EmitSkillProposalInputSchema, EditProposalInputSchema;
25
25
  var init_dist = __esm({
26
26
  "../types/dist/index.mjs"() {
27
27
  STANDARD_COGNITIVE_MODES = [
@@ -96,6 +96,14 @@ var init_dist = __esm({
96
96
  attributes: z.array(OTLPKeyValueSchema),
97
97
  status: z.object({ code: z.number().int() }).optional()
98
98
  });
99
+ REQUIRED_STRATEGY_SECTIONS = [
100
+ "Target problem",
101
+ "Our approach",
102
+ "Who it's for",
103
+ "Key metrics",
104
+ "Tracks"
105
+ ];
106
+ OPTIONAL_STRATEGY_SECTIONS = ["Milestones", "Not working on", "Marketing"];
99
107
  TokenScopeSchema = z2.enum([
100
108
  "admin",
101
109
  "trigger-job",
@@ -347,6 +355,8 @@ export {
347
355
  PromptCacheStatsSchema,
348
356
  OTLPKeyValueSchema,
349
357
  OTLPSpanSchema,
358
+ REQUIRED_STRATEGY_SECTIONS,
359
+ OPTIONAL_STRATEGY_SECTIONS,
350
360
  TokenScopeSchema,
351
361
  BridgeKindSchema,
352
362
  AuthTokenSchema,