mirror of
https://github.com/wassname/pi-goals.git
synced 2026-09-20 13:10:47 +08:00
Field calibration from three supervisor reports: the useful plan-change catch was a worker-ticked task the short-view hash no longer surfaced, while identity-line edits caused duplicate empty reviews. The notify digest keeps goals, tasks and evidence above the Log and drops worker identity lines. Reopening a signed goal still clears its sign-off. Co-Authored-By: Pi/OpenAI <288921227+claudypoo@users.noreply.github.com>
41 lines
2.7 KiB
TypeScript
41 lines
2.7 KiB
TypeScript
import { expect, it } from "vitest";
|
|
import { planViews } from "../src/plan-view.js";
|
|
|
|
it("keeps outcome, preferences and discriminators without tasks or history", () => {
|
|
const plan = "# Outcome\nBeat random, not just plot it.\n## User preferences\nKeep costs low.\n## Goals\n1. [ ] goal: repair\n - discriminator: beats random\n - subtle failure mode: plot exists but result fails\n - tasks:\n 1. [x] draw plot\n - evidence:\n - old output\n2. [ ] goal: confirm\n## Task list\n- [ ] run it\n## Appendix\nunapproved idea";
|
|
const views = planViews(plan);
|
|
for (const text of ["Beat random", "Keep costs low", "goal: repair", "discriminator: beats random", "subtle failure mode", "goal: confirm"]) expect(views.short).toContain(text);
|
|
for (const text of ["draw plot", "old output", "run it", "unapproved idea"]) expect(views.short).not.toContain(text);
|
|
expect(views.long).toContain("draw plot");
|
|
expect(views.long).toContain("old output");
|
|
expect(views.long).not.toContain("unapproved idea");
|
|
});
|
|
|
|
it("omits only named worker identity fields from review while retaining them in full context", () => {
|
|
const base = "# Plan\n- preferred worker model: provider/model\n- [ ] goal: result\n - discriminator: exact bytes";
|
|
const metadata = "\n- Active worker: worker-1\n- worker session: /saved.jsonl\n- worker intercom session: uuid";
|
|
expect(planViews(base + metadata).short).toBe(planViews(base).short);
|
|
expect(planViews(base + metadata).long).toContain("/saved.jsonl");
|
|
expect(planViews(base.replace("exact bytes", "approximate match")).short).not.toBe(planViews(base).short);
|
|
expect(planViews(base.replace("[ ]", "[x]")).short).not.toBe(planViews(base).short);
|
|
});
|
|
|
|
it("notifies on goal and task changes but not on identity bookkeeping or log edits", () => {
|
|
const base = "# Plan\n- [ ] goal: result\n## Task list\n- [ ] run it\n- worker session: /saved.jsonl\n## Log\nfirst entry";
|
|
const baseView = planViews(base).notify;
|
|
// identity bookkeeping: silent
|
|
expect(planViews(base.replace("/saved.jsonl", "/moved.jsonl")).notify).toBe(baseView);
|
|
// log edits: silent
|
|
expect(planViews(base.replace("first entry", "second entry")).notify).toBe(baseView);
|
|
// worker ticking a task: review event (field catch, LUCID3 2026-09-10)
|
|
expect(planViews(base.replace("- [ ] run it", "- [x] run it")).notify).not.toBe(baseView);
|
|
// goal edits: review event
|
|
expect(planViews(base.replace("[ ] goal: result", "[x] goal: result")).notify).not.toBe(baseView);
|
|
});
|
|
|
|
it("stops at history and preserves a manual goal tick", () => {
|
|
const view = planViews("# Plan\n1. [x] goal: result\n## Log\n1. [ ] goal: historical");
|
|
expect(view.short).toContain("[x] goal: result");
|
|
expect(view.long).not.toContain("historical");
|
|
});
|