forgecraft-mcp 1.3.2 → 1.6.1
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.
- package/README.md +2 -2
- package/dist/analyzers/anchors/anchor-loader.d.ts +47 -0
- package/dist/analyzers/anchors/anchor-loader.d.ts.map +1 -0
- package/dist/analyzers/anchors/anchor-loader.js +113 -0
- package/dist/analyzers/anchors/anchor-loader.js.map +1 -0
- package/dist/analyzers/anti-pattern.d.ts.map +1 -1
- package/dist/analyzers/anti-pattern.js +38 -26
- package/dist/analyzers/anti-pattern.js.map +1 -1
- package/dist/analyzers/completeness-helpers.d.ts +5 -0
- package/dist/analyzers/completeness-helpers.d.ts.map +1 -1
- package/dist/analyzers/completeness-helpers.js +17 -0
- package/dist/analyzers/completeness-helpers.js.map +1 -1
- package/dist/analyzers/completeness.d.ts.map +1 -1
- package/dist/analyzers/completeness.js +4 -4
- package/dist/analyzers/completeness.js.map +1 -1
- package/dist/analyzers/gs-scorer.d.ts +3 -1
- package/dist/analyzers/gs-scorer.d.ts.map +1 -1
- package/dist/analyzers/gs-scorer.js +5 -2
- package/dist/analyzers/gs-scorer.js.map +1 -1
- package/dist/analyzers/scorers/composable-scorer.d.ts +4 -2
- package/dist/analyzers/scorers/composable-scorer.d.ts.map +1 -1
- package/dist/analyzers/scorers/composable-scorer.js +50 -2
- package/dist/analyzers/scorers/composable-scorer.js.map +1 -1
- package/dist/analyzers/scorers/executable-scorer.d.ts +3 -2
- package/dist/analyzers/scorers/executable-scorer.d.ts.map +1 -1
- package/dist/analyzers/scorers/executable-scorer.js +64 -4
- package/dist/analyzers/scorers/executable-scorer.js.map +1 -1
- package/dist/analyzers/scorers/scorer-utils.d.ts +5 -3
- package/dist/analyzers/scorers/scorer-utils.d.ts.map +1 -1
- package/dist/analyzers/scorers/scorer-utils.js +34 -9
- package/dist/analyzers/scorers/scorer-utils.js.map +1 -1
- package/dist/analyzers/scorers/self-describing-scorer.d.ts +7 -4
- package/dist/analyzers/scorers/self-describing-scorer.d.ts.map +1 -1
- package/dist/analyzers/scorers/self-describing-scorer.js +17 -18
- package/dist/analyzers/scorers/self-describing-scorer.js.map +1 -1
- package/dist/artifacts/commit-hooks.d.ts +1 -1
- package/dist/artifacts/commit-hooks.d.ts.map +1 -1
- package/dist/artifacts/commit-hooks.js +2 -0
- package/dist/artifacts/commit-hooks.js.map +1 -1
- package/dist/cli/commands.d.ts +35 -1
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +109 -2
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +7 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +10 -1
- package/dist/cli.js.map +1 -1
- package/dist/disciplines/catalog.d.ts +16 -0
- package/dist/disciplines/catalog.d.ts.map +1 -0
- package/dist/disciplines/catalog.js +196 -0
- package/dist/disciplines/catalog.js.map +1 -0
- package/dist/disciplines/runner.d.ts +13 -0
- package/dist/disciplines/runner.d.ts.map +1 -0
- package/dist/disciplines/runner.js +35 -0
- package/dist/disciplines/runner.js.map +1 -0
- package/dist/registry/remote-gates.js +1 -1
- package/dist/registry/remote-gates.js.map +1 -1
- package/dist/sentinel/detect.d.ts +41 -0
- package/dist/sentinel/detect.d.ts.map +1 -0
- package/dist/sentinel/detect.js +122 -0
- package/dist/sentinel/detect.js.map +1 -0
- package/dist/sentinel/write.d.ts +54 -0
- package/dist/sentinel/write.d.ts.map +1 -0
- package/dist/sentinel/write.js +75 -0
- package/dist/sentinel/write.js.map +1 -0
- package/dist/shared/cnt-health.d.ts.map +1 -1
- package/dist/shared/cnt-health.js +12 -4
- package/dist/shared/cnt-health.js.map +1 -1
- package/dist/shared/config.d.ts +8 -0
- package/dist/shared/config.d.ts.map +1 -1
- package/dist/shared/config.js +23 -0
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/project-gates-helpers.d.ts +9 -0
- package/dist/shared/project-gates-helpers.d.ts.map +1 -1
- package/dist/shared/project-gates-helpers.js +35 -0
- package/dist/shared/project-gates-helpers.js.map +1 -1
- package/dist/shared/result-utils.d.ts +27 -0
- package/dist/shared/result-utils.d.ts.map +1 -0
- package/dist/shared/result-utils.js +41 -0
- package/dist/shared/result-utils.js.map +1 -0
- package/dist/shared/types/config.d.ts +7 -1
- package/dist/shared/types/config.d.ts.map +1 -1
- package/dist/shared/types/gates.d.ts +28 -0
- package/dist/shared/types/gates.d.ts.map +1 -1
- package/dist/shared/types/project.d.ts +66 -0
- package/dist/shared/types/project.d.ts.map +1 -1
- package/dist/shared/types/project.js.map +1 -1
- package/dist/shared/types/verify.d.ts +51 -1
- package/dist/shared/types/verify.d.ts.map +1 -1
- package/dist/shared/types/verify.js +37 -1
- package/dist/shared/types/verify.js.map +1 -1
- package/dist/tools/advise-session-advisor.d.ts +16 -0
- package/dist/tools/advise-session-advisor.d.ts.map +1 -0
- package/dist/tools/advise-session-advisor.js +89 -0
- package/dist/tools/advise-session-advisor.js.map +1 -0
- package/dist/tools/advise-session-signals.d.ts +21 -0
- package/dist/tools/advise-session-signals.d.ts.map +1 -0
- package/dist/tools/advise-session-signals.js +113 -0
- package/dist/tools/advise-session-signals.js.map +1 -0
- package/dist/tools/advise-session.d.ts +22 -0
- package/dist/tools/advise-session.d.ts.map +1 -0
- package/dist/tools/advise-session.js +31 -0
- package/dist/tools/advise-session.js.map +1 -0
- package/dist/tools/change-request.d.ts +53 -0
- package/dist/tools/change-request.d.ts.map +1 -0
- package/dist/tools/change-request.js +375 -0
- package/dist/tools/change-request.js.map +1 -0
- package/dist/tools/check-cascade-contracts.d.ts +13 -0
- package/dist/tools/check-cascade-contracts.d.ts.map +1 -1
- package/dist/tools/check-cascade-contracts.js +73 -2
- package/dist/tools/check-cascade-contracts.js.map +1 -1
- package/dist/tools/check-cascade.d.ts +4 -3
- package/dist/tools/check-cascade.d.ts.map +1 -1
- package/dist/tools/check-cascade.js +30 -12
- package/dist/tools/check-cascade.js.map +1 -1
- package/dist/tools/check-spec-consistency.d.ts +25 -0
- package/dist/tools/check-spec-consistency.d.ts.map +1 -0
- package/dist/tools/check-spec-consistency.js +339 -0
- package/dist/tools/check-spec-consistency.js.map +1 -0
- package/dist/tools/check-t4.d.ts +54 -0
- package/dist/tools/check-t4.d.ts.map +1 -0
- package/dist/tools/check-t4.js +305 -0
- package/dist/tools/check-t4.js.map +1 -0
- package/dist/tools/close-cycle-helpers.d.ts +21 -2
- package/dist/tools/close-cycle-helpers.d.ts.map +1 -1
- package/dist/tools/close-cycle-helpers.js +66 -10
- package/dist/tools/close-cycle-helpers.js.map +1 -1
- package/dist/tools/close-cycle.d.ts +2 -2
- package/dist/tools/close-cycle.d.ts.map +1 -1
- package/dist/tools/close-cycle.js +342 -4
- package/dist/tools/close-cycle.js.map +1 -1
- package/dist/tools/consolidate-status.d.ts +112 -0
- package/dist/tools/consolidate-status.d.ts.map +1 -0
- package/dist/tools/consolidate-status.js +356 -0
- package/dist/tools/consolidate-status.js.map +1 -0
- package/dist/tools/executable-gates.d.ts +52 -0
- package/dist/tools/executable-gates.d.ts.map +1 -0
- package/dist/tools/executable-gates.js +332 -0
- package/dist/tools/executable-gates.js.map +1 -0
- package/dist/tools/forgecraft-dispatch-extended.d.ts.map +1 -1
- package/dist/tools/forgecraft-dispatch-extended.js +75 -0
- package/dist/tools/forgecraft-dispatch-extended.js.map +1 -1
- package/dist/tools/forgecraft-dispatch.d.ts.map +1 -1
- package/dist/tools/forgecraft-dispatch.js +21 -0
- package/dist/tools/forgecraft-dispatch.js.map +1 -1
- package/dist/tools/forgecraft-router.d.ts +8 -0
- package/dist/tools/forgecraft-router.d.ts.map +1 -1
- package/dist/tools/forgecraft-router.js +21 -1
- package/dist/tools/forgecraft-router.js.map +1 -1
- package/dist/tools/forgecraft-schema-params.d.ts +61 -4
- package/dist/tools/forgecraft-schema-params.d.ts.map +1 -1
- package/dist/tools/forgecraft-schema-params.js +95 -0
- package/dist/tools/forgecraft-schema-params.js.map +1 -1
- package/dist/tools/forgecraft-schema.d.ts +62 -5
- package/dist/tools/forgecraft-schema.d.ts.map +1 -1
- package/dist/tools/forgecraft-schema.js +24 -0
- package/dist/tools/forgecraft-schema.js.map +1 -1
- package/dist/tools/gate-violations.d.ts +59 -0
- package/dist/tools/gate-violations.d.ts.map +1 -0
- package/dist/tools/gate-violations.js +152 -0
- package/dist/tools/gate-violations.js.map +1 -0
- package/dist/tools/generate-adr.js +6 -6
- package/dist/tools/generate-adr.js.map +1 -1
- package/dist/tools/generate-env-probe.d.ts +49 -0
- package/dist/tools/generate-env-probe.d.ts.map +1 -0
- package/dist/tools/generate-env-probe.js +365 -0
- package/dist/tools/generate-env-probe.js.map +1 -0
- package/dist/tools/generate-harness.d.ts +52 -0
- package/dist/tools/generate-harness.d.ts.map +1 -0
- package/dist/tools/generate-harness.js +333 -0
- package/dist/tools/generate-harness.js.map +1 -0
- package/dist/tools/generate-roadmap.d.ts +1 -1
- package/dist/tools/generate-roadmap.d.ts.map +1 -1
- package/dist/tools/generate-roadmap.js +38 -4
- package/dist/tools/generate-roadmap.js.map +1 -1
- package/dist/tools/generate-session-prompt.d.ts +4 -4
- package/dist/tools/generate-session-prompt.d.ts.map +1 -1
- package/dist/tools/generate-session-prompt.js +66 -16
- package/dist/tools/generate-session-prompt.js.map +1 -1
- package/dist/tools/generate-slo-probe.d.ts +53 -0
- package/dist/tools/generate-slo-probe.d.ts.map +1 -0
- package/dist/tools/generate-slo-probe.js +366 -0
- package/dist/tools/generate-slo-probe.js.map +1 -0
- package/dist/tools/layer-status-gates.d.ts +24 -0
- package/dist/tools/layer-status-gates.d.ts.map +1 -0
- package/dist/tools/layer-status-gates.js +151 -0
- package/dist/tools/layer-status-gates.js.map +1 -0
- package/dist/tools/layer-status.d.ts +133 -0
- package/dist/tools/layer-status.d.ts.map +1 -0
- package/dist/tools/layer-status.js +593 -0
- package/dist/tools/layer-status.js.map +1 -0
- package/dist/tools/postcondition-coverage.d.ts +57 -0
- package/dist/tools/postcondition-coverage.d.ts.map +1 -0
- package/dist/tools/postcondition-coverage.js +256 -0
- package/dist/tools/postcondition-coverage.js.map +1 -0
- package/dist/tools/probe-runners.d.ts +21 -0
- package/dist/tools/probe-runners.d.ts.map +1 -0
- package/dist/tools/probe-runners.js +246 -0
- package/dist/tools/probe-runners.js.map +1 -0
- package/dist/tools/probe-templates.d.ts +27 -0
- package/dist/tools/probe-templates.d.ts.map +1 -0
- package/dist/tools/probe-templates.js +279 -0
- package/dist/tools/probe-templates.js.map +1 -0
- package/dist/tools/propose-session.d.ts +28 -0
- package/dist/tools/propose-session.d.ts.map +1 -0
- package/dist/tools/propose-session.js +333 -0
- package/dist/tools/propose-session.js.map +1 -0
- package/dist/tools/roadmap-builder.d.ts +34 -1
- package/dist/tools/roadmap-builder.d.ts.map +1 -1
- package/dist/tools/roadmap-builder.js +153 -11
- package/dist/tools/roadmap-builder.js.map +1 -1
- package/dist/tools/run-env-probe.d.ts +57 -0
- package/dist/tools/run-env-probe.d.ts.map +1 -0
- package/dist/tools/run-env-probe.js +270 -0
- package/dist/tools/run-env-probe.js.map +1 -0
- package/dist/tools/run-harness.d.ts +52 -0
- package/dist/tools/run-harness.d.ts.map +1 -0
- package/dist/tools/run-harness.js +279 -0
- package/dist/tools/run-harness.js.map +1 -0
- package/dist/tools/run-slo-probe.d.ts +50 -0
- package/dist/tools/run-slo-probe.d.ts.map +1 -0
- package/dist/tools/run-slo-probe.js +281 -0
- package/dist/tools/run-slo-probe.js.map +1 -0
- package/dist/tools/scaffold-writer.d.ts.map +1 -1
- package/dist/tools/scaffold-writer.js +4 -0
- package/dist/tools/scaffold-writer.js.map +1 -1
- package/dist/tools/session-prompt-builders.d.ts +20 -0
- package/dist/tools/session-prompt-builders.d.ts.map +1 -1
- package/dist/tools/session-prompt-builders.js +111 -14
- package/dist/tools/session-prompt-builders.js.map +1 -1
- package/dist/tools/session-prompt-sections.d.ts +4 -2
- package/dist/tools/session-prompt-sections.d.ts.map +1 -1
- package/dist/tools/session-prompt-sections.js +22 -10
- package/dist/tools/session-prompt-sections.js.map +1 -1
- package/dist/tools/setup-monitoring.d.ts +41 -0
- package/dist/tools/setup-monitoring.d.ts.map +1 -0
- package/dist/tools/setup-monitoring.js +364 -0
- package/dist/tools/setup-monitoring.js.map +1 -0
- package/dist/tools/verify-formatter.d.ts.map +1 -1
- package/dist/tools/verify-formatter.js +15 -1
- package/dist/tools/verify-formatter.js.map +1 -1
- package/dist/tools/verify.d.ts.map +1 -1
- package/dist/tools/verify.js +3 -0
- package/dist/tools/verify.js.map +1 -1
- package/package.json +11 -2
- package/templates/api/harness/uc-template.hurl +20 -0
- package/templates/docs-manifest.yaml +224 -0
- package/templates/game/harness/uc-template.sim.ts +29 -0
- package/templates/universal/claude-md-blocks/layer-navigation.md +20 -0
- package/templates/universal/claude-md-blocks/nfr-contracts.md +22 -0
- package/templates/universal/hooks.yaml +212 -20
- package/templates/web-react/harness/uc-template.spec.ts +35 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-prompt-builders.js","sourceRoot":"","sources":["../../src/tools/session-prompt-builders.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,4BAA4B,EAC5B,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"session-prompt-builders.js","sourceRoot":"","sources":["../../src/tools/session-prompt-builders.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,9 +33,10 @@ export declare function isServerConfigured(projectDir: string, serverName: strin
|
|
|
33
33
|
* Build the TDD Gate section.
|
|
34
34
|
*
|
|
35
35
|
* @param conventionalType - Conventional commit type for this session
|
|
36
|
+
* @param level - Practitioner experience level; "experienced" emits compact form
|
|
36
37
|
* @returns Formatted TDD Gate section
|
|
37
38
|
*/
|
|
38
|
-
export declare function buildTddGateSection(conventionalType: string): string;
|
|
39
|
+
export declare function buildTddGateSection(conventionalType: string, level?: "novice" | "experienced"): string;
|
|
39
40
|
/**
|
|
40
41
|
* Build the context load block based on which artifacts are present.
|
|
41
42
|
*
|
|
@@ -54,7 +55,8 @@ export declare function buildContextRetrievalSection(projectDir: string): string
|
|
|
54
55
|
* Build the Execution Loop section with the derived test command.
|
|
55
56
|
*
|
|
56
57
|
* @param testCommand - The test command to embed, or undefined when not yet configured
|
|
58
|
+
* @param level - Practitioner experience level; "experienced" emits compact form
|
|
57
59
|
* @returns Formatted Execution Loop section
|
|
58
60
|
*/
|
|
59
|
-
export declare function buildExecutionLoopSection(testCommand: string | undefined): string;
|
|
61
|
+
export declare function buildExecutionLoopSection(testCommand: string | undefined, level?: "novice" | "experienced"): string;
|
|
60
62
|
//# sourceMappingURL=session-prompt-sections.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-prompt-sections.d.ts","sourceRoot":"","sources":["../../src/tools/session-prompt-sections.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAIpE;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAO/D;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMxE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAUlF;AAID
|
|
1
|
+
{"version":3,"file":"session-prompt-sections.d.ts","sourceRoot":"","sources":["../../src/tools/session-prompt-sections.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAIpE;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAO/D;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMxE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAUlF;AAID;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,gBAAgB,EAAE,MAAM,EACxB,KAAK,GAAE,QAAQ,GAAG,aAAwB,GACzC,MAAM,CAuBR;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,eAAe,GAAG,MAAM,CAmCxE;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAcvE;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,KAAK,GAAE,QAAQ,GAAG,aAAwB,GACzC,MAAM,CAsBR"}
|
|
@@ -63,17 +63,25 @@ export function isServerConfigured(projectDir, serverName) {
|
|
|
63
63
|
* Build the TDD Gate section.
|
|
64
64
|
*
|
|
65
65
|
* @param conventionalType - Conventional commit type for this session
|
|
66
|
+
* @param level - Practitioner experience level; "experienced" emits compact form
|
|
66
67
|
* @returns Formatted TDD Gate section
|
|
67
68
|
*/
|
|
68
|
-
export function buildTddGateSection(conventionalType) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
69
|
+
export function buildTddGateSection(conventionalType, level = "novice") {
|
|
70
|
+
const commitSequence = `\`\`\`\ntest(scope): [RED] <describe what the test asserts>\n` +
|
|
71
|
+
`${conventionalType}(scope): <implement to satisfy the test>\n` +
|
|
72
|
+
`refactor(scope): <clean without behavior change> ← only if needed\n\`\`\`\n\n`;
|
|
73
|
+
if (level === "experienced") {
|
|
74
|
+
return (`### TDD Gate\n\n` +
|
|
75
|
+
`RED → GREEN → REFACTOR. Commit sequence:\n` +
|
|
76
|
+
commitSequence);
|
|
77
|
+
}
|
|
78
|
+
return (`### TDD Gate\n\n` +
|
|
79
|
+
`Follow strict RED → GREEN → REFACTOR.\n` +
|
|
80
|
+
`1. **RED**: Write the failing test first. Run it. Paste the failure output before writing any implementation.\n` +
|
|
81
|
+
`2. **GREEN**: Write minimum implementation to pass. Do not proceed until tests pass.\n` +
|
|
82
|
+
`3. **REFACTOR**: Clean structure while keeping all tests green.\n\n` +
|
|
83
|
+
`Commit sequence required:\n` +
|
|
84
|
+
commitSequence);
|
|
77
85
|
}
|
|
78
86
|
/**
|
|
79
87
|
* Build the context load block based on which artifacts are present.
|
|
@@ -135,12 +143,16 @@ export function buildContextRetrievalSection(projectDir) {
|
|
|
135
143
|
* Build the Execution Loop section with the derived test command.
|
|
136
144
|
*
|
|
137
145
|
* @param testCommand - The test command to embed, or undefined when not yet configured
|
|
146
|
+
* @param level - Practitioner experience level; "experienced" emits compact form
|
|
138
147
|
* @returns Formatted Execution Loop section
|
|
139
148
|
*/
|
|
140
|
-
export function buildExecutionLoopSection(testCommand) {
|
|
149
|
+
export function buildExecutionLoopSection(testCommand, level = "novice") {
|
|
141
150
|
const commandLine = testCommand
|
|
142
151
|
? `**Test command for this project:** \`${testCommand}\``
|
|
143
152
|
: `**Test command**: Not configured yet — add package.json/pyproject.toml first`;
|
|
153
|
+
if (level === "experienced") {
|
|
154
|
+
return `## Execution Loop\n\n${commandLine}\n\n`;
|
|
155
|
+
}
|
|
144
156
|
return (`## Execution Loop\n\n` +
|
|
145
157
|
`Every implementation unit follows this loop. Do not exit until all tests are green.\n\n` +
|
|
146
158
|
`1. **Write the failing test first** (RED) — run it, confirm it fails for the right reason\n` +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-prompt-sections.js","sourceRoot":"","sources":["../../src/tools/session-prompt-sections.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,IAAI,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGlF,wEAAwE;AAExE;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACpD,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACnC,OAAO,CACL,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;QACxB,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QACzB,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACzB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IAClD,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAAE,OAAO,UAAU,CAAC;IACpE,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IACpE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAkB,EAAE,UAAkB;IACvE,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAClE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAA4B,CAAC;QAC5F,MAAM,UAAU,GAAG,QAAQ,CAAC,YAAY,CAAwC,CAAC;QACjF,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,wEAAwE;AAExE
|
|
1
|
+
{"version":3,"file":"session-prompt-sections.js","sourceRoot":"","sources":["../../src/tools/session-prompt-sections.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* setup_monitoring tool handler.
|
|
3
|
+
*
|
|
4
|
+
* Generates docs/monitoring-spec.md from the project's NFR contracts and
|
|
5
|
+
* behavioral contracts. This is the production contract that forgecraft-eye
|
|
6
|
+
* evaluates runtime signals against at T4.
|
|
7
|
+
*
|
|
8
|
+
* The generated spec contains:
|
|
9
|
+
* - Exception classes that signal specification drift
|
|
10
|
+
* - Alert thresholds with exact numeric criteria
|
|
11
|
+
* - SLO definitions for each service
|
|
12
|
+
* - Correlation ID and PII redaction policy
|
|
13
|
+
* - Property violation mapping (exception → GS property → spec location)
|
|
14
|
+
*/
|
|
15
|
+
import { z } from "zod";
|
|
16
|
+
import type { ToolResult } from "../shared/types.js";
|
|
17
|
+
export declare const setupMonitoringSchema: z.ZodObject<{
|
|
18
|
+
project_dir: z.ZodString;
|
|
19
|
+
project_name: z.ZodOptional<z.ZodString>;
|
|
20
|
+
force: z.ZodOptional<z.ZodBoolean>;
|
|
21
|
+
}, "strip", z.ZodTypeAny, {
|
|
22
|
+
project_dir: string;
|
|
23
|
+
project_name?: string | undefined;
|
|
24
|
+
force?: boolean | undefined;
|
|
25
|
+
}, {
|
|
26
|
+
project_dir: string;
|
|
27
|
+
project_name?: string | undefined;
|
|
28
|
+
force?: boolean | undefined;
|
|
29
|
+
}>;
|
|
30
|
+
export type SetupMonitoringInput = z.infer<typeof setupMonitoringSchema>;
|
|
31
|
+
/**
|
|
32
|
+
* Write `.forgecraft/eye-config.yaml` with sensible defaults if absent.
|
|
33
|
+
* Mirrors the shape of `EyeConfig` in forgecraft-eye without importing it.
|
|
34
|
+
*
|
|
35
|
+
* @param projectDir - Absolute path to the project root.
|
|
36
|
+
* @param projectName - Display name used for the CloudWatch log group slug.
|
|
37
|
+
* @returns `true` if the file was created, `false` if it already existed or errored.
|
|
38
|
+
*/
|
|
39
|
+
export declare function scaffoldEyeConfig(projectDir: string, projectName: string): boolean;
|
|
40
|
+
export declare function setupMonitoringHandler(args: SetupMonitoringInput): Promise<ToolResult>;
|
|
41
|
+
//# sourceMappingURL=setup-monitoring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-monitoring.d.ts","sourceRoot":"","sources":["../../src/tools/setup-monitoring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;EAYhC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAyPzE;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CA8BT;AAID,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,UAAU,CAAC,CAgJrB"}
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* setup_monitoring tool handler.
|
|
3
|
+
*
|
|
4
|
+
* Generates docs/monitoring-spec.md from the project's NFR contracts and
|
|
5
|
+
* behavioral contracts. This is the production contract that forgecraft-eye
|
|
6
|
+
* evaluates runtime signals against at T4.
|
|
7
|
+
*
|
|
8
|
+
* The generated spec contains:
|
|
9
|
+
* - Exception classes that signal specification drift
|
|
10
|
+
* - Alert thresholds with exact numeric criteria
|
|
11
|
+
* - SLO definitions for each service
|
|
12
|
+
* - Correlation ID and PII redaction policy
|
|
13
|
+
* - Property violation mapping (exception → GS property → spec location)
|
|
14
|
+
*/
|
|
15
|
+
import { z } from "zod";
|
|
16
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
17
|
+
import { join, resolve } from "node:path";
|
|
18
|
+
// ── Schema ───────────────────────────────────────────────────────────
|
|
19
|
+
export const setupMonitoringSchema = z.object({
|
|
20
|
+
project_dir: z.string().describe("Absolute path to the project root."),
|
|
21
|
+
project_name: z
|
|
22
|
+
.string()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("Project name for the spec header. Inferred from directory name if omitted."),
|
|
25
|
+
force: z
|
|
26
|
+
.boolean()
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("Overwrite existing monitoring-spec.md. Default: false."),
|
|
29
|
+
});
|
|
30
|
+
// ── Source doc paths ─────────────────────────────────────────────────
|
|
31
|
+
const SOURCE_DOCS = [
|
|
32
|
+
"docs/nfr-contracts.md",
|
|
33
|
+
"docs/behavioral-contracts.md",
|
|
34
|
+
"docs/use-cases.md",
|
|
35
|
+
"docs/PRD.md",
|
|
36
|
+
];
|
|
37
|
+
// ── Template ─────────────────────────────────────────────────────────
|
|
38
|
+
function buildMonitoringSpec(projectName, nfrContent, behavioralContent) {
|
|
39
|
+
const date = new Date().toISOString().slice(0, 10);
|
|
40
|
+
const nfrSection = nfrContent ? extractNfrExceptionClasses(nfrContent) : null;
|
|
41
|
+
return `# Monitoring Specification — ${projectName}
|
|
42
|
+
<!-- Generated by forgecraft setup_monitoring on ${date} -->
|
|
43
|
+
<!-- This document is the T4 production contract. -->
|
|
44
|
+
<!-- forgecraft-eye evaluates runtime signals against these definitions. -->
|
|
45
|
+
<!-- DO NOT state thresholds as "when errors are high" — use exact numeric criteria. -->
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 1. Exception Classes
|
|
50
|
+
|
|
51
|
+
Exception classes that signal specification drift. Only exceptions listed here
|
|
52
|
+
trigger T4 diagnostic evaluation — not all exceptions, not error volume.
|
|
53
|
+
|
|
54
|
+
| Exception Class | Severity | GS Property Violated | Spec Location | Chronicle Tag |
|
|
55
|
+
|---|---|---|---|---|
|
|
56
|
+
${nfrSection?.exceptionRows ?? "| TODO_ExceptionClass | critical | Verifiable | docs/behavioral-contracts.md#TODO | t4-signal |"}
|
|
57
|
+
|
|
58
|
+
**Instructions:** For each exception class:
|
|
59
|
+
1. State the fully-qualified class name (e.g., \`PaymentRetryExhaustedException\`)
|
|
60
|
+
2. Assign severity: \`critical\` (T4 immediate), \`warning\` (T4 batched), \`info\` (T4 aggregate)
|
|
61
|
+
3. Map to the GS property it violates: Verifiable, Auditable, Defended, Composable, etc.
|
|
62
|
+
4. Reference the exact use case postcondition or invariant in the spec
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 2. Alert Thresholds
|
|
67
|
+
|
|
68
|
+
SLO alert definitions with exact numeric criteria. Thresholds stated as
|
|
69
|
+
"when errors are high" are invalid — the diagnostic agent cannot act on them.
|
|
70
|
+
|
|
71
|
+
| Alert Name | Metric | Condition | Duration | Severity | NFR Source |
|
|
72
|
+
|---|---|---|---|---|---|
|
|
73
|
+
${nfrSection?.alertRows ?? "| error_rate_high | http_request_errors_total / http_requests_total | > 0.005 | 5m | page | NFR-TODO |"}
|
|
74
|
+
|
|
75
|
+
**Instructions:** Every threshold must be:
|
|
76
|
+
- Numeric (exact value, not "high" or "low")
|
|
77
|
+
- Time-bounded (window: 1m, 5m, 15m, 1h)
|
|
78
|
+
- Tied to an NFR contract identifier (NFR-01, NFR-02, etc.)
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 3. SLO Definitions
|
|
83
|
+
|
|
84
|
+
PromQL (or equivalent) queries for each service-level objective.
|
|
85
|
+
|
|
86
|
+
\`\`\`yaml
|
|
87
|
+
# Service: TODO_service_name
|
|
88
|
+
# NFR source: docs/nfr-contracts.md#TODO
|
|
89
|
+
slos:
|
|
90
|
+
- id: availability
|
|
91
|
+
query: "sum(rate(http_requests_total{job=\"TODO\",code!~\"5..\"}[5m])) / sum(rate(http_requests_total{job=\"TODO\"}[5m]))"
|
|
92
|
+
threshold: 0.999
|
|
93
|
+
operator: ">="
|
|
94
|
+
window: "30d"
|
|
95
|
+
alert_name: TODO_AvailabilityBreach
|
|
96
|
+
|
|
97
|
+
- id: p95_latency
|
|
98
|
+
query: "histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket{job=\"TODO\"}[5m])) by (le))"
|
|
99
|
+
threshold: 0.5
|
|
100
|
+
operator: "<="
|
|
101
|
+
window: "1h"
|
|
102
|
+
alert_name: TODO_LatencyBreach
|
|
103
|
+
\`\`\`
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 4. Correlation ID Schema
|
|
108
|
+
|
|
109
|
+
How requests are traced end-to-end through the system. Required for T4 diagnosis
|
|
110
|
+
to correlate an exception with its originating request context.
|
|
111
|
+
|
|
112
|
+
\`\`\`
|
|
113
|
+
Header: X-Correlation-ID
|
|
114
|
+
Format: UUID v4
|
|
115
|
+
Propagation: all outbound service calls, all log entries, all exception payloads
|
|
116
|
+
Example: X-Correlation-ID: 550e8400-e29b-41d4-a716-446655440000
|
|
117
|
+
\`\`\`
|
|
118
|
+
|
|
119
|
+
**Log format requirement:**
|
|
120
|
+
\`\`\`json
|
|
121
|
+
{
|
|
122
|
+
"timestamp": "ISO-8601",
|
|
123
|
+
"level": "ERROR|WARN|INFO",
|
|
124
|
+
"correlation_id": "UUID",
|
|
125
|
+
"service": "service-name",
|
|
126
|
+
"exception_class": "FullyQualifiedExceptionClass",
|
|
127
|
+
"message": "human-readable description",
|
|
128
|
+
"spec_ref": "docs/behavioral-contracts.md#use-case-id"
|
|
129
|
+
}
|
|
130
|
+
\`\`\`
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## 5. PII Redaction Policy
|
|
135
|
+
|
|
136
|
+
What must never appear in logs or exception payloads.
|
|
137
|
+
|
|
138
|
+
| Field Category | Examples | Action |
|
|
139
|
+
|---|---|---|
|
|
140
|
+
| Identity | email, full_name, national_id | Redact — replace with \`[REDACTED]\` |
|
|
141
|
+
| Authentication | password, token, API key | Never log |
|
|
142
|
+
| Financial | card number, account number | Mask — last 4 digits only |
|
|
143
|
+
| Medical | diagnosis, prescription | Redact |
|
|
144
|
+
| Location | GPS coordinates, IP address | Anonymize — country-level only |
|
|
145
|
+
|
|
146
|
+
**Implementation:** Redaction must happen at the logging layer, not downstream.
|
|
147
|
+
If a field appears unredacted in a log entry, it is a Defended property violation.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## 6. Property Violation Mapping
|
|
152
|
+
|
|
153
|
+
Maps production signals to the GS properties they violate. Used by forgecraft-eye
|
|
154
|
+
to classify diagnoses before writing to Chronicle.
|
|
155
|
+
|
|
156
|
+
| Exception Pattern | GS Property | Diagnosis Template |
|
|
157
|
+
|---|---|---|
|
|
158
|
+
| \`*RetryExhausted*\` | Verifiable | "Retry contract does not cover [exception context]. Update use case postcondition." |
|
|
159
|
+
| \`*AuthorizationFailed*\` | Defended | "Authorization invariant violated at [endpoint]. Verify boundary guard in spec." |
|
|
160
|
+
| \`*ValidationException*\` | Verifiable | "Input contract incomplete — [field] not covered by precondition." |
|
|
161
|
+
| \`*TimeoutException*\` | Verifiable | "Timeout contract missing for [service call]. Add NFR SLO threshold." |
|
|
162
|
+
| \`*NullPointer*\` \| \`*undefined*\` | Verifiable | "Null postcondition not stated — [component] assumes non-null without contract." |
|
|
163
|
+
| \`*SchemaValidation*\` | Self-describing | "Schema contract outdated — regenerate from current spec." |
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## 7. T4 Signal Queue
|
|
168
|
+
|
|
169
|
+
forgecraft-eye writes signals to \`.forgecraft/t4-signals.json\`.
|
|
170
|
+
Run \`forgecraft check_t4\` at session start to surface pending spec updates.
|
|
171
|
+
|
|
172
|
+
\`\`\`json
|
|
173
|
+
{
|
|
174
|
+
"signals": [
|
|
175
|
+
{
|
|
176
|
+
"id": "sig-YYYYMMDD-HHMMSS-001",
|
|
177
|
+
"timestamp": "ISO-8601",
|
|
178
|
+
"exception_class": "FullyQualifiedExceptionClass",
|
|
179
|
+
"severity": "critical|warning|info",
|
|
180
|
+
"gs_property": "Verifiable|Auditable|Defended|Composable|Executable|Self-describing|Bounded",
|
|
181
|
+
"spec_ref": "docs/behavioral-contracts.md#use-case-id",
|
|
182
|
+
"diagnosis": "Human-readable diagnosis text",
|
|
183
|
+
"suggested_update": "Specific spec change recommendation",
|
|
184
|
+
"status": "pending|acknowledged|resolved",
|
|
185
|
+
"correlation_id": "UUID of originating request"
|
|
186
|
+
}
|
|
187
|
+
]
|
|
188
|
+
}
|
|
189
|
+
\`\`\`
|
|
190
|
+
|
|
191
|
+
${behavioralContent ? "## 8. Source NFR Contracts\n\nExtracted from docs/nfr-contracts.md. Review for completeness.\n\n" + formatNfrSummary(behavioralContent) : ""}
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
*Generated by ForgeCraft T4 setup. Reviewed and extended by practitioner.*
|
|
195
|
+
*forgecraft-eye config: see \`.forgecraft/eye-config.yaml\`*
|
|
196
|
+
`;
|
|
197
|
+
}
|
|
198
|
+
// ── NFR extraction helpers ────────────────────────────────────────────
|
|
199
|
+
function extractNfrExceptionClasses(nfrContent) {
|
|
200
|
+
const lines = nfrContent.split("\n");
|
|
201
|
+
// Look for existing exception class mentions
|
|
202
|
+
const exceptionLines = lines.filter((l) => l.toLowerCase().includes("exception") ||
|
|
203
|
+
l.toLowerCase().includes("error class") ||
|
|
204
|
+
l.toLowerCase().includes("failure mode"));
|
|
205
|
+
// Look for threshold mentions
|
|
206
|
+
const thresholdLines = lines.filter((l) => l.toLowerCase().includes("threshold") ||
|
|
207
|
+
l.toLowerCase().includes("slo") ||
|
|
208
|
+
l.toLowerCase().includes("availability") ||
|
|
209
|
+
l.toLowerCase().includes("latency") ||
|
|
210
|
+
(l.toLowerCase().includes("error") && l.match(/\d+%|\d+ms/)));
|
|
211
|
+
const exceptionRows = exceptionLines.length > 0
|
|
212
|
+
? exceptionLines
|
|
213
|
+
.slice(0, 5)
|
|
214
|
+
.map((l) => `| \`${l.trim().replace(/[|]/g, "\\|")}\` | critical | Verifiable | docs/behavioral-contracts.md#TODO | t4-signal |`)
|
|
215
|
+
.join("\n")
|
|
216
|
+
: "| TODO_ExceptionClass | critical | Verifiable | docs/behavioral-contracts.md#TODO | t4-signal |";
|
|
217
|
+
const alertRows = thresholdLines.length > 0
|
|
218
|
+
? thresholdLines
|
|
219
|
+
.slice(0, 3)
|
|
220
|
+
.map((l) => `| TODO_Alert | ${l.trim().replace(/[|]/g, "\\|")} | TODO_duration | warning | NFR-TODO |`)
|
|
221
|
+
.join("\n")
|
|
222
|
+
: "| error_rate_high | http_request_errors_total / http_requests_total | > 0.005 | 5m | page | NFR-TODO |";
|
|
223
|
+
return { exceptionRows, alertRows };
|
|
224
|
+
}
|
|
225
|
+
function formatNfrSummary(content) {
|
|
226
|
+
const lines = content.split("\n");
|
|
227
|
+
const relevant = lines
|
|
228
|
+
.filter((l) => l.startsWith("#") ||
|
|
229
|
+
l.toLowerCase().includes("nfr") ||
|
|
230
|
+
l.toLowerCase().includes("slo") ||
|
|
231
|
+
l.toLowerCase().includes("threshold"))
|
|
232
|
+
.slice(0, 20);
|
|
233
|
+
return (relevant.join("\n") + "\n\n*[See full file for complete NFR contracts]*\n");
|
|
234
|
+
}
|
|
235
|
+
// ── Eye config scaffold ──────────────────────────────────────────────
|
|
236
|
+
/**
|
|
237
|
+
* Write `.forgecraft/eye-config.yaml` with sensible defaults if absent.
|
|
238
|
+
* Mirrors the shape of `EyeConfig` in forgecraft-eye without importing it.
|
|
239
|
+
*
|
|
240
|
+
* @param projectDir - Absolute path to the project root.
|
|
241
|
+
* @param projectName - Display name used for the CloudWatch log group slug.
|
|
242
|
+
* @returns `true` if the file was created, `false` if it already existed or errored.
|
|
243
|
+
*/
|
|
244
|
+
export function scaffoldEyeConfig(projectDir, projectName) {
|
|
245
|
+
const configPath = join(projectDir, ".forgecraft", "eye-config.yaml");
|
|
246
|
+
if (existsSync(configPath))
|
|
247
|
+
return false;
|
|
248
|
+
const slug = projectName.toLowerCase().replace(/\s+/g, "-");
|
|
249
|
+
const yaml = [
|
|
250
|
+
`# forgecraft-eye configuration — generated by forgecraft setup_monitoring`,
|
|
251
|
+
`# See: https://github.com/jghiringhelli/forgecraft-eye`,
|
|
252
|
+
``,
|
|
253
|
+
`project_name: "${projectName}"`,
|
|
254
|
+
`project_dir: "${projectDir}"`,
|
|
255
|
+
`monitoring_spec_path: docs/monitoring-spec.md`,
|
|
256
|
+
`signal_queue_path: .forgecraft/t4-signals.json`,
|
|
257
|
+
`environment: production`,
|
|
258
|
+
`log_adapter: stdin # options: stdin | cloudwatch`,
|
|
259
|
+
``,
|
|
260
|
+
`# CloudWatch adapter — uncomment and set log_adapter: cloudwatch`,
|
|
261
|
+
`# cloudwatch:`,
|
|
262
|
+
`# log_group_name: /aws/lambda/${slug}`,
|
|
263
|
+
`# region: us-east-1`,
|
|
264
|
+
`# filter_pattern: "?ERROR ?WARN ?Exception"`,
|
|
265
|
+
].join("\n");
|
|
266
|
+
try {
|
|
267
|
+
mkdirSync(join(projectDir, ".forgecraft"), { recursive: true });
|
|
268
|
+
writeFileSync(configPath, yaml, "utf-8");
|
|
269
|
+
return true;
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
return false;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// ── Handler ───────────────────────────────────────────────────────────
|
|
276
|
+
export async function setupMonitoringHandler(args) {
|
|
277
|
+
const projectDir = resolve(args.project_dir);
|
|
278
|
+
const force = args.force ?? false;
|
|
279
|
+
const projectName = args.project_name ?? projectDir.split(/[\\/]/).pop() ?? "Project";
|
|
280
|
+
const outputPath = join(projectDir, "docs", "monitoring-spec.md");
|
|
281
|
+
if (existsSync(outputPath) && !force) {
|
|
282
|
+
return {
|
|
283
|
+
content: [
|
|
284
|
+
{
|
|
285
|
+
type: "text",
|
|
286
|
+
text: [
|
|
287
|
+
"## Monitoring Spec Already Exists",
|
|
288
|
+
"",
|
|
289
|
+
`\`docs/monitoring-spec.md\` already exists at ${outputPath}.`,
|
|
290
|
+
"Pass \`force: true\` to regenerate.",
|
|
291
|
+
"",
|
|
292
|
+
"Run \`forgecraft check_t4\` to surface pending T4 signals.",
|
|
293
|
+
].join("\n"),
|
|
294
|
+
},
|
|
295
|
+
],
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
// Read available source docs
|
|
299
|
+
let nfrContent = null;
|
|
300
|
+
let behavioralContent = null;
|
|
301
|
+
const sourcesRead = [];
|
|
302
|
+
for (const docPath of SOURCE_DOCS) {
|
|
303
|
+
const fullPath = join(projectDir, docPath);
|
|
304
|
+
if (existsSync(fullPath)) {
|
|
305
|
+
try {
|
|
306
|
+
const content = readFileSync(fullPath, "utf-8");
|
|
307
|
+
if (docPath.includes("nfr")) {
|
|
308
|
+
nfrContent = content;
|
|
309
|
+
sourcesRead.push(docPath);
|
|
310
|
+
}
|
|
311
|
+
else if (docPath.includes("behavioral")) {
|
|
312
|
+
behavioralContent = content;
|
|
313
|
+
sourcesRead.push(docPath);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
catch {
|
|
317
|
+
/* non-fatal — continue with template */
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
// Ensure docs/ exists
|
|
322
|
+
try {
|
|
323
|
+
mkdirSync(join(projectDir, "docs"), { recursive: true });
|
|
324
|
+
}
|
|
325
|
+
catch {
|
|
326
|
+
/* already exists */
|
|
327
|
+
}
|
|
328
|
+
const spec = buildMonitoringSpec(projectName, nfrContent, behavioralContent);
|
|
329
|
+
try {
|
|
330
|
+
writeFileSync(outputPath, spec, "utf-8");
|
|
331
|
+
}
|
|
332
|
+
catch (err) {
|
|
333
|
+
return {
|
|
334
|
+
content: [
|
|
335
|
+
{
|
|
336
|
+
type: "text",
|
|
337
|
+
text: `Error writing monitoring-spec.md: ${String(err)}`,
|
|
338
|
+
},
|
|
339
|
+
],
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
const eyeConfigCreated = scaffoldEyeConfig(projectDir, projectName);
|
|
343
|
+
const lines = [
|
|
344
|
+
"## Monitoring Spec Generated",
|
|
345
|
+
"",
|
|
346
|
+
`Generated: \`docs/monitoring-spec.md\``,
|
|
347
|
+
...(eyeConfigCreated
|
|
348
|
+
? [
|
|
349
|
+
"Generated: `.forgecraft/eye-config.yaml` (forgecraft-eye adapter config)",
|
|
350
|
+
]
|
|
351
|
+
: []),
|
|
352
|
+
"",
|
|
353
|
+
];
|
|
354
|
+
if (sourcesRead.length > 0) {
|
|
355
|
+
lines.push(`Sources read: ${sourcesRead.map((s) => `\`${s}\``).join(", ")}`);
|
|
356
|
+
lines.push("");
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
lines.push("⚠️ No NFR contracts found — spec generated from template.", "Add `docs/nfr-contracts.md` and re-run for project-specific thresholds.", "");
|
|
360
|
+
}
|
|
361
|
+
lines.push("## Required Next Steps", "", "The generated spec contains TODO placeholders. Before T4 is operational:", "", "1. **Fill exception classes** (Section 1) — list the specific exception classes", " that indicate specification drift in your system. Map each to the GS property", " it violates and the spec location that governs it.", "", "2. **State exact thresholds** (Section 2) — replace all TODO_threshold values", " with numeric criteria. 'When errors are high' is not a valid threshold.", "", "3. **Add SLO queries** (Section 3) — replace TODO PromQL queries with actual", " metric names from your observability stack.", "", "4. **Install forgecraft-eye** — the T4 diagnostic agent that evaluates production logs", " against your monitoring spec and writes signals to the queue.", " ```bash", " npm install forgecraft-eye", " # Pipe logs in production:", " my-service 2>&1 | npx forgecraft-eye", " # Or invoke programmatically:", " # import { runEyeFromConfig } from 'forgecraft-eye';", " # await runEyeFromConfig(projectDir);", " ```", " npm: https://www.npmjs.com/package/forgecraft-eye", " Source: https://github.com/jghiringhelli/forgecraft-eye", "", "5. **Run `forgecraft check_t4`** at the start of each session to surface", " pending T4 signals from the production queue.", "", "## T4 Architecture Summary", "", "```", "Production exception fires", " → forgecraft-eye evaluates against monitoring-spec.md", " → writes to .forgecraft/t4-signals.json", " → next session: forgecraft check_t4 surfaces pending signals", " → practitioner approves spec update", " → AI derives fix from updated specification", " → T2 verifies, T3 deploys", "```");
|
|
362
|
+
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
363
|
+
}
|
|
364
|
+
//# sourceMappingURL=setup-monitoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-monitoring.js","sourceRoot":"","sources":["../../src/tools/setup-monitoring.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-formatter.d.ts","sourceRoot":"","sources":["../../src/tools/verify-formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,oBAAoB,CAAC;AAExE;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"verify-formatter.d.ts","sourceRoot":"","sources":["../../src/tools/verify-formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,oBAAoB,CAAC;AAExE;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAuG5E"}
|
|
@@ -11,8 +11,11 @@
|
|
|
11
11
|
export function formatReport(result, threshold) {
|
|
12
12
|
const lines = [];
|
|
13
13
|
const badge = result.overallPass ? "✅ PASS" : "❌ FAIL";
|
|
14
|
+
const tierBadge = `Tier ${result.maturityTier.tier} — ${result.maturityTier.name}`;
|
|
14
15
|
lines.push(`# ForgeCraft Verify — ${badge}`);
|
|
15
16
|
lines.push("");
|
|
17
|
+
lines.push(`**GS Maturity: ${tierBadge}** · ${result.maturityTier.description}`);
|
|
18
|
+
lines.push("");
|
|
16
19
|
// Test suite section
|
|
17
20
|
lines.push("## Test Suite");
|
|
18
21
|
const testBadge = result.testSuite.passed ? "✅ PASS" : "❌ FAIL";
|
|
@@ -72,10 +75,21 @@ export function formatReport(result, threshold) {
|
|
|
72
75
|
}
|
|
73
76
|
}
|
|
74
77
|
lines.push("");
|
|
78
|
+
// Tier progression
|
|
79
|
+
const nextTierThreshold = [4, 7, 11, 14, 14];
|
|
80
|
+
const currentTier = result.maturityTier.tier;
|
|
81
|
+
if (currentTier < 5) {
|
|
82
|
+
const next = nextTierThreshold[currentTier - 1];
|
|
83
|
+
const gap = next - result.totalScore;
|
|
84
|
+
const nextNames = ["Grounded", "Specified", "Verified", "Orchestrated"];
|
|
85
|
+
lines.push(`## GS Maturity Progression`);
|
|
86
|
+
lines.push(`Current: **Tier ${currentTier} — ${result.maturityTier.name}** · ${gap} point(s) to Tier ${currentTier + 1} — ${nextNames[currentTier - 1]}`);
|
|
87
|
+
lines.push("");
|
|
88
|
+
}
|
|
75
89
|
// Summary
|
|
76
90
|
lines.push("---");
|
|
77
91
|
const maxScoreSummary = result.propertyScores.length * 2;
|
|
78
|
-
lines.push(`**Overall: ${result.overallPass ? "✅ PASS" : "❌ FAIL"}** · Score ${result.totalScore}/${maxScoreSummary} · Threshold ${threshold}/${maxScoreSummary}
|
|
92
|
+
lines.push(`**Overall: ${result.overallPass ? "✅ PASS" : "❌ FAIL"}** · Score ${result.totalScore}/${maxScoreSummary} · Threshold ${threshold}/${maxScoreSummary} · **Tier ${currentTier} — ${result.maturityTier.name}**`);
|
|
79
93
|
return lines.join("\n");
|
|
80
94
|
}
|
|
81
95
|
/** Return emoji for a 0–2 score. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-formatter.js","sourceRoot":"","sources":["../../src/tools/verify-formatter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"verify-formatter.js","sourceRoot":"","sources":["../../src/tools/verify-formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/tools/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/tools/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;EA4BvB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAIvD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAkC7D"}
|