@intentius/chant 0.104.1 → 0.104.2

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 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/op/activities/factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/op/activities/factory.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intentius/chant",
3
- "version": "0.104.1",
3
+ "version": "0.104.2",
4
4
  "description": "Declarative infrastructure-as-code toolkit — TypeScript on Node.js",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://intentius.io/chant",
@@ -467,9 +467,14 @@ export interface FactoryBuildArgs {
467
467
  /** Run the builder hook in the worktree, unless understand said not to build (#3406). */
468
468
  export async function factoryBuild(args: FactoryBuildArgs): Promise<FactoryBuildResult> {
469
469
  const lease = leaseOf(args.lease, "factoryBuild");
470
- if (args.ask.outcome !== null) return { ran: false, finished: false, exitCode: null, reverted: [], note: `understand answered ${args.ask.understand}: nothing is built`, report: null };
471
- // A kept ask opens before it is built: chant writes the state in the worktree, so it goes with the build.
472
470
  const cwd = args.cwd ?? process.cwd();
471
+ if (args.ask.outcome !== null) {
472
+ // Nothing is built, but Record still writes the item's outcome (dropped) in the worktree, so an ask
473
+ // that lives only in the checkout, as every ask written from a surface does, is carried there first.
474
+ await carryItem(cwd, lease.worktree, lease.item);
475
+ return { ran: false, finished: false, exitCode: null, reverted: [], note: `understand answered ${args.ask.understand}: nothing is built`, report: null };
476
+ }
477
+ // A kept ask opens before it is built: chant writes the state in the worktree, so it goes with the build.
473
478
  await freshStart(cwd, lease.worktree, lease.item);
474
479
  await carryItem(cwd, lease.worktree, lease.item);
475
480
  const w = await readWork(lease.worktree);
@@ -523,7 +528,8 @@ export interface FactoryCheckArgs {
523
528
  /** Run the check and attach its result as evidence to each criterion the factory ticks (#3406 rule 5). */
524
529
  export async function factoryCheck(args: FactoryCheckArgs): Promise<FactoryCheckResult> {
525
530
  const lease = leaseOf(args.lease, "factoryCheck");
526
- if (!args.build.ran || !args.build.finished) return { ran: false, ok: false, command: null, evidence: [], log: null, report: null };
531
+ // A build whose guard put changes back is not done whatever its check says, so it is not checked.
532
+ if (!args.build.ran || !args.build.finished || args.build.reverted.length > 0) return { ran: false, ok: false, command: null, evidence: [], log: null, report: null };
527
533
  let command = args.check ?? null;
528
534
  if (command === null) {
529
535
  const { readDeclaration } = await import("../../workspace/declaration");
@@ -575,7 +581,10 @@ export interface FactoryRecordArgs {
575
581
  /** The decisions a done build proposes it implements, from the intent graph of each path it changed (studio#243). */
576
582
  async function proposals(worktree: string, base: string, already: string[]): Promise<{ decision: string; paths: string[] }[]> {
577
583
  const { proposeImplements } = await import("../../workspace/factory-rules");
578
- const changed = (await gitOut(["diff", "--name-only", base], worktree)).out.split("\n").filter((p) => p && !p.startsWith(".chant/"));
584
+ // What the build changed since the base, the files it added among them: they are untracked until Record commits.
585
+ const tracked = (await gitOut(["diff", "--name-only", base], worktree)).out.split("\n");
586
+ const added = (await gitOut(["ls-files", "--others", "--exclude-standard"], worktree)).out.split("\n");
587
+ const changed = [...new Set([...tracked, ...added])].filter((p) => p && !p.startsWith(".chant/")).sort();
579
588
  const { intentGraph } = await import("../../workspace/intent");
580
589
  const rows: { path: string; decisions: { id: string; state: string | null; granularity: string }[] }[] = [];
581
590
  for (const path of changed.slice(0, 20)) {
@@ -148,6 +148,20 @@ describe("the factory reference Op (#3406)", () => {
148
148
  expect(onBranch(dir, "W-103", "work/W-103-an-ask.md")).toMatchObject({ state: "dropped" });
149
149
  expect(existsSync(join(dir, "app", "W-103.txt"))).toBe(false);
150
150
  expect(readFileSync(join(dir, "work", "W-101-the-feature.md"), "utf-8")).toContain('"state": "open"');
151
+
152
+ // An ask written from a surface lives only in the checkout until it is built; refused, it is still dropped.
153
+ writeFileSync(join(dir, "work", "W-104-an-uncommitted-ask.md"), item("W-104", { state: "proposed", source: { ask: { said: "Make the page green.", by: "alice", via: "hud" } } }));
154
+ await run(dir, "W-104");
155
+ const asked = await workspacePoints({ cwd: dir });
156
+ if ("error" in asked) throw new Error(asked.error.message);
157
+ const q = asked.questions.find((x) => x.point === "understand" && x.open && JSON.stringify(x).includes("W-104"));
158
+ expect(q).toBeDefined();
159
+ expect("error" in (await answerPoint({ cwd: dir, id: q!.id, answer: "refuse", by: ["alice"] }))).toBe(false);
160
+ git(["add", "answers"], dir);
161
+ git(["commit", "-q", "-m", "refuse W-104"], dir);
162
+ const sixth = await run(dir, "W-104");
163
+ expect(sixth.workLease).toMatchObject({ item: "W-104", outcome: "dropped" });
164
+ expect(onBranch(dir, "W-104", "work/W-104-an-uncommitted-ask.md")).toMatchObject({ state: "dropped" });
151
165
  });
152
166
  }, 120_000);
153
167
  });