@momentiq/dark-factory-cli 3.0.2 → 3.1.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.
Files changed (52) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +3 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/mode.d.ts.map +1 -1
  5. package/dist/commands/mode.js +120 -22
  6. package/dist/commands/mode.js.map +1 -1
  7. package/dist/commands/skills.d.ts.map +1 -1
  8. package/dist/commands/skills.js +11 -1
  9. package/dist/commands/skills.js.map +1 -1
  10. package/dist/commands/verify.d.ts.map +1 -1
  11. package/dist/commands/verify.js +113 -8
  12. package/dist/commands/verify.js.map +1 -1
  13. package/dist/mcp/tools/skills-install.d.ts.map +1 -1
  14. package/dist/mcp/tools/skills-install.js +8 -3
  15. package/dist/mcp/tools/skills-install.js.map +1 -1
  16. package/dist/mode/critic-registration.d.ts +30 -10
  17. package/dist/mode/critic-registration.d.ts.map +1 -1
  18. package/dist/mode/critic-registration.js +31 -10
  19. package/dist/mode/critic-registration.js.map +1 -1
  20. package/dist/mode/guard.d.ts.map +1 -1
  21. package/dist/mode/guard.js +30 -2
  22. package/dist/mode/guard.js.map +1 -1
  23. package/dist/mode/init.d.ts +8 -4
  24. package/dist/mode/init.d.ts.map +1 -1
  25. package/dist/mode/init.js +148 -12
  26. package/dist/mode/init.js.map +1 -1
  27. package/dist/mode/preview-capture.d.ts +3 -0
  28. package/dist/mode/preview-capture.d.ts.map +1 -0
  29. package/dist/mode/preview-capture.js +137 -0
  30. package/dist/mode/preview-capture.js.map +1 -0
  31. package/dist/mode/preview.d.ts +227 -0
  32. package/dist/mode/preview.d.ts.map +1 -0
  33. package/dist/mode/preview.js +802 -0
  34. package/dist/mode/preview.js.map +1 -0
  35. package/dist/onboard/seeders/design-md.d.ts.map +1 -1
  36. package/dist/onboard/seeders/design-md.js +512 -17
  37. package/dist/onboard/seeders/design-md.js.map +1 -1
  38. package/dist/skills/install.d.ts +25 -5
  39. package/dist/skills/install.d.ts.map +1 -1
  40. package/dist/skills/install.js +34 -17
  41. package/dist/skills/install.js.map +1 -1
  42. package/dist/skills/known-skills.d.ts +2 -0
  43. package/dist/skills/known-skills.d.ts.map +1 -0
  44. package/dist/skills/known-skills.js +25 -0
  45. package/dist/skills/known-skills.js.map +1 -0
  46. package/package.json +2 -2
  47. package/skills/designer-build/SKILL.md.tmpl +14 -0
  48. package/skills/designer-handoff/SKILL.md.tmpl +28 -1
  49. package/skills/verify/producer/README.md +29 -4
  50. package/skills/verify/producer/playwright-route.sh +10 -0
  51. package/skills/verify/producer/surface-declaration.ts +373 -0
  52. package/skills/verify/producer/ui-route.producer.spec.ts +44 -11
@@ -1,8 +1,5 @@
1
- /**
2
- * Names of the skills bundled with this CLI. Adding a new skill = (1) drop
3
- * the source-of-truth dir under `skills/`, (2) append the name here.
4
- */
5
- export declare const KNOWN_SKILLS: ReadonlyArray<string>;
1
+ import { KNOWN_SKILLS } from "./known-skills.js";
2
+ export { KNOWN_SKILLS };
6
3
  export interface InstallOptions {
7
4
  /** Consumer repo root. `darkfactory.yaml` is loaded from here. */
8
5
  readonly cwd: string;
@@ -36,6 +33,29 @@ export interface InstallResult {
36
33
  }>;
37
34
  readonly files: ReadonlyArray<InstalledFile>;
38
35
  }
