codeloop-mcp-server 0.1.51 → 0.1.53
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/dist/auth/critical_floors.d.ts.map +1 -1
- package/dist/auth/critical_floors.js +8 -0
- package/dist/auth/critical_floors.js.map +1 -1
- package/dist/auth/update_check.d.ts.map +1 -1
- package/dist/auth/update_check.js +19 -1
- package/dist/auth/update_check.js.map +1 -1
- package/dist/evidence/anti_rationalisation.d.ts +34 -0
- package/dist/evidence/anti_rationalisation.d.ts.map +1 -0
- package/dist/evidence/anti_rationalisation.js +85 -0
- package/dist/evidence/anti_rationalisation.js.map +1 -0
- package/dist/evidence/change_coverage.d.ts +59 -0
- package/dist/evidence/change_coverage.d.ts.map +1 -0
- package/dist/evidence/change_coverage.js +422 -0
- package/dist/evidence/change_coverage.js.map +1 -0
- package/dist/evidence/change_manifest.d.ts +94 -0
- package/dist/evidence/change_manifest.d.ts.map +1 -0
- package/dist/evidence/change_manifest.js +830 -0
- package/dist/evidence/change_manifest.js.map +1 -0
- package/dist/evidence/evidence_freshness.d.ts +39 -0
- package/dist/evidence/evidence_freshness.d.ts.map +1 -0
- package/dist/evidence/evidence_freshness.js +231 -0
- package/dist/evidence/evidence_freshness.js.map +1 -0
- package/dist/evidence/screenshot_diff.d.ts.map +1 -1
- package/dist/evidence/screenshot_diff.js +30 -12
- package/dist/evidence/screenshot_diff.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +123 -3
- package/dist/index.js.map +1 -1
- package/dist/runners/empty_state_detector.d.ts +33 -0
- package/dist/runners/empty_state_detector.d.ts.map +1 -0
- package/dist/runners/empty_state_detector.js +304 -0
- package/dist/runners/empty_state_detector.js.map +1 -0
- package/dist/tools/c7_slug.d.ts +14 -0
- package/dist/tools/c7_slug.d.ts.map +1 -0
- package/dist/tools/c7_slug.js +21 -0
- package/dist/tools/c7_slug.js.map +1 -0
- package/dist/tools/design_compare.d.ts.map +1 -1
- package/dist/tools/design_compare.js +22 -3
- package/dist/tools/design_compare.js.map +1 -1
- package/dist/tools/gate_check.d.ts.map +1 -1
- package/dist/tools/gate_check.js +159 -14
- package/dist/tools/gate_check.js.map +1 -1
- package/dist/tools/plan_change_journey.d.ts +41 -0
- package/dist/tools/plan_change_journey.d.ts.map +1 -0
- package/dist/tools/plan_change_journey.js +131 -0
- package/dist/tools/plan_change_journey.js.map +1 -0
- package/dist/tools/verify.d.ts.map +1 -1
- package/dist/tools/verify.js +113 -1
- package/dist/tools/verify.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"critical_floors.d.ts","sourceRoot":"","sources":["../../src/auth/critical_floors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"critical_floors.d.ts","sourceRoot":"","sources":["../../src/auth/critical_floors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe,EAAE,aAAa,EAuC1C,CAAC"}
|
|
@@ -64,5 +64,13 @@ export const CRITICAL_FLOORS = [
|
|
|
64
64
|
min_version: "0.1.51",
|
|
65
65
|
reason: "Full auto-loop + modal handling — pre-0.1.51 builds let the agent silently skip codeloop_verify between edits (no post-edit hooks, no staleness directive in tool responses), only ran ONE platform stack on multi-stack monorepos (.NET backend + React frontend / Django + Next.js / Tauri all silently skipped half the codebase), had no Python or Rust verify runners, didn't fire withInitHint on visual_review / design_compare / interaction_replay / generate_dev_report (so fresh workspaces could complete a full visual cycle without ever calling codeloop_init_project), spun the auto-fix loop forever with no server-side iteration cap (no escalate at 15 gate / 8 diagnose attempts), didn't auto-run Maestro flows in verify, and IGNORED MODALS during recording — every Save / Confirm-delete / EULA / browser beforeunload prompt was clicked-through-or-skipped, blocking the rest of the user_journey arc and silently dragging gate confidence down. 0.1.51 closes all of these and adds codeloop_capture_all_screens + codeloop_handle_modal so the loop is finally hands-off.",
|
|
66
66
|
},
|
|
67
|
+
{
|
|
68
|
+
min_version: "0.1.52",
|
|
69
|
+
reason: "Change-aware verification — pre-0.1.52 builds were CHANGE-BLIND: the auto-fix loop happily reached 100% confidence on a recording session that NEVER exercised the new feature the user just added. The Photometry-DB E2E #9 transcript shipped a new Product Code DataGrid column, a new buttons-below-title layout, a new ProductCode property, and an EF migration column — and the gate passed with 11/11 green having only run a 5-click navigation tour on an empty database. 0.1.52 ships C1 (per-run change_manifest.json built from the git diff vs the last verified SHA + uncommitted/untracked files, with feature-shape parsers for XAML / HTML / JSX / C# / TS / Dart / Swift / Kt / EF migrations / SQL DDL plus structural-layout delta detection), C2 (codeloop_plan_change_journey emits a per-manifest-entry interaction script with a HARD seed-first preamble), C3 (change_coverage_evidence blocker gate at 1.0 threshold cross-references the manifest against interaction log + screenshots + replay frames + build/runtime logs), C4 (empty-state seeding enforcement — codeloop_interact appends a HARD directive when the agent targets a row/cell with no prior commit/seed action), C5 (verify cross-checks tasks_completed claims against the manifest and surfaces orphan claims as warnings), C6 (anti-rationalisation directive in gate_check continue_fixing block + recent_thinking phrase scan that surfaces 'comprehensive verification confirms' / 'further interaction would be redundant' style stalls), and C7 (target_change_entry on codeloop_interact + codeloop_capture_screenshot anchors evidence to manifest entries via a deterministic --c7-<slug> filename suffix the C3 gate matches without fuzzy logic).",
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
min_version: "0.1.53",
|
|
73
|
+
reason: "Stale-evidence rejection + decoder + skip-reason fixes — pre-0.1.53 builds shipped at 100% confidence on a SIBLING-RUN recording from before the source-code change. Photometry-DB E2E #10 added Product Name + Product Code columns to the Luminaire export pipeline, never re-recorded after the edit, and the gate accepted a 28-min-old video + 440-action interaction log + full CRUD arc — all from a sibling run that pre-dated the diff. 0.1.53 ships D1 (cli + mcp-server pin @codelooptech/shared >= 0.1.22 so npx never resolves to a shared version that's missing rules-version.js, fixing the codeloop doctor ERR_MODULE_NOT_FOUND on Windows), D2 (gate_check anchors video / interaction_depth / user_journey / replay-frame evidence against the newest source-file mtime — sibling-run evidence captured BEFORE the latest edit fails as STALE with a Re-record directive, closing the change-blind loophole that 0.1.52's manifest gate couldn't help with when an MCP server still ran 0.1.51), D3 (PNG decoder gains a third-stage `checkCRC: false` retry so Windows-saved PNGs with mis-computed chunk CRCs decode without forcing the user to PowerShell `[System.Drawing.Bitmap]::Save` 18 design references by hand), D4 (update_check polls every 15 min instead of every hour and lazily kicks a fetch when the cache is stale, so a critical update lands within an in-progress agent session instead of after the next IDE restart), and D5 (design_compare gate disambiguates 'reference PNG genuinely corrupt' from 'no actual screenshot captured for this reference' — the dominant root cause is surfaced first so the agent calls codeloop_capture_screenshot for the missing names instead of going on a 30-min re-encode hunt).",
|
|
74
|
+
},
|
|
67
75
|
];
|
|
68
76
|
//# sourceMappingURL=critical_floors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"critical_floors.js","sourceRoot":"","sources":["../../src/auth/critical_floors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AASH;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C;QACE,WAAW,EAAE,QAAQ;QACrB,MAAM,EACJ,ufAAuf;KAC1f;IACD;QACE,WAAW,EAAE,QAAQ;QACrB,MAAM,EAAE,4hBAA4hB;KACriB;IACD;QACE,WAAW,EAAE,QAAQ;QACrB,MAAM,EAAE,yvBAAyvB;KAClwB;IACD;QACE,WAAW,EAAE,QAAQ;QACrB,MAAM,EACJ,kxBAAkxB;KACrxB;IACD;QACE,WAAW,EAAE,QAAQ;QACrB,MAAM,EACJ,0/BAA0/B;KAC7/B;IACD;QACE,WAAW,EAAE,QAAQ;QACrB,MAAM,EACJ,0iCAA0iC;KAC7iC;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"critical_floors.js","sourceRoot":"","sources":["../../src/auth/critical_floors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AASH;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C;QACE,WAAW,EAAE,QAAQ;QACrB,MAAM,EACJ,ufAAuf;KAC1f;IACD;QACE,WAAW,EAAE,QAAQ;QACrB,MAAM,EAAE,4hBAA4hB;KACriB;IACD;QACE,WAAW,EAAE,QAAQ;QACrB,MAAM,EAAE,yvBAAyvB;KAClwB;IACD;QACE,WAAW,EAAE,QAAQ;QACrB,MAAM,EACJ,kxBAAkxB;KACrxB;IACD;QACE,WAAW,EAAE,QAAQ;QACrB,MAAM,EACJ,0/BAA0/B;KAC7/B;IACD;QACE,WAAW,EAAE,QAAQ;QACrB,MAAM,EACJ,0iCAA0iC;KAC7iC;IACD;QACE,WAAW,EAAE,QAAQ;QACrB,MAAM,EACJ,gqDAAgqD;KACnqD;IACD;QACE,WAAW,EAAE,QAAQ;QACrB,MAAM,EACJ,uqDAAuqD;KAC1qD;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update_check.d.ts","sourceRoot":"","sources":["../../src/auth/update_check.ts"],"names":[],"mappings":"AA0CA,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"update_check.d.ts","sourceRoot":"","sources":["../../src/auth/update_check.ts"],"names":[],"mappings":"AA0CA,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAW3E,MAAM,WAAW,UAAU;IACzB,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,WAAW,EAAE,OAAO,CAAC;IACrB,qEAAqE;IACrE,WAAW,EAAE,OAAO,CAAC;IACrB,sEAAsE;IACtE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;CACpB;AAKD;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAEjD;AA+CD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAY1D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,aAAa,EAAoB,GAAG,aAAa,EAAE,CAElH;AA0BD;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAmBpE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,IAAI,UAAU,GAAG,IAAI,CAejD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,UAAU,GAAG,IAAa,GAAG,MAAM,GAAG,IAAI,CAkBlF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAYvC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAMrC"}
|
|
@@ -43,7 +43,12 @@ import { fileURLToPath } from "node:url";
|
|
|
43
43
|
import { CRITICAL_FLOORS } from "./critical_floors.js";
|
|
44
44
|
const NPM_REGISTRY_URL = "https://registry.npmjs.org/codeloop-mcp-server/latest";
|
|
45
45
|
const FETCH_TIMEOUT_MS = 5_000;
|
|
46
|
-
|
|
46
|
+
// 0.1.53 D4 — Reduced from 1 hour to 15 min so a critical update lands
|
|
47
|
+
// within an in-progress agent session instead of waiting until the next
|
|
48
|
+
// IDE restart. Photometry-DB E2E #10 ran change-blind on a 0.1.51 server
|
|
49
|
+
// for ~30 min after 0.1.52 published; with this interval the next fetch
|
|
50
|
+
// would have caught it inside the same recording session.
|
|
51
|
+
const REFRESH_MS = 15 * 60 * 1_000;
|
|
47
52
|
let cached = null;
|
|
48
53
|
let refreshTimer = null;
|
|
49
54
|
/**
|
|
@@ -191,6 +196,19 @@ export async function refreshUpdateInfo() {
|
|
|
191
196
|
* adds no notice and tool responses look unchanged.
|
|
192
197
|
*/
|
|
193
198
|
export function getUpdateInfo() {
|
|
199
|
+
// 0.1.53 D4 — Kick a background fetch when the cache is missing or
|
|
200
|
+
// older than REFRESH_MS. Fire-and-forget so the current tool response
|
|
201
|
+
// isn't blocked, but the NEXT response will see the freshly-fetched
|
|
202
|
+
// info. Combined with the reduced REFRESH_MS this means a critical
|
|
203
|
+
// update lands in-session within a few tool calls instead of after
|
|
204
|
+
// the next IDE restart.
|
|
205
|
+
if (!isOptedOut()) {
|
|
206
|
+
const now = Date.now();
|
|
207
|
+
const ageMs = cached ? now - cached.checked_at : Infinity;
|
|
208
|
+
if (ageMs > REFRESH_MS) {
|
|
209
|
+
void refreshUpdateInfo();
|
|
210
|
+
}
|
|
211
|
+
}
|
|
194
212
|
return cached;
|
|
195
213
|
}
|
|
196
214
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update_check.js","sourceRoot":"","sources":["../../src/auth/update_check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,eAAe,EAAsB,MAAM,sBAAsB,CAAC;AAE3E,MAAM,gBAAgB,GAAG,uDAAuD,CAAC;AACjF,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC
|
|
1
|
+
{"version":3,"file":"update_check.js","sourceRoot":"","sources":["../../src/auth/update_check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 0.1.52 C6 — Anti-rationalisation directive + recent_thinking scan.
|
|
3
|
+
*
|
|
4
|
+
* The Photometry-DB E2E #9 transcript ended at 100% confidence with the
|
|
5
|
+
* model narrating polite reasons not to keep iterating: "comprehensive
|
|
6
|
+
* verification confirms ready for production", "the new features are
|
|
7
|
+
* already implemented; further interaction would be redundant",
|
|
8
|
+
* "extensive UI exploration completed". Each phrase is a stand-in for
|
|
9
|
+
* "I will skip the change-aware verification step the C3 gate
|
|
10
|
+
* explicitly requires".
|
|
11
|
+
*
|
|
12
|
+
* This module ships the canonical FORBIDDEN list and a scanner that the
|
|
13
|
+
* gate_check tool can run over an optional `recent_thinking` payload
|
|
14
|
+
* supplied by the agent. When a forbidden phrase fires, the scanner
|
|
15
|
+
* surfaces the matched fragment so the gate's continue_fixing
|
|
16
|
+
* postscript can call out the rationalisation by name and force the
|
|
17
|
+
* agent to take a concrete next step instead of restating the excuse.
|
|
18
|
+
*/
|
|
19
|
+
export declare const C6_FORBIDDEN_PHRASES: Array<{
|
|
20
|
+
regex: RegExp;
|
|
21
|
+
reason: string;
|
|
22
|
+
}>;
|
|
23
|
+
export interface RationalisationHit {
|
|
24
|
+
matched_text: string;
|
|
25
|
+
reason: string;
|
|
26
|
+
}
|
|
27
|
+
export declare function scanRecentThinking(text: string | undefined | null): RationalisationHit[];
|
|
28
|
+
/**
|
|
29
|
+
* Renders the C6 anti-rationalisation directive lines for inclusion in
|
|
30
|
+
* the gate_check continue_fixing postscript. Pure formatting — the
|
|
31
|
+
* caller decides where to inject this in the larger directive block.
|
|
32
|
+
*/
|
|
33
|
+
export declare function buildAntiRationalisationDirective(hits: RationalisationHit[]): string;
|
|
34
|
+
//# sourceMappingURL=anti_rationalisation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anti_rationalisation.d.ts","sourceRoot":"","sources":["../../src/evidence/anti_rationalisation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA6BzE,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,kBAAkB,EAAE,CAQxF;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,kBAAkB,EAAE,GACzB,MAAM,CAyBR"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 0.1.52 C6 — Anti-rationalisation directive + recent_thinking scan.
|
|
3
|
+
*
|
|
4
|
+
* The Photometry-DB E2E #9 transcript ended at 100% confidence with the
|
|
5
|
+
* model narrating polite reasons not to keep iterating: "comprehensive
|
|
6
|
+
* verification confirms ready for production", "the new features are
|
|
7
|
+
* already implemented; further interaction would be redundant",
|
|
8
|
+
* "extensive UI exploration completed". Each phrase is a stand-in for
|
|
9
|
+
* "I will skip the change-aware verification step the C3 gate
|
|
10
|
+
* explicitly requires".
|
|
11
|
+
*
|
|
12
|
+
* This module ships the canonical FORBIDDEN list and a scanner that the
|
|
13
|
+
* gate_check tool can run over an optional `recent_thinking` payload
|
|
14
|
+
* supplied by the agent. When a forbidden phrase fires, the scanner
|
|
15
|
+
* surfaces the matched fragment so the gate's continue_fixing
|
|
16
|
+
* postscript can call out the rationalisation by name and force the
|
|
17
|
+
* agent to take a concrete next step instead of restating the excuse.
|
|
18
|
+
*/
|
|
19
|
+
export const C6_FORBIDDEN_PHRASES = [
|
|
20
|
+
{
|
|
21
|
+
regex: /\b(no need|already exercised|already covered) to (re-?test|re-?verify|re-?run)\b/i,
|
|
22
|
+
reason: "Claims existing evidence covers the new diff. The C3 gate measures coverage of the diff, not of the whole app — old evidence does not credit new entries.",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
regex: /\b(comprehensive|thorough|extensive|exhaustive)\s+(verification|coverage|testing|exploration)\s+(confirms|shows|demonstrates|already)\b/i,
|
|
26
|
+
reason: "Generic 'comprehensive verification' boilerplate. Cite the specific manifest entries you exercised, not the verb 'comprehensive'.",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
regex: /\bfurther\s+(interaction|testing|verification)\s+(would be|is)\s+(redundant|unnecessary|impractical|not (feasible|needed))\b/i,
|
|
30
|
+
reason: "Claims further interaction is unnecessary. The C3 gate disagrees — every unexercised manifest entry is a concrete next step.",
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
regex: /\b(implementation|feature|change)\s+(?:is|has been|already)\s+(?:complete|implemented|verified)\b.*\bno (specific|further) (?:user )?interaction\b/i,
|
|
34
|
+
reason: "Confuses 'feature implemented' with 'feature exercised in the recording'. The gate requires the latter.",
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
regex: /\bcode review (confirms|shows|verifies)\s+(the|new)?\s*(features?|changes?)\s+(are|is)\s+(working|correct|ready)\b/i,
|
|
38
|
+
reason: "Substitutes static code reading for the runtime UI exercise the gate requires.",
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
regex: /\b(declaring|marking|treating)\s+(the )?task\s+(complete|done|ready)\s+(despite|even though|regardless)\b/i,
|
|
42
|
+
reason: "Declares the task complete while admitting gates are failing. Don't.",
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
regex: /\bgrid (is )?empty\b.*\b(can'?t|cannot|unable to)\s+(test|verify|exercise)\b/i,
|
|
46
|
+
reason: "Empty grid is the C4 directive's exact case — seed data, then exercise. Do not skip the entry.",
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
export function scanRecentThinking(text) {
|
|
50
|
+
if (!text || typeof text !== "string")
|
|
51
|
+
return [];
|
|
52
|
+
const out = [];
|
|
53
|
+
for (const { regex, reason } of C6_FORBIDDEN_PHRASES) {
|
|
54
|
+
const m = regex.exec(text);
|
|
55
|
+
if (m)
|
|
56
|
+
out.push({ matched_text: m[0], reason });
|
|
57
|
+
}
|
|
58
|
+
return out;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Renders the C6 anti-rationalisation directive lines for inclusion in
|
|
62
|
+
* the gate_check continue_fixing postscript. Pure formatting — the
|
|
63
|
+
* caller decides where to inject this in the larger directive block.
|
|
64
|
+
*/
|
|
65
|
+
export function buildAntiRationalisationDirective(hits) {
|
|
66
|
+
const header = [
|
|
67
|
+
"[CodeLoop C6] ANTI-RATIONALISATION DIRECTIVE — your next message MUST NOT make any of these claims:",
|
|
68
|
+
" • 'Comprehensive verification confirms ready for production'",
|
|
69
|
+
" • 'Further interaction would be redundant / impractical'",
|
|
70
|
+
" • 'The features are already implemented; no specific user interaction needed'",
|
|
71
|
+
" • 'Code review confirms the new features are working' (without runtime exercise)",
|
|
72
|
+
" • 'The grid is empty; can't test the new column' (use C4: seed data first)",
|
|
73
|
+
" • 'No need to re-verify' / 'Already covered'",
|
|
74
|
+
"Each manifest entry the change_coverage_evidence gate flags as unexercised is a CONCRETE next step. Drive each one via codeloop_interact (NOT prose). If a step truly cannot be exercised by tools you have, call codeloop_escalate — do NOT rationalise around it.",
|
|
75
|
+
].join("\n");
|
|
76
|
+
if (hits.length === 0)
|
|
77
|
+
return header;
|
|
78
|
+
const hitLines = hits.map((h) => ` - matched "${h.matched_text}" — ${h.reason}`);
|
|
79
|
+
return (header +
|
|
80
|
+
"\n\n" +
|
|
81
|
+
`[CodeLoop C6] Detected ${hits.length} rationalisation phrase(s) in recent_thinking:\n` +
|
|
82
|
+
hitLines.join("\n") +
|
|
83
|
+
"\nRewrite without those phrases and execute the per-gate next steps above instead.");
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=anti_rationalisation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anti_rationalisation.js","sourceRoot":"","sources":["../../src/evidence/anti_rationalisation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAA6C;IAC5E;QACE,KAAK,EAAE,mFAAmF;QAC1F,MAAM,EAAE,2JAA2J;KACpK;IACD;QACE,KAAK,EAAE,0IAA0I;QACjJ,MAAM,EAAE,mIAAmI;KAC5I;IACD;QACE,KAAK,EAAE,+HAA+H;QACtI,MAAM,EAAE,8HAA8H;KACvI;IACD;QACE,KAAK,EAAE,qJAAqJ;QAC5J,MAAM,EAAE,yGAAyG;KAClH;IACD;QACE,KAAK,EAAE,qHAAqH;QAC5H,MAAM,EAAE,gFAAgF;KACzF;IACD;QACE,KAAK,EAAE,4GAA4G;QACnH,MAAM,EAAE,sEAAsE;KAC/E;IACD;QACE,KAAK,EAAE,+EAA+E;QACtF,MAAM,EAAE,gGAAgG;KACzG;CACF,CAAC;AAOF,MAAM,UAAU,kBAAkB,CAAC,IAA+B;IAChE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACjD,MAAM,GAAG,GAAyB,EAAE,CAAC;IACrC,KAAK,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,oBAAoB,EAAE,CAAC;QACrD,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iCAAiC,CAC/C,IAA0B;IAE1B,MAAM,MAAM,GAAG;QACb,qGAAqG;QACrG,gEAAgE;QAChE,4DAA4D;QAC5D,iFAAiF;QACjF,oFAAoF;QACpF,8EAA8E;QAC9E,gDAAgD;QAChD,qQAAqQ;KACtQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAErC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,CAAC,CAAC,EAAE,EAAE,CACJ,gBAAgB,CAAC,CAAC,YAAY,OAAO,CAAC,CAAC,MAAM,EAAE,CAClD,CAAC;IACF,OAAO,CACL,MAAM;QACN,MAAM;QACN,0BAA0B,IAAI,CAAC,MAAM,kDAAkD;QACvF,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QACnB,oFAAoF,CACrF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { type ChangeEntry, type ChangeManifest } from "./change_manifest.js";
|
|
2
|
+
/**
|
|
3
|
+
* 0.1.52 C3 — change_coverage_evidence gate.
|
|
4
|
+
*
|
|
5
|
+
* Cross-references the change manifest produced by C1 against the
|
|
6
|
+
* interaction_log.jsonl entries, captured screenshot filenames, and
|
|
7
|
+
* replay-frame analyses across every recent run. Every non-implicit
|
|
8
|
+
* manifest entry must have at least one "exercising event"; the
|
|
9
|
+
* default threshold is 1.0 (every entry exercised) but config can
|
|
10
|
+
* relax it.
|
|
11
|
+
*
|
|
12
|
+
* Implicit entries (currently `method_added`) don't need to be hit
|
|
13
|
+
* directly — they're considered exercised whenever the property they
|
|
14
|
+
* operate on is exercised. The reason: a feature-shaped method like
|
|
15
|
+
* `PropagateProductCodeAsync` runs as a side-effect of typing into the
|
|
16
|
+
* Product Code cell, so we'd otherwise demand an unsatisfiable
|
|
17
|
+
* "exercise the method by name" interaction.
|
|
18
|
+
*/
|
|
19
|
+
export interface ChangeCoverageConfig {
|
|
20
|
+
enabled: boolean;
|
|
21
|
+
/** Minimum fraction of manifest entries that must be exercised to pass. Default 1.0 (HARD 100%). */
|
|
22
|
+
threshold: number;
|
|
23
|
+
/** Manifest entry kinds to skip (configurable per-project for genuine pure refactors). */
|
|
24
|
+
skip_kinds: ChangeEntry["kind"][];
|
|
25
|
+
}
|
|
26
|
+
export declare const DEFAULT_CHANGE_COVERAGE_CONFIG: ChangeCoverageConfig;
|
|
27
|
+
export interface EntryStatus {
|
|
28
|
+
entry: ChangeEntry;
|
|
29
|
+
display_name: string;
|
|
30
|
+
exercised: boolean;
|
|
31
|
+
/** What evidence credited it. Empty when not exercised. */
|
|
32
|
+
evidence: string[];
|
|
33
|
+
/** True when the entry counts as "implicit" — passes when its sibling property is exercised. */
|
|
34
|
+
implicit: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface ChangeCoverageVerdict {
|
|
37
|
+
passed: boolean;
|
|
38
|
+
threshold: number;
|
|
39
|
+
manifest_run_id: string | null;
|
|
40
|
+
total_entries: number;
|
|
41
|
+
considered_entries: number;
|
|
42
|
+
exercised_entries: number;
|
|
43
|
+
/** entries the agent has not yet exercised. */
|
|
44
|
+
unexercised: EntryStatus[];
|
|
45
|
+
/** Per-entry status. */
|
|
46
|
+
per_entry: EntryStatus[];
|
|
47
|
+
/** Human-readable reason for the gate response. */
|
|
48
|
+
reason: string;
|
|
49
|
+
/** Concrete next_step the agent must execute when the gate fails. */
|
|
50
|
+
next_step: string;
|
|
51
|
+
}
|
|
52
|
+
export declare function evaluateChangeCoverage(cwd: string, runId: string, config?: ChangeCoverageConfig): ChangeCoverageVerdict;
|
|
53
|
+
/**
|
|
54
|
+
* Resolve the change-coverage config block out of the project config,
|
|
55
|
+
* falling back to defaults. Tolerates missing fields and unknown keys.
|
|
56
|
+
*/
|
|
57
|
+
export declare function resolveChangeCoverageConfig(raw: unknown): ChangeCoverageConfig;
|
|
58
|
+
export type { ChangeManifest };
|
|
59
|
+
//# sourceMappingURL=change_coverage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change_coverage.d.ts","sourceRoot":"","sources":["../../src/evidence/change_coverage.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAG9B;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,oGAAoG;IACpG,SAAS,EAAE,MAAM,CAAC;IAClB,0FAA0F;IAC1F,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;CACnC;AAED,eAAO,MAAM,8BAA8B,EAAE,oBAI5C,CAAC;AAUF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,WAAW,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,gGAAgG;IAChG,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,+CAA+C;IAC/C,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,wBAAwB;IACxB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;CACnB;AA0TD,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,oBAAqD,GAC5D,qBAAqB,CA4FvB;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,OAAO,GACX,oBAAoB,CAgBtB;AAED,YAAY,EAAE,cAAc,EAAE,CAAC"}
|