acstack 0.54.0 → 0.54.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "acstack",
3
3
  "description": "Agentic coding stack where planning grows only as far as needed: a map of decisions, tasks, checks, and handoffs behind a pluggable tracker.",
4
- "version": "0.54.0",
4
+ "version": "0.54.1",
5
5
  "author": {
6
6
  "name": "ac8318740"
7
7
  },
package/cli/dist/index.js CHANGED
@@ -20275,12 +20275,12 @@ function openDesignLifecycle(root, entry, reviewFile) {
20275
20275
  const staleRendered = doc.sourceRevision !== rendered.sourceRevision;
20276
20276
  const inputs = designMapInputs(root, doc, entry);
20277
20277
  const feedbackPath = reviewFile ? resolve6(reviewFile) : review.reviewPath;
20278
- const latestReceipts = new Map(saved.lifecycle?.reconciliations.map((receipt) => [resolve6(root, receipt.reviewPath), receipt]));
20278
+ const latestReceipts = new Map(saved.lifecycle?.reconciliations.map((receipt) => [historyPath(root, receipt.reviewPath), receipt]));
20279
20279
  const histories = readDesignReviewHistories(root, doc.id);
20280
20280
  histories.set(review.reviewPath, saved);
20281
20281
  const obligations = /* @__PURE__ */ new Set();
20282
20282
  for (const [path, snapshot] of histories) {
20283
- const receipts = new Map(snapshot.lifecycle?.reconciliations.map((receipt) => [resolve6(root, receipt.reviewPath), receipt]));
20283
+ const receipts = new Map(snapshot.lifecycle?.reconciliations.map((receipt) => [historyPath(root, receipt.reviewPath), receipt]));
20284
20284
  for (const [selected, receipt] of receipts) {
20285
20285
  if (selected !== path || snapshot.annotations.length || receipt.decisions.some((decision) => decision.outcome === "needs-human")) obligations.add(selected);
20286
20286
  }
@@ -20293,24 +20293,21 @@ function openDesignLifecycle(root, entry, reviewFile) {
20293
20293
  return { path, snapshot, receipt, fresh };
20294
20294
  });
20295
20295
  const feedback = scopes.find((scope) => scope.path === feedbackPath).snapshot;
20296
- const tuple = {
20297
- sourceRevision: doc.sourceRevision,
20298
- reviewRevision: feedback.revision,
20299
- mapInputsDigest: inputs.mapInputsDigest,
20300
- commentsDigest: digest(scopes.map(({ path, snapshot }) => ({
20301
- path: relative4(root, path).split(sep).join("/"),
20302
- packVersion: snapshot.packVersion,
20303
- revision: snapshot.revision,
20304
- annotations: snapshot.annotations
20305
- })))
20306
- };
20296
+ const commentsDigest = (prefix) => digest(scopes.map(({ path, snapshot }) => ({
20297
+ path: prefix + relative4(root, path).split(sep).join("/"),
20298
+ packVersion: snapshot.packVersion,
20299
+ revision: snapshot.revision,
20300
+ annotations: snapshot.annotations
20301
+ })));
20302
+ const tuple = { sourceRevision: doc.sourceRevision, reviewRevision: feedback.revision, mapInputsDigest: inputs.mapInputsDigest, commentsDigest: commentsDigest("") };
20303
+ const legacyTuple = { ...tuple, commentsDigest: commentsDigest(LEGACY_PREFIX) };
20307
20304
  const unsettled = scopes.find((scope) => (obligations.has(scope.path) || scope.receipt || scope.snapshot.annotations.length) && (!scope.fresh || scope.receipt?.decisions.some((decision) => decision.outcome === "needs-human")));
20308
20305
  let reason;
20309
20306
  if (staleRendered) reason = "Authored source changed. Reopen this revision before reviewing.";
20310
20307
  else if (inputs.blockingQuestions.length) reason = "Unresolved design decisions";
20311
20308
  else if (unsettled) reason = unsettled.fresh ? "Reconciliation needs a human decision" : "Feedback and contributions need explicit reconciliation";
20312
20309
  else if (inputs.contributions.length && !scopes.some((scope) => scope.fresh)) reason = "Feedback and contributions need explicit reconciliation";
20313
- const approved = saved.lifecycle?.approvals.some((item) => sameTuple(item, tuple)) ?? false;
20310
+ const approved = saved.lifecycle?.approvals.some((item) => sameTuple(item, tuple) || sameTuple(item, legacyTuple)) ?? false;
20314
20311
  return {
20315
20312
  ...tuple,
20316
20313
  planning: doc.planning ?? null,
@@ -20381,9 +20378,13 @@ function openDesignLifecycle(root, entry, reviewFile) {
20381
20378
  })
20382
20379
  };
20383
20380
  }
20381
+ function historyPath(root, reviewPath) {
20382
+ return resolve6(root, reviewPath.startsWith(LEGACY_PREFIX) ? reviewPath.slice(LEGACY_PREFIX.length) : reviewPath);
20383
+ }
20384
20384
  function sameTuple(a, b) {
20385
20385
  return a.sourceRevision === b.sourceRevision && a.reviewRevision === b.reviewRevision && a.commentsDigest === b.commentsDigest && a.mapInputsDigest === b.mapInputsDigest;
20386
20386
  }
20387
+ var LEGACY_PREFIX;
20387
20388
  var init_design_lifecycle = __esm({
20388
20389
  "src/lib/design-lifecycle.ts"() {
20389
20390
  "use strict";
@@ -20392,6 +20393,7 @@ var init_design_lifecycle = __esm({
20392
20393
  init_design_map();
20393
20394
  init_design_review();
20394
20395
  init_review_server();
20396
+ LEGACY_PREFIX = ".acstack/";
20395
20397
  }
20396
20398
  });
20397
20399