36
+ /**
37
+ * Operator-facing note appended to a successful `df skills install` — both the
38
+ * CLI text summary (`df skills install`) and the `df_skills_install` MCP tool —
39
+ * whenever at least one skill file is newly written (see {@link installWroteFiles}).
40
+ *
41
+ * Rendered skills land on disk immediately, but the Claude Code host only
42
+ * SURFACES them as invokable skills at the start of a NEW session, so a
43
+ * mid-session install cannot be invoked as a skill until a restart. Until then
44
+ * the rendered `SKILL.md` can be followed directly as a runbook.
45
+ *
46
+ * This is partly a harness-side dependency: skill discovery is owned by the
47
+ * Claude Code host, not the CLI — DF only writes the files. We surface the hint
48
+ * here for operator awareness rather than silently leaving the friction
49
+ * undiscoverable. See momentiq-ai/dark-factory#364.
50
+ */
51
+ export declare const SKILLS_RESTART_NOTE: string;
52
+ /**
53
+ * True when an install result set wrote at least one file to disk (a `created`
54
+ * or `updated` action) — the trigger for surfacing {@link SKILLS_RESTART_NOTE}.
55
+ * All-`unchanged` / all-`skipped` runs introduced nothing the host needs a new
56
+ * session to surface, so they omit the note.
57
+ */
58
+ export declare function installWroteFiles(results: ReadonlyArray<InstallResult>): boolean;
39
59
  export interface ListedSkill {
40
60
  readonly name: string;
41
61
  readonly version: string;
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/skills/install.ts"],"names":[],"mappings":"AA8CA;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,aAAa,CAAC,MAAM,CAY9C,CAAC;AAUF,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,kDAAkD;IAClD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,sDAAsD;IACtD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;IACjE,sDAAsD;IACtD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7F,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C;AA8CD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CA2BpE;AA6FD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CA0HnE"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/skills/install.ts"],"names":[],"mappings":"AA6CA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMjD,OAAO,EAAE,YAAY,EAAE,CAAC;AAUxB,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,kDAAkD;IAClD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,sDAAsD;IACtD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;IACjE,sDAAsD;IACtD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7F,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;CAC9C;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,QAIgB,CAAC;AAEjD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,aAAa,CAAC,aAAa,CAAC,GACpC,OAAO,CAIT;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C;AA8CD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CA2BpE;AA6FD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CA0HnE"}
@@ -23,23 +23,12 @@ import { dirname, join, resolve } from "node:path";
23
23
  import { fileURLToPath } from "node:url";
24
24
  import { loadDarkFactoryConfig, resolveSkillOverrides, } from "./config.js";
25
25
  import { extractReferencedVariables, renderTemplateBody, } from "./template.js";
26
- /**
27
- * Names of the skills bundled with this CLI. Adding a new skill = (1) drop
28
- * the source-of-truth dir under `skills/`, (2) append the name here.
29
- */
30
- export const KNOWN_SKILLS = [
31
- "chief-engineer-review",
32
- "chief-engineer-blitz",
33
- "objectives",
34
- "verify",
35
- // Designer Mode (cycle 27 Phase B) — the operator-facing skill set. Each
36
- // installs via the same machinery + the darkfactory.yaml `skills` enable
37
- // map (`df skills install --all` cross-checks names against this list).
38
- "designer-brief",
39
- "designer-build",
40
- "designer-ship",
41
- "designer-handoff",
42
- ];
26
+ import { KNOWN_SKILLS } from "./known-skills.js";
27
+ // `KNOWN_SKILLS` now lives in the dependency-free `./known-skills.js` so
28
+ // pure-data consumers (e.g. `df mode init`) can read it without pulling this
29
+ // installer's render+fs chain. Re-exported here so existing `install.js`
30
+ // importers keep resolving it unchanged.
31
+ export { KNOWN_SKILLS };
43
32
  /**
44
33
  * The HTML-comment marker emitted at the top of every rendered file
45
34
  * (after frontmatter for SKILL.md, at the very top for other files). Used
@@ -47,6 +36,34 @@ export const KNOWN_SKILLS = [
47
36
  * unless `--force` is passed.
48
37
  */
