perttool 0.5.4 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/CHANGELOG.md +54 -1
  2. package/README.md +60 -20
  3. package/dist/application/advance-history.d.ts +46 -0
  4. package/dist/application/advance-history.d.ts.map +1 -0
  5. package/dist/application/advance-history.js +254 -0
  6. package/dist/application/advance-history.js.map +1 -0
  7. package/dist/application/contract6-mutation.d.ts +3 -2
  8. package/dist/application/contract6-mutation.d.ts.map +1 -1
  9. package/dist/application/contract6-mutation.js +2 -1
  10. package/dist/application/contract6-mutation.js.map +1 -1
  11. package/dist/application/contract6-projection.d.ts +2 -1
  12. package/dist/application/contract6-projection.d.ts.map +1 -1
  13. package/dist/application/contract6-projection.js +31 -1
  14. package/dist/application/contract6-projection.js.map +1 -1
  15. package/dist/application/target-actuals-write.d.ts +2 -1
  16. package/dist/application/target-actuals-write.d.ts.map +1 -1
  17. package/dist/application/target-actuals-write.js.map +1 -1
  18. package/dist/cli.js +78 -15
  19. package/dist/cli.js.map +1 -1
  20. package/dist/command/actuals-discovery.d.ts.map +1 -1
  21. package/dist/command/actuals-discovery.js +50 -4
  22. package/dist/command/actuals-discovery.js.map +1 -1
  23. package/dist/governance/authority.d.ts +1 -0
  24. package/dist/governance/authority.d.ts.map +1 -1
  25. package/dist/governance/authority.js +24 -2
  26. package/dist/governance/authority.js.map +1 -1
  27. package/dist/help/registry.d.ts.map +1 -1
  28. package/dist/help/registry.js +11 -1
  29. package/dist/help/registry.js.map +1 -1
  30. package/dist/help/target-governance-guide.js +2 -2
  31. package/dist/help/target-governance-guide.js.map +1 -1
  32. package/dist/history/advance-history.d.ts +44 -0
  33. package/dist/history/advance-history.d.ts.map +1 -0
  34. package/dist/history/advance-history.js +379 -0
  35. package/dist/history/advance-history.js.map +1 -0
  36. package/dist/history/git-probe.d.ts +40 -0
  37. package/dist/history/git-probe.d.ts.map +1 -1
  38. package/dist/history/git-probe.js +330 -0
  39. package/dist/history/git-probe.js.map +1 -1
  40. package/dist/index.d.ts +3 -1
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +1 -0
  43. package/dist/index.js.map +1 -1
  44. package/dist/mutation/advance-deletion.d.ts +14 -0
  45. package/dist/mutation/advance-deletion.d.ts.map +1 -0
  46. package/dist/mutation/advance-deletion.js +53 -0
  47. package/dist/mutation/advance-deletion.js.map +1 -0
  48. package/dist/mutation/advance.d.ts.map +1 -1
  49. package/dist/mutation/advance.js +8 -25
  50. package/dist/mutation/advance.js.map +1 -1
  51. package/dist/schema/registry.d.ts.map +1 -1
  52. package/dist/schema/registry.js +1 -0
  53. package/dist/schema/registry.js.map +1 -1
  54. package/dist/version.d.ts +1 -1
  55. package/dist/version.js +1 -1
  56. package/package.json +1 -1
  57. package/schemas/Perttool.AdvanceResult.v1.schema.json +254 -0
@@ -1,9 +1,10 @@
1
1
  import type { ActualWorkEvent } from "../actuals/source.js";
2
2
  import type { TargetActualsAdvanceResultV3 } from "./target-actuals-advance.js";
3
+ import type { AdvanceResultV1 } from "./advance-history.js";
3
4
  import type { TargetActualsMutationResultV3 } from "./target-actuals-mutation.js";
4
5
  import { type TargetGovernanceWriteProjection } from "./target-governance-projection.js";
5
6
  import type { TargetGovernanceProjectMetadataResult } from "./target-governance-project.js";
