@tacuchi/agent-workflow-cli 24.0.0 → 25.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/dist/application/checkpoint/markdown.js +85 -5
- package/dist/application/checkpoint/markdown.js.map +1 -1
- package/dist/application/checkpoint-service.js +7 -6
- package/dist/application/checkpoint-service.js.map +1 -1
- package/dist/application/checkpoint-write-service.js +270 -16
- package/dist/application/checkpoint-write-service.js.map +1 -1
- package/dist/application/flow/advance.js +60 -10
- package/dist/application/flow/advance.js.map +1 -1
- package/dist/application/flow/internal-actions.js +1 -1
- package/dist/application/flow/internal-actions.js.map +1 -1
- package/dist/application/flow/submit.js +256 -9
- package/dist/application/flow/submit.js.map +1 -1
- package/dist/application/lifecycle-target.js +16 -19
- package/dist/application/lifecycle-target.js.map +1 -1
- package/dist/application/markdown.js +6 -2
- package/dist/application/markdown.js.map +1 -1
- package/dist/application/parsers/spec-functional.js +220 -0
- package/dist/application/parsers/spec-functional.js.map +1 -0
- package/dist/application/parsers/spec-relation.js +142 -5
- package/dist/application/parsers/spec-relation.js.map +1 -1
- package/dist/application/paths-service.js +13 -0
- package/dist/application/paths-service.js.map +1 -1
- package/dist/application/plan-exec-decision-service.js +57 -4
- package/dist/application/plan-exec-decision-service.js.map +1 -1
- package/dist/application/reseal-service.js +300 -0
- package/dist/application/reseal-service.js.map +1 -0
- package/dist/application/workline-index-service.js +64 -6
- package/dist/application/workline-index-service.js.map +1 -1
- package/dist/cli/commands/checkpoint-write.js +24 -22
- package/dist/cli/commands/checkpoint-write.js.map +1 -1
- package/dist/cli/commands/index.js +5 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/reseal.js +140 -0
- package/dist/cli/commands/reseal.js.map +1 -0
- package/dist/cli/commands/status.js +5 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/help-groups.js +6 -0
- package/dist/cli/help-groups.js.map +1 -1
- package/dist/domain/effective-contract.js +10 -2
- package/dist/domain/effective-contract.js.map +1 -1
- package/dist/domain/flow/answer.js +4 -0
- package/dist/domain/flow/answer.js.map +1 -1
- package/dist/domain/flow/authority.js +99 -14
- package/dist/domain/flow/authority.js.map +1 -1
- package/dist/domain/flow/directive.js +2 -0
- package/dist/domain/flow/directive.js.map +1 -1
- package/dist/domain/flow/run-state.js +42 -0
- package/dist/domain/flow/run-state.js.map +1 -1
- package/dist/domain/lineage.js +38 -11
- package/dist/domain/lineage.js.map +1 -1
- package/package.json +1 -1
- package/skills/w/commands/plan-exec.md +1 -1
- package/skills/w/commands/spec-new.md +6 -5
- package/skills/w/context/MANIFEST.json +1 -1
- package/skills/w/harness/HARNESS.md +1 -1
- package/skills/w/hooks/README.md +13 -9
- package/skills/w/hooks/hooks.template.json +2 -2
- package/skills/w/loops/CHASSIS.md +1 -1
- package/skills/w/loops/plan-exec-loop/LOOP.md +7 -5
- package/skills/w/loops/plan-new-loop/LOOP.md +46 -41
- package/skills/w/loops/plan-refine-loop/LOOP.md +4 -4
- package/skills/w/loops/quick-loop/LOOP.md +12 -13
- package/skills/w/loops/spec-refine-loop/LOOP.md +7 -3
- package/skills/w/modules/COMPACTION.md +1 -1
- package/skills/w/modules/PLAN-INPUT.md +3 -3
- package/skills/w/modules/PROMPT-CONTINUITY.md +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-exec-decision-service.js","sourceRoot":"","sources":["../../src/application/plan-exec-decision-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plan-exec-decision-service.js","sourceRoot":"","sources":["../../src/application/plan-exec-decision-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAyB,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEtF,OAAO,EAAsB,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAE/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAA2B,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAExF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAEL,cAAc,EACd,eAAe,GAChB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAqDpC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,EAAkB,EAClB,KAAmC;IAEnC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC;IAC9B,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;IAE3B,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE;QACnE,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;QAC3B,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;KAChC,CAAC,CAAC;IACH,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,wBAAwB,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpF,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5E,MAAM,UAAU,GAAG,eAAe,CAChC,MAAM,CAAC,KAAK,CAAC,QAAQ,EACrB,QAAQ,CAAC,QAAQ,EACjB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CACvB,CAAC;IACF,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,SAAS;YACZ,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC9E,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC;YAClF,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,YAAY,EAAE,IAAI,EAAE,YAAY,IAAI,EAAE;aACvC,CAAC;QACJ,CAAC;QACD,KAAK,cAAc;YACjB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE;oBACP,IAAI,EAAE,4BAA4B;oBAClC,OAAO,EAAE,UAAU,CAAC,GAAG;oBACvB,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B;aACF,CAAC;QACJ,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE;gBACzC,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,SAAS,EAAE,iCAAiC;gBAC5C,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,KAAK,EAAE;oBACL,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE;4BACJ,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;4BAC3B,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;4BAC/B,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;yBAChC;wBACD,IAAI,EAAE;4BACJ,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,MAAM,EAAE,OAAO,CAAC,UAAU;4BAC1B,MAAM,EAAE,UAAU,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;yBACjD;wBACD,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;qBACvF;iBACF;aACF,CAAC,CAAC;YACH,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBACnC,OAAO;oBACL,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;iBAC7B,CAAC;YACJ,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAClC,OAAO;oBACL,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;oBACtB,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;oBAChC,YAAY,EAAE,QAAQ,CAAC,YAAY;iBACpC,CAAC;YACJ,CAAC;YACD,OAAO,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;AACH,CAAC;AAED,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,EAAkB,EAClB,KAAmB,EACnB,IAAY,EACZ,QAAqC;IAErC,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACtE,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC;IAChG,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3E,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;IACpE,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,EAAE;QAC9D,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI;QAC5B,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM;KACjC,CAAC,CAAC;IACH,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,wBAAwB,CACvC,MAAM,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,EACnD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CACvB,CAAC;IACF,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,OAAO;QACL,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI;QAC3B,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,YAAY;QAC3C,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO;QACjC,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,eAAe;QACjD,cAAc,EAAE,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;KAC5E,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,EAAkB,EAClB,KAAmB,EACnB,IAAY,EACZ,WAAoC;IAEpC,8EAA8E;IAC9E,+EAA+E;IAC/E,yEAAyE;IACzE,IAAI,WAAW,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACtC,OAAO;YACL,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,YAAY,EAAE,WAAW,CAAC,YAAY;SACvC,CAAC;IACJ,CAAC;IACD,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACzE,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO;YACL,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,YAAY,EAAE,WAAW,CAAC,YAAY;SACvC,CAAC;IACJ,CAAC;IACD,OAAO,sBAAsB,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;QAC7C,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE;YACR,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,SAAS,EAAE,WAAW,CAAC,UAAU;SAClC;QACD,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,SAAS,EAAE,WAAW,CAAC,UAAU;KAClC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,KAAK,UAAU,gBAAgB,CAC7B,EAAkB,EAClB,IAAY,EACZ,QAAuB;IAEvB,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC1D,IAAI,CAAC;QACH,OAAO;YACL,GAAG,QAAQ;YACX,aAAa,EAAE,kBAAkB,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;SAChF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AASD,KAAK,UAAU,WAAW,CACxB,EAAkB,EAClB,KAAmC;IAEnC,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CACT,+BAA+B,EAC/B,qBAAqB,KAAK,CAAC,IAAI,8BAA8B,EAC7D,+FAA+F,CAChG,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACxD,wEAAwE;QACxE,4EAA4E;QAC5E,8EAA8E;QAC9E,uEAAuE;QACvE,OAAO,IAAI,CACT,+BAA+B,EAC/B,2DAA2D,EAC3D,mNAAmN,CACpN,CAAC;IACJ,CAAC;IACD,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CACT,+BAA+B,EAC/B,qBAAqB,QAAQ,yCAAyC,EACtE,mFAAmF,CACpF,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5E,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,IAAI,CACT,+BAA+B,EAC/B,YAAY,KAAK,CAAC,IAAI,oCAAoC,EAC1D,sEAAsE,CACvE,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,IAAI,CACT,+BAA+B,EAC/B,YAAY,QAAQ,gCAAgC,EACpD,wEAAwE,CACzE,CAAC;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE;YACL,QAAQ,EAAE;gBACR,qEAAqE;gBACrE,wEAAwE;gBACxE,wEAAwE;gBACxE,wDAAwD;gBACxD,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC;gBACtC,uEAAuE;gBACvE,yEAAyE;gBACzE,sEAAsE;gBACtE,uEAAuE;gBACvE,8DAA8D;gBAC9D,aAAa,EAAE,kBAAkB,CAAC,QAAQ,CAAC;gBAC3C,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC;aACvD;YACD,UAAU;YACV,QAAQ;YACR,SAAS,EAAE,aAAa,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;SAC7E;KACF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAClB,KAAc;IAEd,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9E,OAAO,IAAI,CACT,6BAA6B,EAC7B,mFAAmF,EACnF,0GAA0G,CAC3G,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CACjC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAC1F,CAAC;IACF,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE;YACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,QAAsE;SAC9E;KACF,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;QACxF,OAAO,KAAK,CAAC;IACf,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,UAAU,CAAC,MAAM;QAC7F,OAAO,KAAK,CAAC;IACf,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE;QACxC,IACE,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACnB,OAAO,QAAQ,CAAC,GAAG,KAAK,QAAQ;YAChC,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,EACpC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IACE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAChC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EACtB,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,CACL,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACpB,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAC7E,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,MAAc;IAC5C,MAAM,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC;IACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtD,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,CAAC;AAED,SAAS,OAAO,CAAC,WAAmB;IAClC,OAAO,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAChD,CAAC;AAED,SAAS,WAAW,CAAC,OAAsE;IAIzF,OAAO,OAAO,KAAK,SAAS;QAC1B,CAAC,CAAC,IAAI,CACF,kCAAkC,EAClC,kDAAkD,EAClD,4CAA4C,CAC7C;QACH,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,IAAI,CACX,IAAY,EACZ,OAAe,EACf,MAAc;IAEd,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Re-sealing a plan's baseline: the cheap exit a legitimate divergence has.
|
|
3
|
+
*
|
|
4
|
+
* The seal digests the spec's FUNCTIONAL payload, so an editorial edit no longer
|
|
5
|
+
* moves it. Two divergences survive that, and both are legitimate:
|
|
6
|
+
*
|
|
7
|
+
* - a plan whose seal is the LEGACY byte-exact digest, which any edit of its
|
|
8
|
+
* spec — a comma in `## Context` included — turns `divergent`;
|
|
9
|
+
* - a functional change the plan ALREADY covers as written, reviewed by a person
|
|
10
|
+
* who concluded the plan still holds.
|
|
11
|
+
*
|
|
12
|
+
* Until now the only way out of either was a whole `/w:plan-refine`: thirteen
|
|
13
|
+
* steps, the plan's bytes redrafted, a preview approved and a publication — all
|
|
14
|
+
* of it to make the publication recompute one line. And a divergent plan cannot
|
|
15
|
+
* close (`PLAN_EXEC_DONE_BASELINE_INVALID`), so the cost was not optional.
|
|
16
|
+
*
|
|
17
|
+
* What this is NOT is an automatic repair. A re-seal is a HUMAN ASSERTION —
|
|
18
|
+
* "I read this plan against the spec as it stands and it still holds" — so it is
|
|
19
|
+
* approved explicitly, by the digest of the very proposal that was shown, and it
|
|
20
|
+
* never fires on its own. Nothing here decides that a plan is still valid; it
|
|
21
|
+
* only records that somebody did.
|
|
22
|
+
*
|
|
23
|
+
* The two halves are the retirement's, deliberately: {@link prepareReseal} is
|
|
24
|
+
* read-only and answers with the preview plus the sealed proposal, and
|
|
25
|
+
* {@link applyReseal} RE-RUNS the preparation, demands that the approval still
|
|
26
|
+
* matches what the recomputation produces, and only then publishes under the
|
|
27
|
+
* workspace lock with the plan's own digest as the compare-and-swap base. That is
|
|
28
|
+
* what makes it impossible to overwrite a `plan-exec` publication in flight: if
|
|
29
|
+
* the plan or its spec moved since the preview, the recomputed digest differs and
|
|
30
|
+
* the approval no longer fits.
|
|
31
|
+
*/
|
|
32
|
+
import { join } from "node:path";
|
|
33
|
+
import { normalizeCorrelativeInput } from "../domain/correlative.js";
|
|
34
|
+
import { formatSpecBaseline, withSpecBaseline } from "../domain/lineage.js";
|
|
35
|
+
import { baseDigest, sealProposal } from "../domain/proposal.js";
|
|
36
|
+
import { checkSafeRelativePath } from "../domain/safe-path.js";
|
|
37
|
+
import { resolveCoreDocsCanon } from "./docs-canon-service.js";
|
|
38
|
+
import { applyLocalProposal } from "./local-proposal.js";
|
|
39
|
+
import { functionalSpecDigest, unclosedSpecFence } from "./parsers/spec-functional.js";
|
|
40
|
+
import { parseDerivedFromPath, parsePlanBaselineSeal, parseSpecRelation, } from "./parsers/spec-relation.js";
|
|
41
|
+
import { resolveWorkspaceRoot } from "./paths-service.js";
|
|
42
|
+
/** What the proposal calls itself: one operation, one vocabulary. */
|
|
43
|
+
const RESEAL_OPERATION = "reseal.baseline";
|
|
44
|
+
function fail(code, message, action) {
|
|
45
|
+
return { status: "failed", failure: { code, message, action } };
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Everything a re-seal would write, having written nothing.
|
|
49
|
+
*
|
|
50
|
+
* Read-only so it is safe to run on the wrong target — which is exactly what
|
|
51
|
+
* somebody about to assert "this plan still holds" needs to be able to do. The
|
|
52
|
+
* preview a person reads, the digest they approve and the bytes `apply` publishes
|
|
53
|
+
* are three views of ONE record, so "what I was shown" and "what will happen"
|
|
54
|
+
* cannot drift into two descriptions that disagree.
|
|
55
|
+
*/
|
|
56
|
+
export async function prepareReseal(fs, env, paths, target) {
|
|
57
|
+
const root = await resolveWorkspaceRoot(fs, env, paths);
|
|
58
|
+
const canon = await resolveCoreDocsCanon(fs, paths);
|
|
59
|
+
if (!canon.ok) {
|
|
60
|
+
return fail("RESEAL_DOCS_CANON_INVALID", `no se puede ubicar el plan: ${canon.error}`, "corregí [docs] para conservar el layout canónico y volvé a preparar el re-sello");
|
|
61
|
+
}
|
|
62
|
+
const located = await locatePlan(fs, root, canon.canon.plan, target);
|
|
63
|
+
if ("failure" in located)
|
|
64
|
+
return located;
|
|
65
|
+
const planPath = located.path;
|
|
66
|
+
let planText;
|
|
67
|
+
try {
|
|
68
|
+
planText = await fs.readText(join(root, planPath));
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return fail("RESEAL_PLAN_ABSENT", `'${planPath}' no se puede leer: no hay plan al que re-sellarle el baseline`, `verificá la ruta del plan bajo '${canon.canon.plan}/' y volvé a preparar el re-sello`);
|
|
72
|
+
}
|
|
73
|
+
const declared = sealableSpec(planPath, planText, canon.canon.spec);
|
|
74
|
+
if ("failure" in declared)
|
|
75
|
+
return declared;
|
|
76
|
+
const derived = declared.path;
|
|
77
|
+
const specAbsolute = join(root, derived);
|
|
78
|
+
if (!(await fs.exists(specAbsolute))) {
|
|
79
|
+
return fail("RESEAL_SPEC_ABSENT", `'${derived}' no está en el workspace: no hay contrato vigente contra el que sellar`, `restaurá la spec en '${canon.canon.spec}/' o corregí el '> Derived from …' del plan`);
|
|
80
|
+
}
|
|
81
|
+
let specText;
|
|
82
|
+
try {
|
|
83
|
+
specText = await fs.readText(specAbsolute);
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
return fail("RESEAL_SPEC_UNREADABLE", `'${derived}' no se puede leer: ${err instanceof Error ? err.message : String(err)}`, "resolvé el acceso a la spec y volvé a preparar el re-sello: un sello sobre bytes que no se leyeron no afirma nada");
|
|
87
|
+
}
|
|
88
|
+
const fence = unclosedSpecFence(specText);
|
|
89
|
+
if (fence !== null) {
|
|
90
|
+
// With a fence open the spec has no visible contract sections, so the
|
|
91
|
+
// functional digest degrades to the exact bytes: sealing that would pin a
|
|
92
|
+
// digest guaranteed to diverge again on the next editorial edit, and the
|
|
93
|
+
// person would come back here forever. The exit is upstream, in the spec.
|
|
94
|
+
return fail("RESEAL_SPEC_FENCE_UNCLOSED", `'${derived}' tiene un fence sin cerrar en la línea ${fence + 1}: sus secciones de contrato no se ven y el sello caería al byte-exacto, que vuelve a divergir con cualquier edición`, `cerrá la fence abierta en la línea ${fence + 1} de '${derived}' y volvé a preparar el re-sello`);
|
|
95
|
+
}
|
|
96
|
+
const baseline = {
|
|
97
|
+
path: derived,
|
|
98
|
+
number: declared.number,
|
|
99
|
+
digest: functionalSpecDigest(specText),
|
|
100
|
+
};
|
|
101
|
+
const seal = parsePlanBaselineSeal(planText, canon.canon.spec);
|
|
102
|
+
const preview = {
|
|
103
|
+
plan: planPath,
|
|
104
|
+
spec: derived,
|
|
105
|
+
sealed_digest: seal.status === "sealed" ? seal.baseline.digest : null,
|
|
106
|
+
current_digest: baseline.digest,
|
|
107
|
+
baseline_line: formatSpecBaseline(baseline),
|
|
108
|
+
};
|
|
109
|
+
const next = withSpecBaseline(planText, baseline);
|
|
110
|
+
if (next === planText) {
|
|
111
|
+
// Two ways the stamp is a no-op, and they mean opposite things. The seal is
|
|
112
|
+
// already the current one — idempotent — or the document has no header
|
|
113
|
+
// blockquote for the line to live in, and inventing one would restructure
|
|
114
|
+
// somebody's plan so a field fits.
|
|
115
|
+
if (seal.status === "sealed" && seal.baseline.digest === baseline.digest) {
|
|
116
|
+
return { status: "already", preview };
|
|
117
|
+
}
|
|
118
|
+
return fail("RESEAL_PLAN_HEADERLESS", `'${planPath}' no tiene blockquote de cabecera donde vive el sello: el re-sello no reestructura el plan para que quepa un campo`, "escribí la cabecera del plan como blockquote ('> Derived from <ruta de la spec>') y volvé a preparar el re-sello");
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
status: "prepared",
|
|
122
|
+
preview,
|
|
123
|
+
proposal: sealProposal({
|
|
124
|
+
operation: RESEAL_OPERATION,
|
|
125
|
+
artifacts: [{ path: planPath, content: next, overwrite: true }],
|
|
126
|
+
// The plan's CURRENT digest, so the write lands on the bytes the preview
|
|
127
|
+
// was computed from and on no others.
|
|
128
|
+
bases: [{ path: planPath, digest: baseDigest(planText) }],
|
|
129
|
+
effects: ["mutate_overwrite"],
|
|
130
|
+
requiresApproval: ["mutate_overwrite"],
|
|
131
|
+
}),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Land exactly the line that was previewed, or nothing at all.
|
|
136
|
+
*
|
|
137
|
+
* The preparation runs AGAIN, from the live workspace, and the approval is
|
|
138
|
+
* compared against what THAT produces. Trusting the digest a preview handed back
|
|
139
|
+
* would authorize a state that may no longer exist — and the state that moves
|
|
140
|
+
* here is not hypothetical: `plan-exec` publishes into the same plan while a
|
|
141
|
+
* person reads a preview. Under that recomputation `applyLocalProposal` adds the
|
|
142
|
+
* lock, the compare-and-swap on the plan's bytes and the all-or-nothing write,
|
|
143
|
+
* which is why none of the three is re-implemented here.
|
|
144
|
+
*/
|
|
145
|
+
export async function applyReseal(fs, env, paths, input) {
|
|
146
|
+
const prepared = await prepareReseal(fs, env, paths, input.target);
|
|
147
|
+
if (prepared.status === "failed")
|
|
148
|
+
return prepared;
|
|
149
|
+
if (prepared.status === "already")
|
|
150
|
+
return { status: "already", preview: prepared.preview };
|
|
151
|
+
if (input.approval.trim() !== prepared.proposal.digest) {
|
|
152
|
+
return fail("RESEAL_APPROVAL_MISMATCH", "lo aprobado no es lo que se re-sellaría: el plan o su spec cambiaron desde la vista previa", `volvé a correr 'aw reseal prepare ${prepared.preview.plan}', leé la vista previa vigente y aprobá ese digest`);
|
|
153
|
+
}
|
|
154
|
+
const root = await resolveWorkspaceRoot(fs, env, paths);
|
|
155
|
+
const applied = await applyLocalProposal(fs, paths, {
|
|
156
|
+
root,
|
|
157
|
+
proposal: prepared.proposal,
|
|
158
|
+
// The one class this exercises, granted by the person who typed the digest.
|
|
159
|
+
// Nothing is self-authorized: overwriting a published contract is exactly
|
|
160
|
+
// what may not happen without somebody saying so.
|
|
161
|
+
approval: { digest: prepared.proposal.digest, granted: ["mutate_overwrite"] },
|
|
162
|
+
selfAuthorized: [],
|
|
163
|
+
});
|
|
164
|
+
if (!applied.ok) {
|
|
165
|
+
return {
|
|
166
|
+
status: "failed",
|
|
167
|
+
failure: {
|
|
168
|
+
code: applied.failure.code,
|
|
169
|
+
message: applied.failure.message,
|
|
170
|
+
action: applied.failure.action,
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
status: "applied",
|
|
176
|
+
preview: prepared.preview,
|
|
177
|
+
digest: prepared.proposal.digest,
|
|
178
|
+
written: applied.result.written,
|
|
179
|
+
already_applied: applied.result.already_applied,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* The spec this plan's HEADER declares, once it is sealable — or the refusal.
|
|
184
|
+
*
|
|
185
|
+
* The path is the seal's hint and the number is its identity, so both have to come
|
|
186
|
+
* from the SAME header declaration. `Derived from` is the only evidence that
|
|
187
|
+
* qualifies: a spec named in `## Origin` prose is a mention, and sealing a version
|
|
188
|
+
* against a mention would pin a contract nobody declared.
|
|
189
|
+
*
|
|
190
|
+
* And the path is then guarded the way every write boundary guards a path a
|
|
191
|
+
* DOCUMENT supplies — the peer that seals from `submit.ts` refuses to seal at all
|
|
192
|
+
* when this fails. What that stops is not hypothetical: the harvesting pattern
|
|
193
|
+
* accepts `.` and `/` after `-spec`, so `docs/specs/040-spec-../../…/secreto.md`
|
|
194
|
+
* is a valid `Derived from` for it, and the board resolves a seal by NUMBER — a
|
|
195
|
+
* digest taken from that file is bytes the board can never match. The person pays
|
|
196
|
+
* the human assertion, the divergence stays, and every later `prepare` answers
|
|
197
|
+
* `already`: a plan left permanently unclosable by the command that exists to
|
|
198
|
+
* close it. Containment is NOT re-checked on top, because the pattern anchors its
|
|
199
|
+
* match at the canon's own spec folder, so a path with no relative segment is
|
|
200
|
+
* already inside it (unlike `locatePlan`, whose target comes from a person's argv).
|
|
201
|
+
*/
|
|
202
|
+
function sealableSpec(planPath, planText, specDir) {
|
|
203
|
+
const derived = parseDerivedFromPath(planText, specDir);
|
|
204
|
+
const relation = parseSpecRelation(planText, specDir);
|
|
205
|
+
if (relation.status === "standalone") {
|
|
206
|
+
return fail("RESEAL_PLAN_STANDALONE", `'${planPath}' se declara standalone ('> Standalone: …'): un plan nacido de la conversación no deriva de ninguna spec, así que no hay versión contra la que re-sellar`, "si en realidad deriva de una spec, declarala con '> Derived from <ruta de la spec>' en su cabecera; si no deriva de ninguna, no hay baseline que re-sellar y su sello ausente no es un defecto");
|
|
207
|
+
}
|
|
208
|
+
if (derived === null || relation.status !== "declared" || relation.evidence !== "derived-from") {
|
|
209
|
+
return undeclaredHeaderLineage(planPath, relation, specDir);
|
|
210
|
+
}
|
|
211
|
+
const safe = checkSafeRelativePath(derived);
|
|
212
|
+
if (!safe.ok) {
|
|
213
|
+
return fail("RESEAL_SPEC_PATH_INVALID", `el '> Derived from' de '${planPath}' apunta a '${derived}', que no es una ruta del workspace: ${safe.why}`, `corregí el '> Derived from ${specDir}/NNN-spec-<slug>.md' del plan y volvé a preparar el re-sello: el sello se digiere de la spec que el tablero resuelve por número, y un archivo fuera de esa carpeta dejaría sello y tablero digiriendo dos documentos distintos`);
|
|
214
|
+
}
|
|
215
|
+
return { path: derived, number: relation.number };
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Why a header that is not standalone still cannot be sealed — said about the
|
|
219
|
+
* document that got the refusal.
|
|
220
|
+
*
|
|
221
|
+
* One code, four sentences, because four different populations reach here and each
|
|
222
|
+
* one is a different repair. Answering all of them "this plan is standalone" was
|
|
223
|
+
* the defect worth naming: the LEGACY plan that declares its spec in `## Origin`
|
|
224
|
+
* is precisely the population that carries a byte-exact seal, so it is the one the
|
|
225
|
+
* board sends here most often — and telling it that it declares no spec is false
|
|
226
|
+
* twice over, leaving a plan that cannot close and two surfaces contradicting each
|
|
227
|
+
* other about the same document.
|
|
228
|
+
*/
|
|
229
|
+
function undeclaredHeaderLineage(planPath, relation, specDir) {
|
|
230
|
+
const code = "RESEAL_PLAN_LINEAGE_UNDECLARED";
|
|
231
|
+
const stamped = "el sello se estampa desde el '> Derived from …' de la cabecera";
|
|
232
|
+
if (relation.status === "declared" && relation.evidence !== "derived-from") {
|
|
233
|
+
return fail(code, `'${planPath}' declara la spec ${relation.number} en '## Origin' y no en su cabecera: ${stamped}, y una mención en prosa no dice de qué ARCHIVO leer la versión vigente`, `agregá '> Derived from ${specDir}/${relation.number}-spec-<slug>.md' a la cabecera del plan y volvé a preparar el re-sello`);
|
|
234
|
+
}
|
|
235
|
+
if (relation.status === "declared") {
|
|
236
|
+
return fail(code, `el '> Derived from' de '${planPath}' nombra más de una ruta para la spec ${relation.number}: ${stamped}, y dos rutas no sellan UNA versión`, "dejá una sola ruta de spec en el '> Derived from' del plan y volvé a preparar el re-sello");
|
|
237
|
+
}
|
|
238
|
+
if (relation.status === "ambiguous") {
|
|
239
|
+
return fail(code, `'${planPath}' nombra más de una spec de origen (${relation.numbers.join(", ")}): ${stamped}, y dos orígenes no sellan UNA versión`, "dejá una sola spec de origen en el plan y volvé a preparar el re-sello");
|
|
240
|
+
}
|
|
241
|
+
return fail(code, `'${planPath}' no declara ninguna spec de origen ni se declara standalone: sin spec declarada no hay versión contra la que re-sellar`, `si el plan deriva de una spec, declarala con '> Derived from ${specDir}/NNN-spec-<slug>.md'; si nació de la conversación, declaralo con '> Standalone: <de dónde salió>' y no hay baseline que re-sellar`);
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* The plan a target names: an exact workspace-relative path, or a correlative
|
|
245
|
+
* resolved against the documentary canon.
|
|
246
|
+
*
|
|
247
|
+
* The short form exists because typing the whole slug to fix one line is
|
|
248
|
+
* ceremony, and it resolves against the CANON rather than a literal `docs/plans`
|
|
249
|
+
* so a workspace that declares its own plan folder is read the way every other
|
|
250
|
+
* surface reads it. A path is checked with the same guard every write boundary
|
|
251
|
+
* uses and then required to be INSIDE that folder — comparing segments, so
|
|
252
|
+
* `docs/plans-viejos` never passes as `docs/plans`: a re-seal writes a plan's
|
|
253
|
+
* header, and nothing else in the tree is a plan.
|
|
254
|
+
*/
|
|
255
|
+
async function locatePlan(fs, root, planDir, target) {
|
|
256
|
+
const raw = target.trim();
|
|
257
|
+
if (raw.includes("/") || raw.endsWith(".md")) {
|
|
258
|
+
const safe = checkSafeRelativePath(raw);
|
|
259
|
+
if (!safe.ok) {
|
|
260
|
+
return fail("RESEAL_TARGET_INVALID", `'${target}' no es una ruta del workspace: ${safe.why}`, `pasá la ruta del plan relativa al workspace ('${planDir}/NNN-plan-<slug>.md') o su correlativo`);
|
|
261
|
+
}
|
|
262
|
+
const expected = planDir.split("/");
|
|
263
|
+
const inside = safe.segments.length > expected.length &&
|
|
264
|
+
expected.every((segment, index) => safe.segments[index] === segment);
|
|
265
|
+
if (!inside) {
|
|
266
|
+
return fail("RESEAL_TARGET_INVALID", `'${safe.path}' no está bajo '${planDir}/': el re-sello escribe la cabecera de un plan y nada más`, `pasá la ruta de un plan bajo '${planDir}/' o su correlativo`);
|
|
267
|
+
}
|
|
268
|
+
return { path: safe.path };
|
|
269
|
+
}
|
|
270
|
+
const number = normalizeCorrelativeInput(raw);
|
|
271
|
+
if (number === null) {
|
|
272
|
+
return fail("RESEAL_TARGET_INVALID", `'${target}' no es ni una ruta ni un correlativo`, `pasá la ruta del plan ('${planDir}/NNN-plan-<slug>.md') o su correlativo ('035')`);
|
|
273
|
+
}
|
|
274
|
+
const matches = await plansNumbered(fs, join(root, planDir), number);
|
|
275
|
+
const [first] = matches;
|
|
276
|
+
if (first === undefined) {
|
|
277
|
+
return fail("RESEAL_PLAN_ABSENT", `no hay ningún plan '${number}' en '${planDir}/'`, `verificá el correlativo con 'aw status' o pasá la ruta exacta del plan`);
|
|
278
|
+
}
|
|
279
|
+
if (matches.length > 1) {
|
|
280
|
+
return fail("RESEAL_TARGET_AMBIGUOUS", `'${number}' nombra ${matches.length} documentos en '${planDir}/': ${matches.join(", ")}`, "pasá la ruta exacta del plan que querés re-sellar");
|
|
281
|
+
}
|
|
282
|
+
return { path: `${planDir}/${first}` };
|
|
283
|
+
}
|
|
284
|
+
/** File names of `planDir` that carry this correlative, in directory order. */
|
|
285
|
+
async function plansNumbered(fs, absoluteDir, number) {
|
|
286
|
+
let entries;
|
|
287
|
+
try {
|
|
288
|
+
entries = await fs.list(absoluteDir);
|
|
289
|
+
}
|
|
290
|
+
catch {
|
|
291
|
+
// A folder that is not there holds no plan: the caller reports the absence
|
|
292
|
+
// of the document, which is what a person can act on.
|
|
293
|
+
return [];
|
|
294
|
+
}
|
|
295
|
+
const named = new RegExp(`^${number}-.*\\.md$`);
|
|
296
|
+
return entries
|
|
297
|
+
.filter((entry) => entry.type === "file" && named.test(entry.name))
|
|
298
|
+
.map((entry) => entry.name);
|
|
299
|
+
}
|
|
300
|
+
//# sourceMappingURL=reseal-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reseal-service.js","sourceRoot":"","sources":["../../src/application/reseal-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { basename, join, relative } from "node:path";
|
|
2
2
|
import { CORRELATIVE_SOURCE, compareCorrelatives, isCorrelative } from "../domain/correlative.js";
|
|
3
3
|
import { composeEffectiveContract } from "../domain/effective-contract.js";
|
|
4
|
-
import { alignSpecBaseline, } from "../domain/lineage.js";
|
|
4
|
+
import { alignSpecBaseline, specBaselineDigest, } from "../domain/lineage.js";
|
|
5
5
|
import { reconciliationOf } from "../domain/reconciliation.js";
|
|
6
6
|
import { sanctionedActionFor, scanSlots } from "./claims-recovery.js";
|
|
7
7
|
import { localDateIso } from "./dates.js";
|
|
@@ -13,6 +13,7 @@ import { firstNonEmptyLine, parseMdSection, parseMdSectionBilingual } from "./ma
|
|
|
13
13
|
import { parsePhases } from "./parsers/phases.js";
|
|
14
14
|
import { parsePlanStatus } from "./parsers/plan-status.js";
|
|
15
15
|
import { parseProjectBlock } from "./parsers/project-block.js";
|
|
16
|
+
import { functionalSpecDigest, unclosedSpecFence } from "./parsers/spec-functional.js";
|
|
16
17
|
import { parsePlanBaselineSeal, parseSpecCriteria, parseSpecRelation, } from "./parsers/spec-relation.js";
|
|
17
18
|
import { parseTasks } from "./parsers/tasks.js";
|
|
18
19
|
import { listPendingJournals } from "./retirement/journal.js";
|
|
@@ -327,6 +328,18 @@ export function planPresentation(plan, designs) {
|
|
|
327
328
|
},
|
|
328
329
|
};
|
|
329
330
|
}
|
|
331
|
+
// A plan born in the conversation, said BEFORE the unsealed branch and with no
|
|
332
|
+
// warning at all — that is the whole point. Its seal is absent and its
|
|
333
|
+
// alignment therefore `unsealed`, so without this row it would fall into the
|
|
334
|
+
// legacy route and be told forever that it "no afirma de qué versión de la spec
|
|
335
|
+
// derivó" about a spec it never had. Nothing else changes: it runs, and it
|
|
336
|
+
// closes, exactly like a normal plan.
|
|
337
|
+
if (plan.spec.status === "standalone") {
|
|
338
|
+
return {
|
|
339
|
+
detail: { ...base, ...normalPlanNext(plan) },
|
|
340
|
+
action: { kind: "continue", command: `/w:plan-exec ${plan.file}`, mode: "standalone" },
|
|
341
|
+
};
|
|
342
|
+
}
|
|
330
343
|
// A legacy open plan stays executable even when its counters require
|
|
331
344
|
// reconciliation. Compatibility is an explicit mode rather than a warning
|
|
332
345
|
// accidentally lost behind the counter repair route.
|
|
@@ -422,11 +435,26 @@ function describePendingReconciliation(plan) {
|
|
|
422
435
|
* "it does not have one" — never "aligned" and never "derived from the current
|
|
423
436
|
* contract". A divergent seal is the louder version of the same problem and gets
|
|
424
437
|
* its own line rather than being folded in.
|
|
438
|
+
*
|
|
439
|
+
* The divergent line also names the CHEAP exit, because "review the plan against
|
|
440
|
+
* the spec" has two possible outcomes and only one of them needs a redesign. When
|
|
441
|
+
* the review concludes the plan still holds — the whole of the case for a legacy
|
|
442
|
+
* byte-exact seal, which any editorial edit turns divergent — `aw reseal` closes
|
|
443
|
+
* it in two commands. The handoff to `/w:plan-refine` stays the recommended
|
|
444
|
+
* action, and this is the alternative to it, never its replacement.
|
|
445
|
+
*
|
|
446
|
+
* When the divergence is a spec with an unclosed FENCE, neither exit applies and
|
|
447
|
+
* the line says so: the contract sections are invisible, so the seal fell back to
|
|
448
|
+
* the exact bytes and the next edit diverges again — re-sealing that would be the
|
|
449
|
+
* loop, not the exit.
|
|
425
450
|
*/
|
|
426
451
|
function describeUnprovenBaseline(plan) {
|
|
427
452
|
const baseline = plan.baseline;
|
|
428
453
|
if (baseline.status === "divergent") {
|
|
429
|
-
|
|
454
|
+
if (baseline.unclosed_fence !== undefined) {
|
|
455
|
+
return `BASELINE DIVERGENTE — la spec tiene un fence sin cerrar en la línea ${baseline.unclosed_fence + 1}: cerralo y volvé a mirar; hasta entonces el sello cae al byte-exacto y cualquier edición vuelve a divergir`;
|
|
456
|
+
}
|
|
457
|
+
return `BASELINE DIVERGENTE — la spec cambió desde que se selló (${baseline.sealed_digest} → ${baseline.current_digest}): revisá el plan contra la spec vigente antes de seguir; si el plan sigue vigente tal cual, cerrá la divergencia con 'aw reseal prepare ${plan.file}'`;
|
|
430
458
|
}
|
|
431
459
|
if (baseline.status === "malformed") {
|
|
432
460
|
return `BASELINE ILEGIBLE — ${baseline.why}: ${baseline.action}`;
|
|
@@ -600,6 +628,25 @@ async function readPlans(fs, cwd, specs, docs, now, held = new Set()) {
|
|
|
600
628
|
specTexts.set(number, text);
|
|
601
629
|
return text;
|
|
602
630
|
};
|
|
631
|
+
// Digested once per spec too, and for the same reason: the functional payload
|
|
632
|
+
// is what a seal means today, the exact bytes are what a legacy seal meant,
|
|
633
|
+
// and two plans of one spec must be judged against one reading of both.
|
|
634
|
+
const specDigests = new Map();
|
|
635
|
+
const specDigestsOf = async (number) => {
|
|
636
|
+
const cached = specDigests.get(number);
|
|
637
|
+
if (cached !== undefined)
|
|
638
|
+
return cached;
|
|
639
|
+
const text = await specTextOf(number);
|
|
640
|
+
const digests = text === null
|
|
641
|
+
? null
|
|
642
|
+
: {
|
|
643
|
+
functional: functionalSpecDigest(text),
|
|
644
|
+
exact: specBaselineDigest(text),
|
|
645
|
+
unclosed_fence: unclosedSpecFence(text),
|
|
646
|
+
};
|
|
647
|
+
specDigests.set(number, digests);
|
|
648
|
+
return digests;
|
|
649
|
+
};
|
|
603
650
|
// One read of each lineage's chain, for the same reason the specs are read
|
|
604
651
|
// once: two plans of one spec must be judged against one reading of its notes.
|
|
605
652
|
const chains = new Map();
|
|
@@ -625,8 +672,9 @@ async function readPlans(fs, cwd, specs, docs, now, held = new Set()) {
|
|
|
625
672
|
const sealedSpec = seal.status === "sealed" ? await specTextOf(seal.baseline.number) : null;
|
|
626
673
|
const t = parseTasks(text);
|
|
627
674
|
const p = parsePhases(text);
|
|
628
|
-
const
|
|
629
|
-
const
|
|
675
|
+
const sealedDigests = seal.status === "sealed" ? await specDigestsOf(seal.baseline.number) : null;
|
|
676
|
+
const alignment = alignSpecBaseline(seal, sealedDigests);
|
|
677
|
+
const lineage = await reconciliationFor(alignment, seal, sealedSpec, byNumber, chainOf, sealedDigests);
|
|
630
678
|
const planState = derivePlanState(parsePlanStatus(text).declared, t, p, lineage.reconciliation);
|
|
631
679
|
const ts = await resolveTimestamp(fs, f.path, undefined, now);
|
|
632
680
|
out.push({
|
|
@@ -711,6 +759,12 @@ function resolveSpecRelation(text, specs, specDir) {
|
|
|
711
759
|
const parsed = parseSpecRelation(text, specDir);
|
|
712
760
|
if (parsed.status === "absent")
|
|
713
761
|
return { status: "unknown", reason: "no-evidence" };
|
|
762
|
+
// Carried through as itself. Folding it into `unknown` would be the board
|
|
763
|
+
// deciding that a declared origin is worse than a declared spec, and every
|
|
764
|
+
// surface downstream reads the difference: the pipeline mode, the warning it
|
|
765
|
+
// does NOT emit, and the `status` counter of plans that owe a baseline.
|
|
766
|
+
if (parsed.status === "standalone")
|
|
767
|
+
return { status: "standalone" };
|
|
714
768
|
if (parsed.status === "ambiguous") {
|
|
715
769
|
return { status: "ambiguous", numbers: parsed.numbers, evidence: parsed.evidence };
|
|
716
770
|
}
|
|
@@ -773,7 +827,7 @@ function derivePlanState(declared, tasks, phases, reconciliation) {
|
|
|
773
827
|
* with the composition's own refusal as the work owed, so a plan whose chain
|
|
774
828
|
* cannot be read never slips through as closable.
|
|
775
829
|
*/
|
|
776
|
-
async function reconciliationFor(alignment, seal, specText, byNumber, chainOf) {
|
|
830
|
+
async function reconciliationFor(alignment, seal, specText, byNumber, chainOf, digests) {
|
|
777
831
|
const none = { reconciliation: null, contract: null };
|
|
778
832
|
if (alignment.status !== "aligned" || seal.status !== "sealed" || specText === null)
|
|
779
833
|
return none;
|
|
@@ -787,7 +841,11 @@ async function reconciliationFor(alignment, seal, specText, byNumber, chainOf) {
|
|
|
787
841
|
path: spec.file,
|
|
788
842
|
number: spec.number,
|
|
789
843
|
digest: alignment.digest,
|
|
790
|
-
|
|
844
|
+
// The other reading of the same untouched spec: a note published before
|
|
845
|
+
// the functional payload existed pinned the exact bytes, and the seal's
|
|
846
|
+
// migration is only half a migration if the note's side refuses it.
|
|
847
|
+
legacy_digest: digests?.exact,
|
|
848
|
+
criteria: parseSpecCriteria(specText, spec.number),
|
|
791
849
|
}, chain);
|
|
792
850
|
if (composed.status === "blocked") {
|
|
793
851
|
return {
|