49
38
  const GENERATED_MARKER = "GENERATED by `df skills install";
39
+ /**
40
+ * Operator-facing note appended to a successful `df skills install` — both the
41
+ * CLI text summary (`df skills install`) and the `df_skills_install` MCP tool —
42
+ * whenever at least one skill file is newly written (see {@link installWroteFiles}).
43
+ *
44
+ * Rendered skills land on disk immediately, but the Claude Code host only
45
+ * SURFACES them as invokable skills at the start of a NEW session, so a
46
+ * mid-session install cannot be invoked as a skill until a restart. Until then
47
+ * the rendered `SKILL.md` can be followed directly as a runbook.
48
+ *
49
+ * This is partly a harness-side dependency: skill discovery is owned by the
50
+ * Claude Code host, not the CLI — DF only writes the files. We surface the hint
51
+ * here for operator awareness rather than silently leaving the friction
52
+ * undiscoverable. See momentiq-ai/dark-factory#364.
53
+ */
54
+ export const SKILLS_RESTART_NOTE = "Note: newly installed or updated skills are written to disk, but the Claude " +
55
+ "Code host only surfaces them as invokable skills in a NEW session. Restart " +
56
+ "(or start a new session in this repo) to invoke them; until then, follow " +
57
+ "each skill's SKILL.md directly as a runbook.";
58
+ /**
59
+ * True when an install result set wrote at least one file to disk (a `created`
60
+ * or `updated` action) — the trigger for surfacing {@link SKILLS_RESTART_NOTE}.
61
+ * All-`unchanged` / all-`skipped` runs introduced nothing the host needs a new
62
+ * session to surface, so they omit the note.
63
+ */
64
+ export function installWroteFiles(results) {
65
+ return results.some((r) => r.files.some((f) => f.action === "created" || f.action === "updated"));
66
+ }
50
67
  /**
51
68
  * Resolve the absolute path of the bundled-skills source-of-truth root.
52
69
  * In dev (running from src/), the path is `<package>/skills/`. In a
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/skills/install.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,qEAAqE;AACrE,iCAAiC;AACjC,EAAE;AACF,wBAAwB;AACxB,0EAA0E;AAC1E,8DAA8D;AAC9D,0EAA0E;AAC1E,6EAA6E;AAC7E,sDAAsD;AACtD,wEAAwE;AACxE,8DAA8D;AAC9D,EAAE;AACF,aAAa;AACb,+EAA+E;AAC/E,8EAA8E;AAC9E,6BAA6B;AAC7B,wEAAwE;AACxE,8EAA8E;AAE9E,OAAO,EACL,UAAU,GACX,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GAGtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,GAEnB,MAAM,eAAe,CAAC;AAEvB;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAA0B;IACjD,uBAAuB;IACvB,sBAAsB;IACtB,YAAY;IACZ,QAAQ;IACR,yEAAyE;IACzE,yEAAyE;IACzE,wEAAwE;IACxE,gBAAgB;IAChB,gBAAgB;IAChB,eAAe;IACf,kBAAkB;CACnB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG,iCAAiC,CAAC;AA0C3D;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,6EAA6E;IAC7E,qDAAqD;IACrD,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,YAAY,CAAC,SAAiB,EAAE,UAAkB;IACzD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAC/D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,qCAAqC,SAAS,sBAAsB,YAAY,mBAAmB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC9H,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,sCAAsC,SAAS,yBAA0B,GAAa,CAAC,OAAO,EAAE,CACjG,CAAC;IACJ,CAAC;IACD,uEAAuE;IACvE,uEAAuE;IACvE,sEAAsE;IACtE,uDAAuD;IACvD,MAAM,CAAC,GAAG,MAAiC,CAAC;IAC5C,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CACb,sCAAsC,SAAS,4CAA4C,CAC5F,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,uCAAuC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,oCAAoC,SAAS,IAAI,CACvG,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CACb,4CAA4C,SAAS,8BAA8B,CACpF,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CACb,gDAAgD,SAAS,sBAAsB,CAChF,CAAC;IACJ,CAAC;IACD,OAAO,MAAuB,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAmB;IACnD,MAAM,IAAI,GAAG,UAAU,IAAI,iBAAiB,EAAE,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAS;QACnC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,SAAS;QACxC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAkB,CAAC;YAC1E,MAAM,IAAI,GAAgB;gBACxB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,GAAG,CAAC,CAAC,CAAC,eAAe,KAAK,SAAS;oBACjC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe,EAAE;oBACxC,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;YACF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,uEAAuE;QACzE,CAAC;IACH,CAAC;IACD,uEAAuE;IACvE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,OAAe;IAC3C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAChE,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3C,0EAA0E;IAC1E,2EAA2E;IAC3E,yEAAyE;IACzE,kBAAkB;IAClB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC3D,IAAI,KAAK;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IAC5D,+EAA+E;IAC/E,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC1E,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CACzB,QAAuB,EACvB,QAA0E;IAE1E,MAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACf,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACf,0EAA0E;IAC1E,wEAAwE;IACxE,kBAAkB;IAClB,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAC1B,IAAY,EACZ,SAAiB,EACjB,WAAmB;IAEnB,MAAM,MAAM,GAAG;QACb,MAAM;QACN,KAAK,gBAAgB,IAAI,SAAS,uBAAuB;QACzD,mBAAmB,WAAW,EAAE;QAChC,uCAAuC,SAAS,EAAE;QAClD,sEAAsE;QACtE,KAAK;QACL,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,uDAAuD;IACvD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjC,gEAAgE;YAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC1C,OAAO,GAAG,IAAI,OAAO,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,IAAY;IACtC,0EAA0E;IAC1E,wEAAwE;IACxE,MAAM,EAAE,GAAG,yDAAyD,CAAC;IACrE,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAuB;IAClD,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,IAAI,iBAAiB,EAAE,CAAC;IAC9D,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3D,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CACb,qCAAqC,OAAO,CAAC,SAAS,oBAAoB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACrG,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAE7D,4CAA4C;IAC5C,MAAM,MAAM,GAA4B,qBAAqB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAsB,MAAM,CAAC,MAAM,CAAC;IAChD,MAAM,SAAS,GAAG,qBAAqB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAE3E,MAAM,SAAS,GACb,OAAO,CAAC,SAAS;QACjB,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAE/D,qEAAqE;IACrE,oEAAoE;IACpE,iEAAiE;IACjE,MAAM,gBAAgB,GAAyG,EAAE,CAAC;IAClI,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtC,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,+CAA+C,YAAY,YAAY,QAAQ,CAAC,IAAI,IAAI,CACzF,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC/C,oDAAoD;QACpD,KAAK,MAAM,OAAO,IAAI,0BAA0B,CAAC,GAAG,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,CAAC,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CACb,+BAA+B,QAAQ,CAAC,QAAQ,sCAAsC,OAAO,gDAAgD,QAAQ,CAAC,IAAI,IAAI,CAC/J,CAAC;YACJ,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAClE,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QACD,gBAAgB,CAAC,IAAI,CAAC;YACpB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;SAClC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACpF,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAEpE,8CAA8C;IAC9C,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAErC,IAAI,MAAM,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACzC,uEAAuE;YACvE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC;oBACT,SAAS,EAAE,CAAC,CAAC,MAAM;oBACnB,cAAc,EAAE,SAAS;oBACzB,MAAM,EAAE,SAAS;oBACjB,MAAM,EACJ,uGAAuG;iBAC1G,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;QACH,CAAC;QACD,IAAI,MAAM,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAChE,qEAAqE;YACrE,qEAAqE;YACrE,oEAAoE;YACpE,sEAAsE;YACtE,oEAAoE;YACpE,oEAAoE;YACpE,6DAA6D;YAC7D,MAAM,WAAW,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACpD,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;YACpE,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9D,IAAI,oBAAoB,KAAK,gBAAgB,EAAE,CAAC;gBAC9C,KAAK,CAAC,IAAI,CAAC;oBACT,SAAS,EAAE,CAAC,CAAC,MAAM;oBACnB,cAAc,EAAE,SAAS;oBACzB,MAAM,EAAE,WAAW;iBACpB,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC;oBACT,SAAS,EAAE,CAAC,CAAC,MAAM;oBACnB,cAAc,EAAE,SAAS;oBACzB,MAAM,EAAE,SAAS;oBACjB,MAAM,EACJ,kJAAkJ;iBACrJ,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;QACH,CAAC;QAED,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC;YACT,SAAS,EAAE,CAAC,CAAC,MAAM;YACnB,cAAc,EAAE,SAAS;YACzB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;SACvC,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,SAAS,EAAE,QAAQ,CAAC,IAAI;QACxB,eAAe,EAAE,QAAQ,CAAC,OAAO;QACjC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,eAAe,EAAE,MAAM,CAAC,SAAS;QACjC,iBAAiB;QACjB,KAAK;KACN,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/skills/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const KNOWN_SKILLS: ReadonlyArray<string>;
2
+ //# sourceMappingURL=known-skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"known-skills.d.ts","sourceRoot":"","sources":["../../src/skills/known-skills.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,YAAY,EAAE,aAAa,CAAC,MAAM,CAY9C,CAAC"}
@@ -0,0 +1,25 @@
1
+ // Data-only registry of the skills bundled with this CLI.
2
+ //
3
+ // Deliberately dependency-free (no installer / renderer / fs imports) so a
4
+ // pure-DATA consumer — e.g. `df mode init`, whose sibling `df mode guard|context
5
+ // --hook` paths run per-tool-call in an active session — can read the catalog
6
+ // without pulling the whole `skills/install.ts` render+fs dependency chain into
7
+ // its module graph. `install.ts` imports + re-exports this so existing
8
+ // `install.js` importers are unaffected.
9
+ //
10
+ // Adding a new skill = (1) drop the source-of-truth dir under `skills/`,
11
+ // (2) append the name here.
12
+ export const KNOWN_SKILLS = [
13
+ "chief-engineer-review",
14
+ "chief-engineer-blitz",
15
+ "objectives",
16
+ "verify",
17
+ // Designer Mode (cycle 27 Phase B) — the operator-facing skill set. Each
18
+ // installs via the same machinery + the darkfactory.yaml `skills` enable
19
+ // map (`df skills install --all` cross-checks names against this list).
20
+ "designer-brief",
21
+ "designer-build",
22
+ "designer-ship",
23
+ "designer-handoff",
24
+ ];
25
+ //# sourceMappingURL=known-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"known-skills.js","sourceRoot":"","sources":["../../src/skills/known-skills.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,EAAE;AACF,2EAA2E;AAC3E,iFAAiF;AACjF,8EAA8E;AAC9E,gFAAgF;AAChF,uEAAuE;AACvE,yCAAyC;AACzC,EAAE;AACF,yEAAyE;AACzE,4BAA4B;AAE5B,MAAM,CAAC,MAAM,YAAY,GAA0B;IACjD,uBAAuB;IACvB,sBAAsB;IACtB,YAAY;IACZ,QAAQ;IACR,yEAAyE;IACzE,yEAAyE;IACzE,wEAAwE;IACxE,gBAAgB;IAChB,gBAAgB;IAChB,eAAe;IACf,kBAAkB;CACnB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@momentiq/dark-factory-cli",
3
- "version": "3.0.2",
3
+ "version": "3.1.1",
4
4
  "description": "Dark Factory OSS CLI — multi-vendor adversarial critic orchestration (Cursor, Codex, Gemini, Grok) with min-complete-quorum aggregation and trusted-surface rebind",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://momentiq.ai/dark-factory",
@@ -98,7 +98,7 @@
98
98
  "@google/genai": "^2.2.0",
99
99
  "@iarna/toml": "2.2.5",
100
100
  "@modelcontextprotocol/sdk": "^1.29.0",
101
- "@momentiq/dark-factory-schemas": "0.15.0",
101
+ "@momentiq/dark-factory-schemas": "0.15.1",
102
102
  "@openai/codex-sdk": ">=0.142.5 <1.0.0",
103
103
  "@yarnpkg/lockfile": "1.1.0",
104
104
  "ajv": "^8.20.0",
@@ -20,6 +20,20 @@ if a call is denied, **do not retry or route around it.** A denial means the ask
20
20
  needs an engineer: stop and use `/designer-handoff`. (`df mode status` confirms
21
21
  the active mode and its editable areas.)
22
22
 
23
+ ### When the feature needs to save — the persistence seam
24
+
25
+ The most common end-to-end ask is "make X editable **and** saved." You can build
26
+ the whole optimistic UI *in scope* — the inline editor, the form, validation, the
27
+ visible save affordance and its happy-path feedback — but the write that actually
28
+ **persists** it lands on a backend path (an API route, a server mutation, a
29
+ migration) the guard **correctly denies**. That denial is not the feature failing;
30
+ it is the seam where your work hands to an engineer's.
31
+
32
+ So don't dead-end on it. Build and screenshot the optimistic UI you *can* build,
33
+ **commit it to the branch**, then switch to `/designer-handoff` and name that exact
34
+ persistence seam. Your UI and the engineer's persistence then compose into one
35
+ shippable feature — the build→handoff→resume loop in `/designer-handoff`.
36
+
23
37
  ## Reuse the design system — don't invent
24
38
 
25
39
  `DESIGN.md` is the design source of truth (its tokens are injected into your
@@ -18,6 +18,31 @@ boundary is a clean handoff that feels like momentum.
18
18
  - A gate finding **won't converge within N=2** fix rounds, or the fix requires
19
19
  work outside your scope.
20
20
 
21
+ ## The persistence handoff — "editable **and** saved" (build→handoff→resume)
22
+
23
+ The most common Designer Mode dead-end is a feature that must **save** something.
24
+ You can build the optimistic UI in scope — the inline editor, the toggle, the form
25
+ and its happy-path feedback — but the write that **persists** it lands on a
26
+ protected path (an API route, a server mutation, a migration) the guard correctly
27
+ denies. Make the two halves compose into ONE feature instead of losing the thread:
28
+
29
+ 1. **Build and keep the in-scope UI.** Finish everything the optimistic UI needs
30
+ (state, validation, the visible save affordance) and screenshot it. An
31
+ uncommitted working tree is a lost thread — **commit the in-scope UI to the
32
+ branch and open the PR (a draft is fine)** so the engineer can resume *on top of*
33
+ it, then `df handoff --link pr:<PR#>` so the handoff points at that exact code.
34
+ 2. **Name the persistence seam.** In the note's **Blocked — why**, name the exact
35
+ seam an engineer must wire: the endpoint or mutation (the path the guard
36
+ reported), the request/response shape the UI already expects, and where the UI
37
+ calls it. This is the one thing that turns a rejection into a resumable task.
38
+ 3. **Resume as one feature.** The engineer wires the persistence on the same
39
+ branch/PR; your optimistic UI + their save ship together. Say so in the note so
40
+ the work resumes rather than restarts.
41
+
42
+ > The guard denies designer writes to persistence paths **on purpose** — a
43
+ > designer-safe client-mutation path is deliberately out of scope. This loop is how
44
+ > a save-feature still ships end-to-end today.
45
+
21
46
  ## Package the artifact with `df handoff`
22
47
 
23
48
  `df handoff` is Issue-anchored: it reads the composed note on **stdin**, upserts
@@ -59,7 +84,9 @@ What is already built and where (branch or PR), and what is verified visually.
59
84
 
60
85
  ## Blocked — why
61
86
  The specific boundary: which scope, protected path, dependency, or gate — and
62
- what an engineer needs to decide or do next.
87
+ what an engineer needs to decide or do next. For a persistence handoff, name the
88
+ exact endpoint or mutation to wire and the request/response shape the in-scope UI
89
+ already expects, so the engineer resumes instead of restarting.
63
90
  <!-- /agent-context:v1 -->
64
91
  ```
65
92
 
@@ -19,18 +19,41 @@ optional, consumer-supplied Playwright **storage-state**.
19
19
  | `playwright.ui-route.config.ts` | Dedicated Playwright config: one chromium project, optional storage-state, optional local-preview server. | `testDir` / dev command |
20
20
  | `ui-route.producer.spec.ts` | The capture: ARIA snapshot + after (+ optional before) screenshots, fail-closed coverage, optional VLM hook. | **`SURFACES[]`** (required) |
21
21
  | `coverage.ts` | Pure fail-closed coverage logic (a changed UI path with no surface blocks). Unit-tested upstream. | No |
22
+ | `surface-declaration.ts` | Reads the **designer-safe** `.darkfactory/ui-surfaces.json` declaration (a data file: "this changed area is shown on `<route>`") + builds the mode-aware fail-closed message. Pure, unit-tested upstream. | No |
22
23
 
23
24
  ## Setup (one-time)
24
25
 
25
- 1. **Copy** the four files into your repo. Convention: the script under
26
+ 1. **Copy** the files into your repo. Convention: the script under
26
27
  `scripts/verify/`, and `playwright.ui-route.config.ts` + `tests/e2e/
27
- ui-route.producer.spec.ts` + `tests/e2e/coverage.ts` under your web app dir
28
- (`web/` by default). Adjust `DF_UI_ROUTE_WEB_DIR` / `DF_UI_ROUTE_CONFIG` (see
29
- the script header) if your layout differs.
28
+ ui-route.producer.spec.ts` + `tests/e2e/coverage.ts` + `tests/e2e/
29
+ surface-declaration.ts` under your web app dir (`web/` by default). Adjust
30
+ `DF_UI_ROUTE_WEB_DIR` / `DF_UI_ROUTE_CONFIG` (see the script header) if your
31
+ layout differs.
30
32
  2. **Edit `SURFACES[]`** in `ui-route.producer.spec.ts` — your routes, each with
31
33
  a structural `requiredHeading` (an accessible-name regex) and the `covers`
32
34
  source globs it is the evidence for. v1 ships one public `/` surface so it
33
35
  works zero-auth out of the box.
36
+
37
+ **Designer-safe alternative (no code edit, #359):** a non-engineer can cover a
38
+ changed area by DECLARING the covering route in a data file —
39
+ `.darkfactory/ui-surfaces.json` at the repo root — instead of editing
40
+ `SURFACES[]`:
41
+
42
+ ```json
43
+ { "surfaces": [
44
+ { "path": "/chat", "covers": ["web/components/chat/**"], "requiredHeading": "Chat" }
45
+ ] }
46
+ ```
47
+
48
+ Declared surfaces are captured (navigated + asserted + screenshotted) exactly
49
+ like a hand-authored one, so the fail-closed coverage requirement is
50
+ unchanged — only the authoring surface (JSON data vs TS/RegExp) differs.
51
+ `requiredHeading` here is a plain string (matched case-insensitively, not a
52
+ regex). Under an operator mode (`DF_MODE` set, e.g. Designer Mode), a still-
53
+ uncovered path routes to `/designer-handoff` in plain language instead of
54
+ "edit the spec". **Caveat:** an over-broad `covers` glob re-opens the
55
+ sibling-swallow hazard (a `/` surface claiming your whole app) — keep declared
56
+ `covers` scoped to what the route actually renders.
34
57
  3. **(Protected surfaces only)** Mint an authenticated Playwright `storageState`
35
58
  JSON with your own auth and point `DF_UI_ROUTE_STORAGE_STATE` at it. Public
36
59
  surfaces need none. Gitignore your storage-state (`**/.auth/`).
@@ -59,6 +82,8 @@ optional, consumer-supplied Playwright **storage-state**.
59
82
  | `DF_UI_ROUTE_WEB_DIR` | `web` | Where your app + `@playwright/test` live. |
60
83
  | `DF_UI_ROUTE_CONFIG` | `playwright.ui-route.config.ts` | Producer config, relative to the web dir. |
61
84
  | `DF_UI_ROUTE_STORAGE_STATE` | _(unset)_ | Path to an authenticated storage-state (protected surfaces). |
85
+ | `DF_UI_SURFACES` | `<repo-root>/.darkfactory/ui-surfaces.json` | Designer-safe coverage declaration (#359). Absent ⇒ no declaration; upward-walked from the web dir when unset. |
86
+ | `DF_MODE` | _(unset)_ | Operator mode (e.g. `designer`); when set, a still-uncovered path routes to `/designer-handoff` in plain language. |
62
87
  | `PLAYWRIGHT_TEST_BASE_URL` | local preview | Point at a deployed preview of the SHA instead of serving locally. |
63
88
  | `DF_UI_ROUTE_DEV_CMD` | `npm run dev` | Local-preview server command. |
64
89
  | `DF_UI_ROUTE_PORT` | `3217` | Local-preview port. |
@@ -86,6 +86,7 @@ GUARDED_PATHS=(
86
86
  "${WEB_DIR}/**" '*.tsx'
87
87
  "${SCRIPT_REL}"
88
88
  '.agent-review/config.json'
89
+ '.darkfactory/ui-surfaces.json'
89
90
  )
90
91
  if ! git diff-index --quiet HEAD -- "${GUARDED_PATHS[@]}" 2>/dev/null; then
91
92
  echo "[playwright-route] BLOCK: tracked UI or route-machinery files are dirty (uncommitted changes)." >&2
@@ -121,6 +122,15 @@ mkdir -p "${OUT_DIR}"
121
122
  export DF_UI_ROUTE_SHA="${SHA}"
122
123
  export DF_UI_ROUTE_OUT="${OUT_DIR}"
123
124
 
125
+ # Designer-safe coverage declaration (#359). The producer runs with cwd=${WEB_DIR},
126
+ # but the declaration lives at the REPO ROOT alongside the other .darkfactory/
127
+ # config — export its absolute path so the producer resolves it deterministically
128
+ # (it also upward-walks as a fallback when this is unset). An absent file is
129
+ # treated as "no declaration". It is in GUARDED_PATHS above, so an uncommitted
130
+ # declaration fails closed (evidence must bind to the committed SHA). DF_MODE (if
131
+ # the operator set it) is inherited by the producer subprocess automatically.
132
+ export DF_UI_SURFACES="${REPO_ROOT}/.darkfactory/ui-surfaces.json"
133
+
124
134
  # --- preflight: web tier present + Playwright installed --------------------
125
135
  if [[ ! -d "${WEB_DIR}/node_modules/@playwright" ]]; then
126
136
  echo "[playwright-route] SOFT-SKIP: ${WEB_DIR}/ Playwright not installed (run \`cd ${WEB_DIR} && npm ci\`)." >&2