6
7
  export declare function contract6ProjectResultToJson(result: TargetGovernanceProjectMetadataResult, source: string, sourceDigest: string, ok?: boolean): Readonly<Record<string, unknown>>;
7
8
  export declare function contract6WorkEventToJson(event: ActualWorkEvent): Readonly<Record<string, unknown>>;
8
- export declare function contract6MutationResultToJson(result: TargetActualsMutationResultV3 | TargetActualsAdvanceResultV3, operation: string, source: string, write: TargetGovernanceWriteProjection): Readonly<Record<string, unknown>>;
9
+ export declare function contract6MutationResultToJson(result: TargetActualsMutationResultV3 | TargetActualsAdvanceResultV3 | AdvanceResultV1, operation: string, source: string, write: TargetGovernanceWriteProjection): Readonly<Record<string, unknown>>;
9
10
  //# sourceMappingURL=contract6-projection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract6-projection.d.ts","sourceRoot":"","sources":["../../src/application/contract6-projection.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,4BAA4B,EAC7B,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EACV,6BAA6B,EAC9B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAGL,KAAK,+BAA+B,EACrC,MAAM,mCAAmC,CAAC;AAK3C,OAAO,KAAK,EACV,qCAAqC,EACtC,MAAM,gCAAgC,CAAC;AAExC,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,qCAAqC,EAC7C,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,EAAE,UAAY,GACb,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAUnC;AAgDD,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,eAAe,GACrB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAenC;AAkBD,wBAAgB,6BAA6B,CAC3C,MAAM,EACF,6BAA6B,GAC7B,4BAA4B,EAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,+BAA+B,GACrC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAqCnC"}
1
+ {"version":3,"file":"contract6-projection.d.ts","sourceRoot":"","sources":["../../src/application/contract6-projection.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,4BAA4B,EAC7B,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAEV,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,6BAA6B,EAC9B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAGL,KAAK,+BAA+B,EACrC,MAAM,mCAAmC,CAAC;AAK3C,OAAO,KAAK,EACV,qCAAqC,EACtC,MAAM,gCAAgC,CAAC;AAExC,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,qCAAqC,EAC7C,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,EAAE,UAAY,GACb,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAUnC;AAgDD,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,eAAe,GACrB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAenC;AAyCD,wBAAgB,6BAA6B,CAC3C,MAAM,EACF,6BAA6B,GAC7B,4BAA4B,GAC5B,eAAe,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,+BAA+B,GACrC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAkDnC"}
@@ -73,12 +73,35 @@ function lifecycleToJson(result) {
73
73
  coverage: lifecycle.coverage,
74
74
  };
75
75
  }
76
+ function advanceHistoryGuardToJson(value) {
77
+ return {
78
+ model_version: value.modelVersion,
79
+ status: value.status,
80
+ cause: value.cause,
81
+ repository_snapshot_id: value.repositorySnapshotId,
82
+ repository_relative_path: value.repositoryRelativePath,
83
+ head_commit_id: value.headCommitId,
84
+ source_digest: value.sourceDigest,
85
+ candidate_digest: value.candidateDigest,
86
+ source_modified_at: value.sourceModifiedAt,
87
+ source_bytes: value.sourceBytes,
88
+ candidate_bytes: value.candidateBytes,
89
+ diff_added_lines: value.diffAddedLines,
90
+ diff_removed_lines: value.diffRemovedLines,
91
+ destructive_entity_ids: value.destructiveEntityIds,
92
+ overlapping_entity_ids: value.overlappingEntityIds,
93
+ force_requested: value.forceRequested,
94
+ };
95
+ }
76
96
  export function contract6MutationResultToJson(result, operation, source, write) {
77
97
  const base = targetGovernanceMutationResultToJson(result, operation, source, write);
78
98
  if ("advance" in result) {
99
+ const historyGuard = "historyGuard" in result ? result.historyGuard : undefined;
79
100
  return Object.freeze({
80
101
  ...base,
81
- schema_version: "Perttool.MutationResult.v3",
102
+ schema_version: historyGuard === undefined
103
+ ? "Perttool.MutationResult.v3"
104
+ : "Perttool.AdvanceResult.v1",
82
105
  cli_contract_version: 6,
83
106
  lifecycle: null,
84
107
  advance: result.advance === null
@@ -93,6 +116,13 @@ export function contract6MutationResultToJson(result, operation, source, write)
93
116
  ready_before: result.advance.readyBefore,
94
117
  ready_after: result.advance.readyAfter,
95
118
  },
119
+ ...(historyGuard === undefined
120
+ ? {}
121
+ : {
122
+ history_guard: historyGuard === null
123
+ ? null
124
+ : advanceHistoryGuardToJson(historyGuard),
125
+ }),
96
126
  });
97
127
  }
