@warpgogol/forge 5.3.3 → 6.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.
- package/CHANGELOG.md +8 -0
- package/bin/cli.ts +7 -2
- package/dist/bin/cli.js +7 -2
- package/dist/bin/cli.js.map +1 -1
- package/dist/os/adr/adr.module.d.ts.map +1 -1
- package/dist/os/adr/adr.module.js +2 -0
- package/dist/os/adr/adr.module.js.map +1 -1
- package/dist/os/audit/audit.module.d.ts.map +1 -1
- package/dist/os/audit/audit.module.js +2 -0
- package/dist/os/audit/audit.module.js.map +1 -1
- package/dist/os/compass/compass.module.d.ts.map +1 -1
- package/dist/os/compass/compass.module.js +48 -16
- package/dist/os/compass/compass.module.js.map +1 -1
- package/dist/os/compass/handlers/compass-audit-handler.d.ts +2 -0
- package/dist/os/compass/handlers/compass-audit-handler.d.ts.map +1 -1
- package/dist/os/compass/handlers/compass-audit-handler.js +39 -9
- package/dist/os/compass/handlers/compass-audit-handler.js.map +1 -1
- package/dist/os/compass/handlers/compass-docs-validate.d.ts +13 -0
- package/dist/os/compass/handlers/compass-docs-validate.d.ts.map +1 -0
- package/dist/os/compass/handlers/compass-docs-validate.js +326 -0
- package/dist/os/compass/handlers/compass-docs-validate.js.map +1 -0
- package/dist/os/compass/handlers/compass-inventory.d.ts.map +1 -1
- package/dist/os/compass/handlers/compass-inventory.js +5 -2
- package/dist/os/compass/handlers/compass-inventory.js.map +1 -1
- package/dist/os/compass/handlers/summary-record.d.ts +17 -3
- package/dist/os/compass/handlers/summary-record.d.ts.map +1 -1
- package/dist/os/compass/handlers/summary-record.js +107 -10
- package/dist/os/compass/handlers/summary-record.js.map +1 -1
- package/dist/os/compass/handlers/tests/forge-yaml-fixture.d.ts +18 -0
- package/dist/os/compass/handlers/tests/forge-yaml-fixture.d.ts.map +1 -0
- package/dist/os/compass/handlers/tests/forge-yaml-fixture.js +64 -0
- package/dist/os/compass/handlers/tests/forge-yaml-fixture.js.map +1 -0
- package/dist/os/compass/policy.d.ts +6 -1
- package/dist/os/compass/policy.d.ts.map +1 -1
- package/dist/os/compass/policy.js +8 -2
- package/dist/os/compass/policy.js.map +1 -1
- package/dist/os/core/core.module.d.ts.map +1 -1
- package/dist/os/core/core.module.js +124 -73
- package/dist/os/core/core.module.js.map +1 -1
- package/dist/os/exploration/exploration.module.d.ts.map +1 -1
- package/dist/os/exploration/exploration.module.js +3 -0
- package/dist/os/exploration/exploration.module.js.map +1 -1
- package/dist/os/mission/handlers/archive.d.ts.map +1 -1
- package/dist/os/mission/handlers/archive.js +1 -2
- package/dist/os/mission/handlers/archive.js.map +1 -1
- package/dist/os/naming/naming.module.d.ts.map +1 -1
- package/dist/os/naming/naming.module.js +9 -2
- package/dist/os/naming/naming.module.js.map +1 -1
- package/dist/os/notes/notes.module.d.ts.map +1 -1
- package/dist/os/notes/notes.module.js +17 -6
- package/dist/os/notes/notes.module.js.map +1 -1
- package/dist/os/plan/plan.module.d.ts.map +1 -1
- package/dist/os/plan/plan.module.js +2 -0
- package/dist/os/plan/plan.module.js.map +1 -1
- package/dist/os/plugin/plugin.module.d.ts.map +1 -1
- package/dist/os/plugin/plugin.module.js +9 -2
- package/dist/os/plugin/plugin.module.js.map +1 -1
- package/dist/os/program/program.module.d.ts.map +1 -1
- package/dist/os/program/program.module.js +19 -4
- package/dist/os/program/program.module.js.map +1 -1
- package/dist/os/queue/handlers/queue-validate.d.ts.map +1 -1
- package/dist/os/queue/handlers/queue-validate.js +154 -7
- package/dist/os/queue/handlers/queue-validate.js.map +1 -1
- package/dist/os/queue/manifest.d.ts +17 -1
- package/dist/os/queue/manifest.d.ts.map +1 -1
- package/dist/os/queue/manifest.js +127 -6
- package/dist/os/queue/manifest.js.map +1 -1
- package/dist/os/queue/queue.module.d.ts.map +1 -1
- package/dist/os/queue/queue.module.js +32 -4
- package/dist/os/queue/queue.module.js.map +1 -1
- package/dist/os/queue/types.d.ts +100 -1
- package/dist/os/queue/types.d.ts.map +1 -1
- package/dist/os/queue/types.js +44 -0
- package/dist/os/queue/types.js.map +1 -1
- package/dist/os/rfc/handlers/implement-stamp.d.ts.map +1 -1
- package/dist/os/rfc/handlers/implement-stamp.js +28 -5
- package/dist/os/rfc/handlers/implement-stamp.js.map +1 -1
- package/dist/os/rfc/handlers/validate.js +1 -1
- package/dist/os/rfc/rfc.module.d.ts.map +1 -1
- package/dist/os/rfc/rfc.module.js +27 -3
- package/dist/os/rfc/rfc.module.js.map +1 -1
- package/dist/os/rfc/types.d.ts +11 -0
- package/dist/os/rfc/types.d.ts.map +1 -1
- package/dist/os/rfc/types.js +1 -0
- package/dist/os/rfc/types.js.map +1 -1
- package/dist/os/rfc/verification-evidence.d.ts +21 -0
- package/dist/os/rfc/verification-evidence.d.ts.map +1 -1
- package/dist/os/rfc/verification-evidence.js +140 -23
- package/dist/os/rfc/verification-evidence.js.map +1 -1
- package/dist/os/rfc/verification-refresh.d.ts.map +1 -1
- package/dist/os/rfc/verification-refresh.js +72 -37
- package/dist/os/rfc/verification-refresh.js.map +1 -1
- package/dist/os/session/handlers/save.d.ts.map +1 -1
- package/dist/os/session/handlers/save.js +46 -5
- package/dist/os/session/handlers/save.js.map +1 -1
- package/dist/os/session/session.module.d.ts.map +1 -1
- package/dist/os/session/session.module.js +5 -0
- package/dist/os/session/session.module.js.map +1 -1
- package/dist/os/spec/live-spec-merge.d.ts.map +1 -1
- package/dist/os/spec/live-spec-merge.js +55 -134
- package/dist/os/spec/live-spec-merge.js.map +1 -1
- package/dist/os/spec/live-spec-rebuild.d.ts +32 -0
- package/dist/os/spec/live-spec-rebuild.d.ts.map +1 -0
- package/dist/os/spec/live-spec-rebuild.js +272 -0
- package/dist/os/spec/live-spec-rebuild.js.map +1 -0
- package/dist/os/spec/live-spec-shared.d.ts +62 -0
- package/dist/os/spec/live-spec-shared.d.ts.map +1 -0
- package/dist/os/spec/live-spec-shared.js +315 -0
- package/dist/os/spec/live-spec-shared.js.map +1 -0
- package/dist/os/spec/live-spec-types.d.ts +17 -1
- package/dist/os/spec/live-spec-types.d.ts.map +1 -1
- package/dist/os/spec/live-spec-types.js +3 -0
- package/dist/os/spec/live-spec-types.js.map +1 -1
- package/dist/os/spec/live-spec-validate.d.ts.map +1 -1
- package/dist/os/spec/live-spec-validate.js +105 -2
- package/dist/os/spec/live-spec-validate.js.map +1 -1
- package/dist/os/spec/spec-materialize.d.ts +2 -0
- package/dist/os/spec/spec-materialize.d.ts.map +1 -1
- package/dist/os/spec/spec-materialize.js +45 -5
- package/dist/os/spec/spec-materialize.js.map +1 -1
- package/dist/os/spec/spec-schema.d.ts +19 -0
- package/dist/os/spec/spec-schema.d.ts.map +1 -1
- package/dist/os/spec/spec-schema.js +30 -0
- package/dist/os/spec/spec-schema.js.map +1 -1
- package/dist/os/spec/spec-status.d.ts +4 -0
- package/dist/os/spec/spec-status.d.ts.map +1 -1
- package/dist/os/spec/spec-status.js +19 -1
- package/dist/os/spec/spec-status.js.map +1 -1
- package/dist/os/spec/spec-validate.d.ts.map +1 -1
- package/dist/os/spec/spec-validate.js +55 -8
- package/dist/os/spec/spec-validate.js.map +1 -1
- package/dist/os/spec/spec.module.d.ts.map +1 -1
- package/dist/os/spec/spec.module.js +84 -8
- package/dist/os/spec/spec.module.js.map +1 -1
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.d.ts.map +1 -1
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.js +10 -4
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.js.map +1 -1
- package/dist/os/werkstatt/werkstatt.module.d.ts.map +1 -1
- package/dist/os/werkstatt/werkstatt.module.js +13 -4
- package/dist/os/werkstatt/werkstatt.module.js.map +1 -1
- package/dist/os/workflow/workflow.module.d.ts.map +1 -1
- package/dist/os/workflow/workflow.module.js +13 -5
- package/dist/os/workflow/workflow.module.js.map +1 -1
- package/dist/src/cli-flags.d.ts.map +1 -1
- package/dist/src/cli-flags.js +25 -5
- package/dist/src/cli-flags.js.map +1 -1
- package/dist/src/config/forge-config.d.ts +24 -3
- package/dist/src/config/forge-config.d.ts.map +1 -1
- package/dist/src/config/forge-config.js +38 -7
- package/dist/src/config/forge-config.js.map +1 -1
- package/dist/src/onboarding/create.d.ts.map +1 -1
- package/dist/src/onboarding/create.js +26 -10
- package/dist/src/onboarding/create.js.map +1 -1
- package/dist/src/onboarding/doctor.d.ts.map +1 -1
- package/dist/src/onboarding/doctor.js +49 -2
- package/dist/src/onboarding/doctor.js.map +1 -1
- package/dist/src/onboarding/init.d.ts.map +1 -1
- package/dist/src/onboarding/init.js +8 -3
- package/dist/src/onboarding/init.js.map +1 -1
- package/dist/src/onboarding/upgrade.d.ts.map +1 -1
- package/dist/src/onboarding/upgrade.js +24 -8
- package/dist/src/onboarding/upgrade.js.map +1 -1
- package/dist/src/pipeline-status.d.ts +14 -1
- package/dist/src/pipeline-status.d.ts.map +1 -1
- package/dist/src/pipeline-status.js +28 -8
- package/dist/src/pipeline-status.js.map +1 -1
- package/dist/src/types.d.ts +7 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +6 -0
- package/dist/src/types.js.map +1 -1
- package/dist/src/utils/generated-marker.d.ts +8 -0
- package/dist/src/utils/generated-marker.d.ts.map +1 -1
- package/dist/src/utils/generated-marker.js +25 -0
- package/dist/src/utils/generated-marker.js.map +1 -1
- package/dist/src/validators/skill-validate.d.ts.map +1 -1
- package/dist/src/validators/skill-validate.js +42 -15
- package/dist/src/validators/skill-validate.js.map +1 -1
- package/os/adr/adr.module.ts +2 -0
- package/os/audit/audit.module.ts +2 -0
- package/os/compass/compass.module.ts +50 -16
- package/os/compass/handlers/compass-audit-handler.ts +50 -9
- package/os/compass/handlers/compass-docs-validate.ts +359 -0
- package/os/compass/handlers/compass-inventory.ts +6 -3
- package/os/compass/handlers/summary-record.ts +118 -10
- package/os/compass/handlers/tests/compass-audit-record.test.ts +2 -1
- package/os/compass/handlers/tests/compass-audit-validate.test.ts +92 -3
- package/os/compass/handlers/tests/compass-docs-validate.test.ts +203 -0
- package/os/compass/handlers/tests/compass-ledger-scope.test.ts +2 -1
- package/os/compass/handlers/tests/compass-policy.test.ts +15 -18
- package/os/compass/handlers/tests/compass-v2-contract.test.ts +38 -0
- package/os/compass/handlers/tests/forge-yaml-fixture.ts +69 -0
- package/os/compass/handlers/tests/summary-record.test.ts +152 -0
- package/os/compass/policy.ts +8 -2
- package/os/core/core.module.ts +147 -75
- package/os/core/docs-archive.test.ts +136 -0
- package/os/exploration/exploration.module.ts +3 -0
- package/os/mission/handlers/archive.ts +1 -2
- package/os/naming/naming.module.ts +9 -2
- package/os/notes/notes.module.ts +17 -6
- package/os/plan/plan-0000-template.md +150 -0
- package/os/plan/plan.module.ts +2 -0
- package/os/plugin/plugin.module.ts +9 -2
- package/os/program/program.module.ts +19 -4
- package/os/queue/decision-ledger.test.ts +163 -0
- package/os/queue/handlers/queue-validate.ts +190 -8
- package/os/queue/manifest.ts +201 -7
- package/os/queue/queue-validate.test.ts +303 -0
- package/os/queue/queue.module.ts +32 -4
- package/os/queue/types.ts +56 -1
- package/os/rfc/handlers/implement-stamp.ts +35 -5
- package/os/rfc/handlers/validate.ts +1 -1
- package/os/rfc/rfc.module.ts +29 -3
- package/os/rfc/types.ts +17 -1
- package/os/rfc/verification-emit.test.ts +305 -0
- package/os/rfc/verification-evidence.ts +155 -24
- package/os/rfc/verification-refresh.test.ts +222 -1
- package/os/rfc/verification-refresh.ts +80 -38
- package/os/session/handlers/save.ts +41 -5
- package/os/session/session.module.ts +5 -0
- package/os/spec/live-spec-idempotency.pbt.test.ts +222 -0
- package/os/spec/live-spec-list-show-validate.test.ts +10 -6
- package/os/spec/live-spec-merge.test.ts +187 -7
- package/os/spec/live-spec-merge.ts +71 -155
- package/os/spec/live-spec-rebuild.test.ts +317 -0
- package/os/spec/live-spec-rebuild.ts +356 -0
- package/os/spec/live-spec-shared.ts +378 -0
- package/os/spec/live-spec-types.ts +21 -1
- package/os/spec/live-spec-validate.test.ts +317 -0
- package/os/spec/live-spec-validate.ts +106 -2
- package/os/spec/spec-materialize.test.ts +192 -0
- package/os/spec/spec-materialize.ts +48 -4
- package/os/spec/spec-schema.ts +49 -0
- package/os/spec/spec-status.ts +24 -0
- package/os/spec/spec-validate.test.ts +66 -0
- package/os/spec/spec-validate.ts +62 -8
- package/os/spec/spec.module.ts +85 -8
- package/os/werkstatt/handlers/werkstatt-operation-validate.ts +10 -4
- package/os/werkstatt/werkstatt.module.ts +13 -4
- package/os/workflow/workflow.module.ts +13 -5
- package/package.json +1 -1
- package/skills/_shared/fo-pipeline-conventions.md +126 -1
- package/skills/fo/fo-compass-annotate/SKILL.md +1 -1
- package/skills/fo/fo-doc-audit/SKILL.md +4 -4
- package/skills/fo/fo-explore/SKILL.md +2 -1
- package/skills/fo/fo-fix/SKILL.md +11 -3
- package/skills/fo/fo-handoff/SKILL.md +6 -8
- package/skills/fo/fo-idea-audit/SKILL.md +1 -1
- package/skills/fo/fo-idea-create-rfc/SKILL.md +3 -2
- package/skills/fo/fo-idea-enhance/SKILL.md +23 -4
- package/skills/fo/fo-idea-i-just-want-to-see-the-result/SKILL.md +86 -22
- package/skills/fo/fo-idea-implement/SKILL.md +57 -13
- package/skills/fo/fo-idea-plan/SKILL.md +28 -6
- package/skills/fo/fo-review/SKILL.md +69 -8
- package/skills/fo/fo-session-retro/SKILL.md +4 -3
- package/skills/fo/fo-session-save/SKILL.md +1 -1
- package/skills/fo/fo-step-commit/SKILL.md +2 -0
- package/skills/shared/grilling/SKILL.md +12 -0
- package/skills/shared/writing-great-skills/GLOSSARY.md +2 -0
- package/skills/shared/writing-great-skills/SKILL.md +2 -1
- package/src/cli-flags.ts +23 -5
- package/src/config/forge-config.ts +106 -57
- package/src/onboarding/create.ts +25 -9
- package/src/onboarding/doctor.ts +51 -2
- package/src/onboarding/init.ts +8 -3
- package/src/onboarding/upgrade.ts +36 -6
- package/src/pipeline-status.ts +32 -8
- package/src/tests/bindings-schema.test.ts +53 -1
- package/src/tests/cli-flags.test.ts +20 -0
- package/src/tests/cli-output.test.ts +13 -7
- package/src/tests/doctor-bindings.test.ts +7 -2
- package/src/tests/doctor-skills-unmanaged.test.ts +145 -0
- package/src/tests/fixtures/agents-generate-business-before.txt +7 -7
- package/src/tests/forge-config.test.ts +106 -2
- package/src/tests/implement-stamp.test.ts +38 -0
- package/src/tests/session-handlers.test.ts +33 -0
- package/src/tests/skill-validate.test.ts +180 -0
- package/src/tests/upgrade.test.ts +60 -0
- package/src/types.ts +13 -1
- package/src/utils/generated-marker.ts +28 -0
- package/src/validators/skill-validate.ts +43 -16
- package/skills/fo/fo-idea-implement/ADR-FLOW.md +0 -179
- package/skills/fo/fo-review/AXES.md +0 -70
|
@@ -7,6 +7,27 @@ export declare function captureGitContext(workspaceRoot: string): Promise<{
|
|
|
7
7
|
}>;
|
|
8
8
|
export declare function getKernelVersion(workspaceRoot: string): Promise<string>;
|
|
9
9
|
export declare function byteHashHex(content: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Bounded-parallel map preserving input order — one in-flight worker per slot,
|
|
12
|
+
* results land in the same positions as their inputs. Used by the emit/refresh
|
|
13
|
+
* sweeps so `--concurrency N` overlaps probe subprocesses across RFCs.
|
|
14
|
+
*/
|
|
15
|
+
export declare function mapWithConcurrency<T, R>(items: readonly T[], concurrency: number, worker: (item: T, index: number) => Promise<R>): Promise<R[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Resolve the `--concurrency` flag (string flag; the kernel schema has no
|
|
18
|
+
* number kind). Garbage/NaN/non-positive degrades to 1 with a warning;
|
|
19
|
+
* clamped to 16 — probe workers spawn vitest/site-kernel children and wider
|
|
20
|
+
* fan-out starves CPU rather than speeding the sweep.
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveConcurrency(flag: unknown, warn?: (message: string) => void): number;
|
|
23
|
+
/**
|
|
24
|
+
* RFC-1237: the emit-canonical envelope serialization — structured marker keys
|
|
25
|
+
* (generatedMarker/doNotEdit/ownerCommand/editInstead/regenerateCommand) as
|
|
26
|
+
* leading YAML fields, then the envelope body. emit and refresh MUST share
|
|
27
|
+
* this serializer: refresh owns content freshness, never envelope identity
|
|
28
|
+
* (OWN-DUP-01), so refresh output is identical-by-construction.
|
|
29
|
+
*/
|
|
30
|
+
export declare function serializeEvidenceEnvelope(envelope: VerificationEvidence): string;
|
|
10
31
|
export declare function buildEvidenceEnvelope(rfcId: string, title: string, rfcStatus: RfcStatus, rfcMarkdown: string, probes: AcceptanceProbe[], probeRecords: VerificationEvidenceProbeRecord[], gitContext: {
|
|
11
32
|
commit: string;
|
|
12
33
|
workingTreeDirty: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-evidence.d.ts","sourceRoot":"","sources":["../../../os/rfc/verification-evidence.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verification-evidence.d.ts","sourceRoot":"","sources":["../../../os/rfc/verification-evidence.ts"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EACV,eAAe,EACf,SAAS,EACT,oBAAoB,EACpB,+BAA+B,EAC/B,yBAAyB,EAC1B,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAEV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,gBAAgB,QAAgC,CAAC;AAe9D,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAA;CAAE,CAAC,CASxD;AAED,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ7E;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAC3C,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAC7C,OAAO,CAAC,CAAC,EAAE,CAAC,CAcd;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,CAe1F;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,CAQhF;AAMD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,eAAe,EAAE,EACzB,YAAY,EAAE,+BAA+B,EAAE,EAC/C,UAAU,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAA;CAAE,EACzD,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,GAChB,oBAAoB,CAetB;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,CAAC,CAmLxD"}
|
|
@@ -14,6 +14,18 @@ a JSON evidence envelope to docs/rfcs/verification/<slug>.generated.yaml.
|
|
|
14
14
|
<CHANGE_SUMMARY>
|
|
15
15
|
<item>RFC-0330: initial implementation.</item>
|
|
16
16
|
<item>RFC-0999: exported captureGitContext, getKernelVersion, byteHashHex, VERIFICATION_DIR for reuse by verification-refresh.ts.</item>
|
|
17
|
+
<item>RFC-1237: dual-read dry-run (context.dryRun || flags["dry-run"]),
|
|
18
|
+
io.writeFile port routing, dry-run summary marker; serializeEvidenceEnvelope —
|
|
19
|
+
shared emit-canonical serializer restoring the structured YAML marker-key
|
|
20
|
+
header (generatedMarker/doNotEdit/ownerCommand/editInstead/regenerateCommand
|
|
21
|
+
with "pnpm exec werkstatt run" prefix), also consumed by refresh.</item>
|
|
22
|
+
<item>Session-retro 2026-10-08: sweep delta report — reads the committed
|
|
23
|
+
envelope baseline (previousOverall) and reports recovered/regressed
|
|
24
|
+
transitions so a fail-heavy sweep needs no manual pass/fail triage.</item>
|
|
25
|
+
<item>Session-retro 2026-10-08: --concurrency flag (default 1, garbage values
|
|
26
|
+
warn + fall back to 1, >16 clamps) fans emit out across RFC units via
|
|
27
|
+
mapWithConcurrency while probes inside one RFC stay sequential — envelope
|
|
28
|
+
ordering stays deterministic.</item>
|
|
17
29
|
</CHANGE_SUMMARY>
|
|
18
30
|
*/
|
|
19
31
|
import { execFile } from "../../src/utils/sync-fs.js";
|
|
@@ -23,9 +35,8 @@ import { performance } from "node:perf_hooks";
|
|
|
23
35
|
import { byteHash } from "../../src/utils/hash.js";
|
|
24
36
|
import { runProbe } from "./acceptance.js";
|
|
25
37
|
import { listRfcFiles, readAndParseRfc } from "./frontmatter-io.js";
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import { stringify as yamlStringify } from "yaml";
|
|
38
|
+
import { generatedHeaderFields } from "../../src/utils/generated-marker.js";
|
|
39
|
+
import { parse as yamlParse, stringify as yamlStringify } from "yaml";
|
|
29
40
|
import { RFC_DIR } from "./types.js";
|
|
30
41
|
// Ambient default for helper fns without a context param — handlers override
|
|
31
42
|
// with `const io = resolveIo(context.io)` inside their own scope.
|
|
@@ -66,6 +77,61 @@ export async function getKernelVersion(workspaceRoot) {
|
|
|
66
77
|
export function byteHashHex(content) {
|
|
67
78
|
return byteHash(content).slice(HASH_PREFIX.length);
|
|
68
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Bounded-parallel map preserving input order — one in-flight worker per slot,
|
|
82
|
+
* results land in the same positions as their inputs. Used by the emit/refresh
|
|
83
|
+
* sweeps so `--concurrency N` overlaps probe subprocesses across RFCs.
|
|
84
|
+
*/
|
|
85
|
+
export async function mapWithConcurrency(items, concurrency, worker) {
|
|
86
|
+
const results = new Array(items.length);
|
|
87
|
+
let cursor = 0;
|
|
88
|
+
const lanes = Array.from({ length: Math.min(Math.max(concurrency, 1), items.length) }, () => (async () => {
|
|
89
|
+
while (cursor < items.length) {
|
|
90
|
+
const index = cursor;
|
|
91
|
+
cursor += 1;
|
|
92
|
+
results[index] = await worker(items[index], index);
|
|
93
|
+
}
|
|
94
|
+
})());
|
|
95
|
+
await Promise.all(lanes);
|
|
96
|
+
return results;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Resolve the `--concurrency` flag (string flag; the kernel schema has no
|
|
100
|
+
* number kind). Garbage/NaN/non-positive degrades to 1 with a warning;
|
|
101
|
+
* clamped to 16 — probe workers spawn vitest/site-kernel children and wider
|
|
102
|
+
* fan-out starves CPU rather than speeding the sweep.
|
|
103
|
+
*/
|
|
104
|
+
export function resolveConcurrency(flag, warn) {
|
|
105
|
+
if (flag === undefined)
|
|
106
|
+
return 1;
|
|
107
|
+
const raw = Array.isArray(flag) ? flag[0] : flag;
|
|
108
|
+
const parsed = Number.parseInt(String(raw), 10);
|
|
109
|
+
if (!Number.isFinite(parsed) || parsed < 1) {
|
|
110
|
+
warn?.(`--concurrency "${String(raw)}" is not a positive integer — falling back to 1.`);
|
|
111
|
+
return 1;
|
|
112
|
+
}
|
|
113
|
+
if (parsed > 16) {
|
|
114
|
+
warn?.(`--concurrency ${parsed} exceeds the 16 cap — clamped (probe workers spawn subprocesses).`);
|
|
115
|
+
return 16;
|
|
116
|
+
}
|
|
117
|
+
return parsed;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* RFC-1237: the emit-canonical envelope serialization — structured marker keys
|
|
121
|
+
* (generatedMarker/doNotEdit/ownerCommand/editInstead/regenerateCommand) as
|
|
122
|
+
* leading YAML fields, then the envelope body. emit and refresh MUST share
|
|
123
|
+
* this serializer: refresh owns content freshness, never envelope identity
|
|
124
|
+
* (OWN-DUP-01), so refresh output is identical-by-construction.
|
|
125
|
+
*/
|
|
126
|
+
export function serializeEvidenceEnvelope(envelope) {
|
|
127
|
+
return `${yamlStringify({
|
|
128
|
+
...generatedHeaderFields({
|
|
129
|
+
ownerCommand: "rfc.verification.emit",
|
|
130
|
+
commandPrefix: "pnpm exec werkstatt run",
|
|
131
|
+
}),
|
|
132
|
+
...envelope,
|
|
133
|
+
})}\n`;
|
|
134
|
+
}
|
|
69
135
|
function normalizeProbes(probes) {
|
|
70
136
|
return JSON.stringify(probes, Object.keys(probes[0] ?? {}).sort());
|
|
71
137
|
}
|
|
@@ -91,6 +157,10 @@ export async function runRfcVerificationEmit(input, context) {
|
|
|
91
157
|
const rfcDirPath = join(workspaceRoot, RFC_DIR);
|
|
92
158
|
const targetId = input.flags["id"];
|
|
93
159
|
const targetStatus = input.flags["status"];
|
|
160
|
+
// RFC-1237: consumeCommonFlags strips --dry-run into context.dryRun before
|
|
161
|
+
// dispatch — the input.flags read stays for direct/programmatic callers.
|
|
162
|
+
const dryRun = context.dryRun === true || input.flags["dry-run"] === true;
|
|
163
|
+
const concurrency = resolveConcurrency(input.flags["concurrency"], (m) => logger.warn(m));
|
|
94
164
|
if (!targetId && !targetStatus) {
|
|
95
165
|
return {
|
|
96
166
|
data: {
|
|
@@ -118,23 +188,23 @@ export async function runRfcVerificationEmit(input, context) {
|
|
|
118
188
|
}
|
|
119
189
|
const kernelVersion = await getKernelVersion(workspaceRoot);
|
|
120
190
|
const verificationDirAbs = join(workspaceRoot, VERIFICATION_DIR);
|
|
121
|
-
|
|
122
|
-
|
|
191
|
+
if (!dryRun)
|
|
192
|
+
await io.mkdir(verificationDirAbs);
|
|
193
|
+
const processFile = async (fileName) => {
|
|
123
194
|
const parsedFile = await readAndParseRfc(rfcDirPath, fileName);
|
|
124
195
|
if (!parsedFile)
|
|
125
|
-
|
|
196
|
+
return {};
|
|
126
197
|
if ("error" in parsedFile)
|
|
127
|
-
|
|
198
|
+
return {};
|
|
128
199
|
const fm = parsedFile.parsed.frontmatter;
|
|
129
200
|
const rfcId = String(fm["id"] ?? "");
|
|
130
201
|
if (targetId && rfcId.toLowerCase() !== targetId.toLowerCase())
|
|
131
|
-
|
|
202
|
+
return {};
|
|
132
203
|
if (targetStatus && String(fm["status"] ?? "") !== targetStatus)
|
|
133
|
-
|
|
204
|
+
return {};
|
|
134
205
|
const acceptance = fm["acceptance"];
|
|
135
206
|
if (!Array.isArray(acceptance) || acceptance.length === 0) {
|
|
136
|
-
|
|
137
|
-
continue;
|
|
207
|
+
return { skippedEntry: { rfcId, reason: "no-probes" } };
|
|
138
208
|
}
|
|
139
209
|
const probes = acceptance;
|
|
140
210
|
const probeRecords = [];
|
|
@@ -157,23 +227,69 @@ export async function runRfcVerificationEmit(input, context) {
|
|
|
157
227
|
const evidenceFileName = `${slug}.generated.yaml`;
|
|
158
228
|
const evidenceRelPath = join(VERIFICATION_DIR, evidenceFileName);
|
|
159
229
|
const evidenceAbsPath = join(workspaceRoot, evidenceRelPath);
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
230
|
+
// Committed-envelope baseline for the sweep delta — lets a fail-heavy run
|
|
231
|
+
// separate still-failing drift from fresh regressions without git diff.
|
|
232
|
+
let previousOverall;
|
|
233
|
+
try {
|
|
234
|
+
const existing = yamlParse(await io.readFile(evidenceAbsPath));
|
|
235
|
+
if (existing && (existing.overall === "pass" || existing.overall === "fail")) {
|
|
236
|
+
previousOverall = existing.overall;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
// No committed envelope — first emission for this RFC.
|
|
170
241
|
}
|
|
242
|
+
// RFC-1237: port write — the recording IO adapter intercepts under kernel
|
|
243
|
+
// --dry-run even if the explicit guard regresses.
|
|
244
|
+
if (!dryRun)
|
|
245
|
+
await io.writeFile(evidenceAbsPath, serializeEvidenceEnvelope(envelope));
|
|
171
246
|
if (outputFormat === "pretty") {
|
|
172
|
-
|
|
247
|
+
const drift = previousOverall !== undefined && previousOverall !== envelope.overall
|
|
248
|
+
? `, was ${previousOverall}`
|
|
249
|
+
: "";
|
|
250
|
+
logger.info(`[evidence] ${rfcId} → ${evidenceRelPath} (${envelope.overall}, ${probeRecords.length} probes${drift}${dryRun ? ", dry-run" : ""})`);
|
|
173
251
|
}
|
|
252
|
+
return {
|
|
253
|
+
emittedEntry: {
|
|
254
|
+
rfcId,
|
|
255
|
+
file: evidenceRelPath,
|
|
256
|
+
overall: envelope.overall,
|
|
257
|
+
...(previousOverall !== undefined ? { previousOverall } : {}),
|
|
258
|
+
},
|
|
259
|
+
...(envelope.overall === "fail"
|
|
260
|
+
? {
|
|
261
|
+
diagnostic: {
|
|
262
|
+
ruleId: "RFC-EVID-02",
|
|
263
|
+
severity: "error",
|
|
264
|
+
file: evidenceRelPath,
|
|
265
|
+
message: `${rfcId}: evidence overall is "fail" — ${probeRecords.filter((r) => !r.ok).length} probe(s) failed${previousOverall === "pass" ? " (regressed: was pass)" : ""}.`,
|
|
266
|
+
},
|
|
267
|
+
}
|
|
268
|
+
: {}),
|
|
269
|
+
};
|
|
270
|
+
};
|
|
271
|
+
const results = await mapWithConcurrency(allFiles, concurrency, processFile);
|
|
272
|
+
for (const r of results) {
|
|
273
|
+
if (r.emittedEntry)
|
|
274
|
+
emitted.push(r.emittedEntry);
|
|
275
|
+
if (r.skippedEntry)
|
|
276
|
+
skipped.push(r.skippedEntry);
|
|
277
|
+
if (r.diagnostic)
|
|
278
|
+
diagnostics.push(r.diagnostic);
|
|
174
279
|
}
|
|
175
280
|
const hasFailures = emitted.some((e) => e.overall === "fail");
|
|
176
281
|
const status = hasFailures ? "fail" : "pass";
|
|
282
|
+
const delta = {
|
|
283
|
+
recovered: emitted
|
|
284
|
+
.filter((e) => e.previousOverall === "fail" && e.overall === "pass")
|
|
285
|
+
.map((e) => e.rfcId),
|
|
286
|
+
regressed: emitted
|
|
287
|
+
.filter((e) => e.previousOverall === "pass" && e.overall === "fail")
|
|
288
|
+
.map((e) => e.rfcId),
|
|
289
|
+
};
|
|
290
|
+
const deltaSummary = delta.recovered.length + delta.regressed.length > 0
|
|
291
|
+
? `, ${delta.regressed.length} regressed, ${delta.recovered.length} recovered`
|
|
292
|
+
: "";
|
|
177
293
|
return {
|
|
178
294
|
data: {
|
|
179
295
|
command: "rfc.verification.emit",
|
|
@@ -181,9 +297,10 @@ export async function runRfcVerificationEmit(input, context) {
|
|
|
181
297
|
emitted,
|
|
182
298
|
skipped,
|
|
183
299
|
diagnostics,
|
|
300
|
+
delta,
|
|
184
301
|
},
|
|
185
302
|
exitCode: hasFailures ? 1 : 0,
|
|
186
|
-
summary: `rfc.verification.emit: ${emitted.length} emitted, ${skipped.length} skipped`,
|
|
303
|
+
summary: `rfc.verification.emit: ${emitted.length} emitted, ${skipped.length} skipped${deltaSummary}${dryRun ? ", dry-run" : ""}`,
|
|
187
304
|
};
|
|
188
305
|
}
|
|
189
306
|
//# sourceMappingURL=verification-evidence.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-evidence.js","sourceRoot":"","sources":["../../../os/rfc/verification-evidence.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"verification-evidence.js","sourceRoot":"","sources":["../../../os/rfc/verification-evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-refresh.d.ts","sourceRoot":"","sources":["../../../os/rfc/verification-refresh.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verification-refresh.d.ts","sourceRoot":"","sources":["../../../os/rfc/verification-refresh.ts"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EAKV,4BAA4B,EAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAEV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAE5B,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,CAAC,CA4L3D"}
|
|
@@ -14,6 +14,17 @@ lastRefreshedAt, replaces probes[] with fresh results. Supports --id,
|
|
|
14
14
|
</MODULE_CONTRACT>
|
|
15
15
|
<CHANGE_SUMMARY>
|
|
16
16
|
<item>RFC-0999: initial implementation.</item>
|
|
17
|
+
<item>RFC-1237: dual-read dry-run (context.dryRun || flags["dry-run"]),
|
|
18
|
+
io.writeFile port routing, emit-canonical generated header — refresh owns
|
|
19
|
+
content freshness, never envelope identity (ownerCommand stays
|
|
20
|
+
rfc.verification.emit).</item>
|
|
21
|
+
<item>Session-retro 2026-10-08: sweep delta report — previousOverall per
|
|
22
|
+
envelope + recovered/regressed lists separate still-failing drift from fresh
|
|
23
|
+
regressions without manual triage.</item>
|
|
24
|
+
<item>Session-retro 2026-10-08: --concurrency flag (default 1, garbage values
|
|
25
|
+
warn + fall back to 1, >16 clamps) fans refresh out across RFC units via
|
|
26
|
+
mapWithConcurrency while probes inside one RFC stay sequential — envelope
|
|
27
|
+
ordering stays deterministic.</item>
|
|
17
28
|
</CHANGE_SUMMARY>
|
|
18
29
|
*/
|
|
19
30
|
import { join } from "node:path";
|
|
@@ -22,10 +33,7 @@ import { performance } from "node:perf_hooks";
|
|
|
22
33
|
import { parse as yamlParse } from "yaml";
|
|
23
34
|
import { runProbe } from "./acceptance.js";
|
|
24
35
|
import { listRfcFiles, readAndParseRfc } from "./frontmatter-io.js";
|
|
25
|
-
import {
|
|
26
|
-
import { buildGeneratedHeader } from "../../src/utils/generated-marker.js";
|
|
27
|
-
import { stringify as yamlStringify } from "yaml";
|
|
28
|
-
import { captureGitContext, getKernelVersion, VERIFICATION_DIR, buildEvidenceEnvelope, } from "./verification-evidence.js";
|
|
36
|
+
import { captureGitContext, getKernelVersion, mapWithConcurrency, resolveConcurrency, VERIFICATION_DIR, buildEvidenceEnvelope, serializeEvidenceEnvelope, } from "./verification-evidence.js";
|
|
29
37
|
import { RFC_DIR } from "./types.js";
|
|
30
38
|
export async function runRfcVerificationRefresh(input, context) {
|
|
31
39
|
const io = resolveIo(context.io);
|
|
@@ -33,7 +41,10 @@ export async function runRfcVerificationRefresh(input, context) {
|
|
|
33
41
|
const rfcDirPath = join(workspaceRoot, RFC_DIR);
|
|
34
42
|
const targetId = input.flags["id"];
|
|
35
43
|
const allMode = input.flags["all"] === true;
|
|
36
|
-
|
|
44
|
+
// RFC-1237: consumeCommonFlags strips --dry-run into context.dryRun before
|
|
45
|
+
// dispatch — the input.flags read stays for direct/programmatic callers.
|
|
46
|
+
const dryRun = context.dryRun === true || input.flags["dry-run"] === true;
|
|
47
|
+
const concurrency = resolveConcurrency(input.flags["concurrency"], (m) => logger.warn(m));
|
|
37
48
|
if (!targetId && !allMode) {
|
|
38
49
|
return {
|
|
39
50
|
data: {
|
|
@@ -54,20 +65,19 @@ export async function runRfcVerificationRefresh(input, context) {
|
|
|
54
65
|
const diagnostics = [];
|
|
55
66
|
const gitContext = await captureGitContext(workspaceRoot);
|
|
56
67
|
const kernelVersion = await getKernelVersion(workspaceRoot);
|
|
57
|
-
|
|
68
|
+
const processFile = async (fileName) => {
|
|
58
69
|
const parsedFile = await readAndParseRfc(rfcDirPath, fileName);
|
|
59
70
|
if (!parsedFile)
|
|
60
|
-
|
|
71
|
+
return {};
|
|
61
72
|
if ("error" in parsedFile)
|
|
62
|
-
|
|
73
|
+
return {};
|
|
63
74
|
const fm = parsedFile.parsed.frontmatter;
|
|
64
75
|
const rfcId = String(fm["id"] ?? "");
|
|
65
76
|
const status = String(fm["status"] ?? "");
|
|
66
77
|
if (targetId && rfcId.toLowerCase() !== targetId.toLowerCase())
|
|
67
|
-
|
|
78
|
+
return {};
|
|
68
79
|
if (status !== "implemented") {
|
|
69
|
-
|
|
70
|
-
continue;
|
|
80
|
+
return { skippedEntry: { rfcId, reason: "not implemented" } };
|
|
71
81
|
}
|
|
72
82
|
const slug = rfcId.toLowerCase();
|
|
73
83
|
const evidenceFileName = `${slug}.generated.yaml`;
|
|
@@ -84,14 +94,9 @@ export async function runRfcVerificationRefresh(input, context) {
|
|
|
84
94
|
catch {
|
|
85
95
|
// file doesn't exist or can't be parsed
|
|
86
96
|
}
|
|
87
|
-
if (!existingEnvelope) {
|
|
88
|
-
skipped.push({ rfcId, reason: "no evidence envelope" });
|
|
89
|
-
continue;
|
|
90
|
-
}
|
|
91
97
|
const acceptance = fm["acceptance"];
|
|
92
|
-
if (!Array.isArray(acceptance) || acceptance.length === 0) {
|
|
93
|
-
|
|
94
|
-
continue;
|
|
98
|
+
if (!existingEnvelope || !Array.isArray(acceptance) || acceptance.length === 0) {
|
|
99
|
+
return { skippedEntry: { rfcId, reason: "no evidence envelope" } };
|
|
95
100
|
}
|
|
96
101
|
const probes = acceptance;
|
|
97
102
|
const probeRecords = [];
|
|
@@ -112,34 +117,63 @@ export async function runRfcVerificationRefresh(input, context) {
|
|
|
112
117
|
const envelope = buildEvidenceEnvelope(rfcId, String(fm["title"] ?? ""), String(fm["status"] ?? ""), rfcMarkdown, probes, probeRecords, gitContext, kernelVersion, existingEnvelope.emittedAt);
|
|
113
118
|
envelope.lastRefreshedAt = now;
|
|
114
119
|
if (!dryRun) {
|
|
115
|
-
|
|
116
|
-
|
|
120
|
+
// RFC-1237: emit-canonical serialization — emit owns these envelopes;
|
|
121
|
+
// refresh owns content freshness, never file identity (OWN-DUP-01).
|
|
122
|
+
// Port write routes through recording IO under kernel --dry-run.
|
|
123
|
+
await io.writeFile(evidenceAbsPath, serializeEvidenceEnvelope(envelope));
|
|
117
124
|
}
|
|
118
125
|
const probesFailed = probeRecords.filter((r) => !r.ok).length;
|
|
119
|
-
|
|
120
|
-
rfcId,
|
|
121
|
-
file: evidenceRelPath,
|
|
122
|
-
overall: envelope.overall,
|
|
123
|
-
probesTotal: probeRecords.length,
|
|
124
|
-
probesFailed,
|
|
125
|
-
});
|
|
126
|
-
if (envelope.overall === "fail") {
|
|
127
|
-
diagnostics.push({
|
|
128
|
-
ruleId: "RFC-REFRESH-01",
|
|
129
|
-
severity: "error",
|
|
130
|
-
file: evidenceRelPath,
|
|
131
|
-
message: `${rfcId}: refresh overall is "fail" — ${probesFailed}/${probeRecords.length} probe(s) failed.`,
|
|
132
|
-
});
|
|
133
|
-
}
|
|
126
|
+
const previousOverall = existingEnvelope.overall;
|
|
134
127
|
if (outputFormat === "pretty") {
|
|
135
|
-
|
|
128
|
+
const drift = previousOverall !== envelope.overall ? `, was ${previousOverall}` : "";
|
|
129
|
+
logger.info(`[refresh] ${rfcId} → ${evidenceRelPath} (${envelope.overall}, ${probeRecords.length} probes${drift}${dryRun ? ", dry-run" : ""})`);
|
|
136
130
|
}
|
|
131
|
+
return {
|
|
132
|
+
refreshedEntry: {
|
|
133
|
+
rfcId,
|
|
134
|
+
file: evidenceRelPath,
|
|
135
|
+
overall: envelope.overall,
|
|
136
|
+
previousOverall,
|
|
137
|
+
probesTotal: probeRecords.length,
|
|
138
|
+
probesFailed,
|
|
139
|
+
},
|
|
140
|
+
...(envelope.overall === "fail"
|
|
141
|
+
? {
|
|
142
|
+
diagnostic: {
|
|
143
|
+
ruleId: "RFC-REFRESH-01",
|
|
144
|
+
severity: "error",
|
|
145
|
+
file: evidenceRelPath,
|
|
146
|
+
message: `${rfcId}: refresh overall is "fail" — ${probesFailed}/${probeRecords.length} probe(s) failed${previousOverall === "pass" ? " (regressed: was pass)" : ""}.`,
|
|
147
|
+
},
|
|
148
|
+
}
|
|
149
|
+
: {}),
|
|
150
|
+
};
|
|
151
|
+
};
|
|
152
|
+
const results = await mapWithConcurrency(allFiles, concurrency, processFile);
|
|
153
|
+
for (const r of results) {
|
|
154
|
+
if (r.refreshedEntry)
|
|
155
|
+
refreshed.push(r.refreshedEntry);
|
|
156
|
+
if (r.skippedEntry)
|
|
157
|
+
skipped.push(r.skippedEntry);
|
|
158
|
+
if (r.diagnostic)
|
|
159
|
+
diagnostics.push(r.diagnostic);
|
|
137
160
|
}
|
|
138
161
|
const passed = refreshed.filter((r) => r.overall === "pass").length;
|
|
139
162
|
const failed = refreshed.filter((r) => r.overall === "fail").length;
|
|
140
163
|
const hasFailures = failed > 0;
|
|
141
164
|
const hasSkippedNoEnvelope = skipped.some((s) => s.reason === "no evidence envelope");
|
|
142
165
|
const status = hasFailures ? "fail" : "pass";
|
|
166
|
+
const delta = {
|
|
167
|
+
recovered: refreshed
|
|
168
|
+
.filter((r) => r.previousOverall === "fail" && r.overall === "pass")
|
|
169
|
+
.map((r) => r.rfcId),
|
|
170
|
+
regressed: refreshed
|
|
171
|
+
.filter((r) => r.previousOverall === "pass" && r.overall === "fail")
|
|
172
|
+
.map((r) => r.rfcId),
|
|
173
|
+
};
|
|
174
|
+
const deltaSummary = delta.recovered.length + delta.regressed.length > 0
|
|
175
|
+
? `, ${delta.regressed.length} regressed, ${delta.recovered.length} recovered`
|
|
176
|
+
: "";
|
|
143
177
|
return {
|
|
144
178
|
data: {
|
|
145
179
|
command: "rfc.verification.refresh",
|
|
@@ -147,6 +181,7 @@ export async function runRfcVerificationRefresh(input, context) {
|
|
|
147
181
|
refreshed,
|
|
148
182
|
skipped,
|
|
149
183
|
diagnostics,
|
|
184
|
+
delta,
|
|
150
185
|
summary: {
|
|
151
186
|
total: refreshed.length,
|
|
152
187
|
passed,
|
|
@@ -155,7 +190,7 @@ export async function runRfcVerificationRefresh(input, context) {
|
|
|
155
190
|
},
|
|
156
191
|
},
|
|
157
192
|
exitCode: hasFailures || hasSkippedNoEnvelope ? 1 : 0,
|
|
158
|
-
summary: `rfc.verification.refresh: ${refreshed.length} refreshed, ${skipped.length} skipped`,
|
|
193
|
+
summary: `rfc.verification.refresh: ${refreshed.length} refreshed, ${skipped.length} skipped${deltaSummary}`,
|
|
159
194
|
};
|
|
160
195
|
}
|
|
161
196
|
//# sourceMappingURL=verification-refresh.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-refresh.js","sourceRoot":"","sources":["../../../os/rfc/verification-refresh.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"verification-refresh.js","sourceRoot":"","sources":["../../../os/rfc/verification-refresh.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../../../os/session/handlers/save.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../../../os/session/handlers/save.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AA2HrB,wBAAsB,cAAc,CAClC,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,iBAAiB,GAAG;IAAE,OAAO,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC,CAAC,CAwPjF"}
|
|
@@ -19,6 +19,11 @@ Mechanical v1 to v2 header migration across the workspace: 942 files rewritten
|
|
|
19
19
|
<item>RFC-1097: sweep — werkstatt-engine clean
|
|
20
20
|
|
|
21
21
|
Sweep batch 4: 73 Compass headers on headerless engine files (certification, component-runtime, isolation, evolution, testing), real KEY_DECISIONS on 75 files (kernel, cache, dht, swim, gitmesh, runtime), ~80 purpose expansions (CONTRACT-02/PURPOSE-02), non-goals on 13 CONTRACT-03 files, CS-07 history literal fix repo-wide (253 files). Policy: .template.ts/.template.astro excludedPaths. werkstatt-engine now 0 diagnostics.</item>
|
|
22
|
+
<item>Session-retro 2026-10-08: raw-file claiming — each .atif is claimed via
|
|
23
|
+
an atomic sibling `<name>.claim-<pid>-<token>` (io rename onto a nonexistent
|
|
24
|
+
target) before read/process/delete; another session's claim skips the file,
|
|
25
|
+
claims clean up in finally, dry-run creates none, keepRaw still preserves the
|
|
26
|
+
raw input. Closes the parallel-session read/delete race.</item>
|
|
22
27
|
</CHANGE_SUMMARY>
|
|
23
28
|
*/
|
|
24
29
|
import { ambientIo as fs } from "../../../src/utils/io.js";
|
|
@@ -161,7 +166,9 @@ export async function runSessionSave(input, context) {
|
|
|
161
166
|
else {
|
|
162
167
|
try {
|
|
163
168
|
const entries = await fs.readdir(rawDirPath);
|
|
164
|
-
|
|
169
|
+
// Only *.atif files are processed — claimed intermediates
|
|
170
|
+
// (*.atif.claim-<pid>) and in-progress writer temp files are skipped.
|
|
171
|
+
rawFiles = entries.filter((e) => e.isFile && e.name.endsWith(".atif")).map((e) => e.name);
|
|
165
172
|
}
|
|
166
173
|
catch {
|
|
167
174
|
rawFiles = [];
|
|
@@ -197,9 +204,26 @@ export async function runSessionSave(input, context) {
|
|
|
197
204
|
const skipped = [];
|
|
198
205
|
for (const rawFileName of rawFiles) {
|
|
199
206
|
const rawFilePath = path.join(rawDirPath, rawFileName);
|
|
207
|
+
// Atomic claim: rename before reading so two concurrent session.save runs
|
|
208
|
+
// (parallel agent sessions) can't process the same file — the losing
|
|
209
|
+
// rename sees ENOENT and skips. Dry-run stays read-only by design.
|
|
210
|
+
let claimedPath = rawFilePath;
|
|
211
|
+
if (!dryRun) {
|
|
212
|
+
claimedPath = `${rawFilePath}.claim-${process.pid}`;
|
|
213
|
+
try {
|
|
214
|
+
await fs.rename(rawFilePath, claimedPath);
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
if (err.code === "ENOENT") {
|
|
218
|
+
skipped.push({ rawFile: rawFileName, reason: "claimed by another process" });
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
throw err;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
200
224
|
let rawContent;
|
|
201
225
|
try {
|
|
202
|
-
rawContent = await fs.readFile(
|
|
226
|
+
rawContent = await fs.readFile(claimedPath);
|
|
203
227
|
}
|
|
204
228
|
catch (err) {
|
|
205
229
|
if (err.code === "ENOENT") {
|
|
@@ -239,7 +263,7 @@ export async function runSessionSave(input, context) {
|
|
|
239
263
|
// Delete raw file even when skipping — otherwise .atif files accumulate
|
|
240
264
|
if (!dryRun && !keepRaw) {
|
|
241
265
|
try {
|
|
242
|
-
await trashPath(
|
|
266
|
+
await trashPath(claimedPath);
|
|
243
267
|
}
|
|
244
268
|
catch (err) {
|
|
245
269
|
if (err.code !== "ENOENT") {
|
|
@@ -247,6 +271,14 @@ export async function runSessionSave(input, context) {
|
|
|
247
271
|
}
|
|
248
272
|
}
|
|
249
273
|
}
|
|
274
|
+
else if (!dryRun && claimedPath !== rawFilePath) {
|
|
275
|
+
try {
|
|
276
|
+
await fs.rename(claimedPath, rawFilePath);
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
// best-effort restore
|
|
280
|
+
}
|
|
281
|
+
}
|
|
250
282
|
continue;
|
|
251
283
|
}
|
|
252
284
|
catch {
|
|
@@ -265,10 +297,11 @@ export async function runSessionSave(input, context) {
|
|
|
265
297
|
catch (metricsErr) {
|
|
266
298
|
logger.warn(`[metrics] Failed to generate session metrics for ${id}: ${metricsErr.message}`);
|
|
267
299
|
}
|
|
268
|
-
// Delete raw file unless --keep-raw
|
|
300
|
+
// Delete raw file unless --keep-raw (then restore the original name —
|
|
301
|
+
// the claim suffix is an internal detail, not part of the file's name)
|
|
269
302
|
if (!keepRaw) {
|
|
270
303
|
try {
|
|
271
|
-
await trashPath(
|
|
304
|
+
await trashPath(claimedPath);
|
|
272
305
|
}
|
|
273
306
|
catch (err) {
|
|
274
307
|
if (err.code !== "ENOENT") {
|
|
@@ -276,6 +309,14 @@ export async function runSessionSave(input, context) {
|
|
|
276
309
|
}
|
|
277
310
|
}
|
|
278
311
|
}
|
|
312
|
+
else if (claimedPath !== rawFilePath) {
|
|
313
|
+
try {
|
|
314
|
+
await fs.rename(claimedPath, rawFilePath);
|
|
315
|
+
}
|
|
316
|
+
catch {
|
|
317
|
+
// best-effort restore — the claimed name remains, still recoverable
|
|
318
|
+
}
|
|
319
|
+
}
|
|
279
320
|
}
|
|
280
321
|
const result = {
|
|
281
322
|
command: "session.save",
|