98
128
  return Object.freeze({
@@ -1 +1 @@
1
- {"version":3,"file":"contract6-projection.js","sourceRoot":"","sources":["../../src/application/contract6-projection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contract6-projection.js","sourceRoot":"","sources":["../../src/application/contract6-projection.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,6 @@ import { type TargetGovernancePersistenceRequest } from "./target-governance-wri
3
3
  import type { TargetGovernanceWriteProjection } from "./target-governance-projection.js";
4
4
  import type { TargetActualsMutationResultV3 } from "./target-actuals-mutation.js";
5
5
  import type { TargetActualsAdvanceResultV3 } from "./target-actuals-advance.js";
6
- export declare function persistTargetActualsResult(result: TargetActualsMutationResultV3 | TargetActualsAdvanceResultV3, capability: TargetGrammar5Capability, request: TargetGovernancePersistenceRequest): Promise<TargetGovernanceWriteProjection>;
6
+ import type { AdvanceResultV1 } from "./advance-history.js";
7
+ export declare function persistTargetActualsResult(result: TargetActualsMutationResultV3 | TargetActualsAdvanceResultV3 | AdvanceResultV1, capability: TargetGrammar5Capability, request: TargetGovernancePersistenceRequest): Promise<TargetGovernanceWriteProjection>;
7
8
  //# sourceMappingURL=target-actuals-write.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"target-actuals-write.d.ts","sourceRoot":"","sources":["../../src/application/target-actuals-write.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,wBAAwB,EACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,KAAK,kCAAkC,EACxC,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EACV,+BAA+B,EAChC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EACV,6BAA6B,EAC9B,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EACV,4BAA4B,EAC7B,MAAM,6BAA6B,CAAC;AAarC,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,6BAA6B,GAAG,4BAA4B,EACpE,UAAU,EAAE,wBAAwB,EACpC,OAAO,EAAE,kCAAkC,GAC1C,OAAO,CAAC,+BAA+B,CAAC,CA0C1C"}
1
+ {"version":3,"file":"target-actuals-write.d.ts","sourceRoot":"","sources":["../../src/application/target-actuals-write.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,wBAAwB,EACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,KAAK,kCAAkC,EACxC,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EACV,+BAA+B,EAChC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EACV,6BAA6B,EAC9B,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EACV,4BAA4B,EAC7B,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EACV,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAa9B,wBAAsB,0BAA0B,CAC9C,MAAM,EACF,6BAA6B,GAC7B,4BAA4B,GAC5B,eAAe,EACnB,UAAU,EAAE,wBAAwB,EACpC,OAAO,EAAE,kCAAkC,GAC1C,OAAO,CAAC,+BAA+B,CAAC,CA0C1C"}
@@ -1 +1 @@
1
- {"version":3,"file":"target-actuals-write.js","sourceRoot":"","sources":["../../src/application/target-actuals-write.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gCAAgC,EAChC,0CAA0C,EAC1C,iCAAiC,GAClC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAI7D,OAAO,EACL,2BAA2B,GAE5B,MAAM,8BAA8B,CAAC;AAWtC,SAAS,eAAe,CACtB,OAA2C,EAC3C,OAAgB;IAEhB,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO;KACR,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,MAAoE,EACpE,UAAoC,EACpC,OAA2C;IAE3C,MAAM,aAAa,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAI,aAAa,KAAK,IAAI;QAAE,OAAO,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAEnE,MAAM,MAAM,GACV,OAAO,CAAC,IAAI,KAAK,UAAU;QACzB,CAAC,CAAC,MAAM,iCAAiC,CACrC,OAAO,CAAC,MAAM,EACd,aAAa,EACb,UAAU,EACV;YACE,aAAa,EAAE,MAAM,CAAC,cAAc;YACpC,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS;gBACtC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;SAChD,CACF;QACH,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,GAAG;YACtB,CAAC,CAAC,MAAM,gCAAgC,CACpC,OAAO,CAAC,MAAM,EACd,aAAa,EACb,UAAU,EACV,OAAO,CAAC,QAAQ,KAAK,SAAS;gBAC5B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,CAC/B;YACH,CAAC,CAAC,MAAM,0CAA0C,CAC9C,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,MAAM,EACd,aAAa,EACb,UAAU,EACV;gBACE,aAAa,EAAE,MAAM,CAAC,cAAc;gBACpC,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS;oBAChC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;aAChC,CACF,CAAC;IACV,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"target-actuals-write.js","sourceRoot":"","sources":["../../src/application/target-actuals-write.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gCAAgC,EAChC,0CAA0C,EAC1C,iCAAiC,GAClC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAI7D,OAAO,EACL,2BAA2B,GAE5B,MAAM,8BAA8B,CAAC;AActC,SAAS,eAAe,CACtB,OAA2C,EAC3C,OAAgB;IAEhB,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO;KACR,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,MAGmB,EACnB,UAAoC,EACpC,OAA2C;IAE3C,MAAM,aAAa,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAI,aAAa,KAAK,IAAI;QAAE,OAAO,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAEnE,MAAM,MAAM,GACV,OAAO,CAAC,IAAI,KAAK,UAAU;QACzB,CAAC,CAAC,MAAM,iCAAiC,CACrC,OAAO,CAAC,MAAM,EACd,aAAa,EACb,UAAU,EACV;YACE,aAAa,EAAE,MAAM,CAAC,cAAc;YACpC,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS;gBACtC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;SAChD,CACF;QACH,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,GAAG;YACtB,CAAC,CAAC,MAAM,gCAAgC,CACpC,OAAO,CAAC,MAAM,EACd,aAAa,EACb,UAAU,EACV,OAAO,CAAC,QAAQ,KAAK,SAAS;gBAC5B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,CAC/B;YACH,CAAC,CAAC,MAAM,0CAA0C,CAC9C,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,MAAM,EACd,aAAa,EACb,UAAU,EACV;gBACE,aAAa,EAAE,MAAM,CAAC,cAAc;gBACpC,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS;oBAChC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;aAChC,CACF,CAAC;IACV,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAClD,CAAC"}
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { readFile } from "node:fs/promises";
2
+ import { lstat, readFile } from "node:fs/promises";
3
3
  import process from "node:process";
4
4
  import { TextDecoder } from "node:util";
5
5
  import { analyzeDocument, selectNextTasks, } from "./application/contract6-actuals.js";
@@ -11,6 +11,7 @@ import { getProjectMetadata, } from "./application/project.js";
11
11
  import { planAdvance, planBatchMutation, planFinishActuals, planLifecycle, planMutation, } from "./application/contract6-mutation.js";
12
12
  import { renderTargetGovernanceDecision, renderTargetGovernanceProjectText, } from "./application/target-governance-projection.js";
13
13
  import { contract6MutationResultToJson, contract6ProjectResultToJson, contract6WorkEventToJson, } from "./application/contract6-projection.js";
14
+ import { prepareAdvanceHistory, renderAdvanceHistoryGuard, withAdvanceHistoryRace, } from "./application/advance-history.js";
14
15
  import { persistTargetActualsResult, } from "./application/target-actuals-write.js";
15
16
  import { inspectTargetProjectHistoryFile, renderTargetProjectHistoryText, targetProjectHistoryResultToJson, } from "./application/target-project-history.js";
16
17
  import { observeTargetProjectVelocity, renderTargetVelocityObservationText, targetVelocityObservationResultToJson, } from "./application/target-velocity-observation.js";
@@ -25,6 +26,7 @@ import { renderActualsCommandUsageError, serializeActualsCommandUsageError, vali
25
26
  import { agentGuidanceResultToJson } from "./guidance/projection.js";
26
27
  import { agentGuidanceExitCode, renderAgentGuidanceText, } from "./guidance/text.js";
27
28
  import { documentContentFromBytes, readDocumentFile, } from "./io/document-file.js";
29
+ import { recheckAdvanceHistoryBaseline, } from "./history/git-probe.js";
28
30
  import { createArtifactFile, createDocumentFile, replaceDocumentFile, SafeWriteConflictError, SafeWriteVerificationError, } from "./io/safe-write.js";
29
31
  import { formatDecimal } from "./model/rational.js";
30
32
  import { convertWithVelocity, durationSuffix } from "./model/units.js";
@@ -177,7 +179,24 @@ async function readDocument(source) {
177
179
  const content = source === "-"
178
180
  ? documentContentFromBytes(await readStdin())
179
181
  : await readDocumentFile(source);
180
- return { text: content.text, digest: content.digest };
182
+ let modifiedAt = null;
183
+ if (source !== "-") {
184
+ try {
185
+ const metadata = await lstat(source, { bigint: true });
186
+ if (metadata.isFile() && !metadata.isSymbolicLink()) {
187
+ modifiedAt = new Date(Number(metadata.mtimeNs / 1000000n)).toISOString();
188
+ }
189
+ }
190
+ catch {
191
+ modifiedAt = null;
192
+ }
193
+ }
194
+ return {
195
+ text: content.text,
196
+ digest: content.digest,
197
+ bytes: content.bytes,
198
+ modifiedAt,
199
+ };
181
200
  }
182
201
  async function readStdin() {
183
202
  const chunks = [];
@@ -1543,6 +1562,10 @@ async function runAdvance(args) {
1543
1562
  const maxDiagnostics = boundedInteger(parsed.values.get("max-diagnostics"), "max-diagnostics", 100, 1, 1000);
1544
1563
  const sourceOperand = parsed.positionals[0];
1545
1564
  const writeRequest = editingWriteRequest(parsed, sourceOperand);
1565
+ const forceRequested = parsed.flags.has("force-history-loss");
1566
+ if (forceRequested && writeRequest.mode !== "in_place") {
1567
+ throw new UsageError("--force-history-loss can only be used with --write");
1568
+ }
1546
1569
  const source = sourceOperand === "-" ? "<stdin>" : sourceOperand;
1547
1570
  let input;
1548
1571
  try {
@@ -1551,23 +1574,54 @@ async function runAdvance(args) {
1551
1574
  catch (error) {
1552
1575
  return cliError(error instanceof Error ? error : new Error(String(error)), 3, "dag.advance", format === "json");
1553
1576
  }
1554
- const result = planAdvance(input.text, {
1577
+ const planned = planAdvance(input.text, {
1555
1578
  maxDiagnostics,
1556
1579
  originalLabel: source,
1557
1580
  updatedLabel: "candidate",
1558
1581
  governance: governanceRequest(parsed, writeRequest),
1559
1582
  });
1583
+ const initialWarningFailure = parsed.flags.has("warnings-as-errors") &&
1584
+ (planned.diagnosticsTruncated ||
1585
+ planned.diagnostics.some((diagnostic) => diagnostic.severity === "warning"));
1586
+ const prepared = await prepareAdvanceHistory(input.text, planned, {
1587
+ mode: writeRequest.mode === "out"
1588
+ ? "out"
1589
+ : writeRequest.mode,
1590
+ sourceBytes: input.bytes,
1591
+ sourceModifiedAt: input.modifiedAt,
1592
+ ...(writeRequest.mode === "in_place"
1593
+ ? { targetPath: sourceOperand }
1594
+ : {}),
1595
+ forceRequested,
1596
+ warningDenied: initialWarningFailure,
1597
+ maxDiagnostics,
1598
+ });
1599
+ let result = prepared.result;
1560
1600
  const warningFailure = parsed.flags.has("warnings-as-errors") &&
1561
1601
  (result.diagnosticsTruncated ||
1562
1602
  result.diagnostics.some((diagnostic) => diagnostic.severity === "warning"));
1563
- const ok = result.ok && !warningFailure;
1603
+ let ok = result.ok && !warningFailure;
1604
+ let historyRace = false;
1564
1605
  let writeResult = Object.freeze({
1565
1606
  mode: writeRequest.mode,
1566
1607
  target: writeRequest.target,
1567
1608
  written: false,
1568
1609
  });
1569
- if (result.ok) {
1610
+ if (result.updatedText !== null) {
1570
1611
  try {
1612
+ if (ok &&
1613
+ writeRequest.mode === "in_place" &&
1614
+ prepared.baseline !== null &&
1615
+ prepared.baseline.status === "complete" &&
1616
+ (result.historyGuard?.status === "passed" ||
1617
+ result.historyGuard?.status === "forced")) {
1618
+ const recheck = await recheckAdvanceHistoryBaseline(prepared.baseline, sourceOperand);
1619
+ if (!recheck.ok) {
1620
+ result = withAdvanceHistoryRace(result, recheck, maxDiagnostics);
1621
+ ok = false;
1622
+ historyRace = true;
1623
+ }
1624
+ }
1571
1625
  if (ok && writeRequest.mode !== "preview") {
1572
1626
  writeResult = await persistGovernedResult(result, writeRequest, sourceOperand);
1573
1627
  }
@@ -1580,17 +1634,26 @@ async function runAdvance(args) {
1580
1634
  writeJson(contract6MutationResultToJson(ok ? result : Object.freeze({ ...result, ok: false }), "dag.advance", source, writeResult));
1581
1635
  }
1582
1636
  else {
1583
- if (ok && result.advance !== null) {
1584
- if (writeRequest.mode !== "preview") {
1585
- process.stderr.write(renderGovernanceWriteSummary("dag.advance", writeResult, result.updatedDigest));
1586
- }
1587
- else {
1588
- process.stdout.write(parsed.flags.has("diff") ? (result.diff ?? "") : (result.updatedText ?? ""));
1589
- if (!parsed.flags.has("diff")) {
1590
- process.stderr.write(`PREVIEW dag.advance changed=${result.changed} original_digest=${result.originalDigest} updated_digest=${result.updatedDigest}\n`);
1637
+ if (result.advance !== null) {
1638
+ if (ok) {
1639
+ if (writeRequest.mode !== "preview") {
1640
+ process.stderr.write(renderGovernanceWriteSummary("dag.advance", writeResult, result.updatedDigest));
1641
+ }
1642
+ else {
1643
+ process.stdout.write(parsed.flags.has("diff") ? (result.diff ?? "") : (result.updatedText ?? ""));
1644
+ if (!parsed.flags.has("diff")) {
1645
+ process.stderr.write(`PREVIEW dag.advance changed=${result.changed} original_digest=${result.originalDigest} updated_digest=${result.updatedDigest}\n`);
1646
+ }
1591
1647
  }
1592
1648
  }
1593
- process.stderr.write(renderAdvanceSummary(result.advance));
1649
+ if (ok ||
1650
+ result.historyGuard?.status === "blocked" ||
1651
+ result.historyGuard?.status === "forced") {
1652
+ process.stderr.write(renderAdvanceSummary(result.advance));
1653
+ }
1654
+ }
1655
+ if (result.historyGuard !== null) {
1656
+ process.stderr.write(renderAdvanceHistoryGuard(result.historyGuard));
1594
1657
  }
1595
1658
  if (result.governance !== null) {
1596
1659
  process.stderr.write(renderTargetGovernanceDecision(result.governance));
@@ -1602,7 +1665,7 @@ async function runAdvance(args) {
1602
1665
  process.stderr.write(`DIAGNOSTICS_TRUNCATED true limit=${maxDiagnostics}\n`);
1603
1666
  }
1604
1667
  }
1605
- return ok ? 0 : 1;
1668
+ return ok ? 0 : historyRace ? 5 : 1;
1606
1669
  }
1607
1670
  function rationalJson(value, unit, precision) {
1608
1671
  return {