@warpgogol/forge 0.22.0 → 0.24.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 (95) hide show
  1. package/AGENTS.md +33 -3
  2. package/dist/bin/cli.js +1 -0
  3. package/dist/bin/cli.js.map +1 -1
  4. package/dist/os/adr/handlers/validate.d.ts.map +1 -1
  5. package/dist/os/adr/handlers/validate.js +11 -1
  6. package/dist/os/adr/handlers/validate.js.map +1 -1
  7. package/dist/os/core/core.module.d.ts.map +1 -1
  8. package/dist/os/core/core.module.js +66 -0
  9. package/dist/os/core/core.module.js.map +1 -1
  10. package/dist/os/core/handlers/release-publish.js +4 -4
  11. package/dist/os/core/handlers/release-publish.js.map +1 -1
  12. package/dist/os/exploration/exploration.module.d.ts +3 -0
  13. package/dist/os/exploration/exploration.module.d.ts.map +1 -0
  14. package/dist/os/exploration/exploration.module.js +82 -0
  15. package/dist/os/exploration/exploration.module.js.map +1 -0
  16. package/dist/os/exploration/frontmatter-io.d.ts +13 -0
  17. package/dist/os/exploration/frontmatter-io.d.ts.map +1 -0
  18. package/dist/os/exploration/frontmatter-io.js +63 -0
  19. package/dist/os/exploration/frontmatter-io.js.map +1 -0
  20. package/dist/os/exploration/handlers/archive.d.ts +4 -0
  21. package/dist/os/exploration/handlers/archive.d.ts.map +1 -0
  22. package/dist/os/exploration/handlers/archive.js +135 -0
  23. package/dist/os/exploration/handlers/archive.js.map +1 -0
  24. package/dist/os/exploration/handlers/list.d.ts +4 -0
  25. package/dist/os/exploration/handlers/list.d.ts.map +1 -0
  26. package/dist/os/exploration/handlers/list.js +56 -0
  27. package/dist/os/exploration/handlers/list.js.map +1 -0
  28. package/dist/os/exploration/handlers/show.d.ts +4 -0
  29. package/dist/os/exploration/handlers/show.d.ts.map +1 -0
  30. package/dist/os/exploration/handlers/show.js +91 -0
  31. package/dist/os/exploration/handlers/show.js.map +1 -0
  32. package/dist/os/exploration/index.d.ts +7 -0
  33. package/dist/os/exploration/index.d.ts.map +1 -0
  34. package/dist/os/exploration/index.js +17 -0
  35. package/dist/os/exploration/index.js.map +1 -0
  36. package/dist/os/exploration/types.d.ts +38 -0
  37. package/dist/os/exploration/types.d.ts.map +1 -0
  38. package/dist/os/exploration/types.js +23 -0
  39. package/dist/os/exploration/types.js.map +1 -0
  40. package/dist/os/rfc/handlers/validate-rules.d.ts +5 -4
  41. package/dist/os/rfc/handlers/validate-rules.d.ts.map +1 -1
  42. package/dist/os/rfc/handlers/validate-rules.js +52 -7
  43. package/dist/os/rfc/handlers/validate-rules.js.map +1 -1
  44. package/dist/os/rfc/handlers/validate.d.ts.map +1 -1
  45. package/dist/os/rfc/handlers/validate.js +5 -2
  46. package/dist/os/rfc/handlers/validate.js.map +1 -1
  47. package/dist/os/rfc/index.d.ts +2 -2
  48. package/dist/os/rfc/index.d.ts.map +1 -1
  49. package/dist/os/rfc/index.js +1 -1
  50. package/dist/os/rfc/index.js.map +1 -1
  51. package/dist/os/rfc/types.d.ts +13 -0
  52. package/dist/os/rfc/types.d.ts.map +1 -1
  53. package/dist/os/rfc/types.js +1 -0
  54. package/dist/os/rfc/types.js.map +1 -1
  55. package/dist/os/spec/live-spec-list.d.ts +4 -0
  56. package/dist/os/spec/live-spec-list.d.ts.map +1 -0
  57. package/dist/os/spec/live-spec-list.js +64 -0
  58. package/dist/os/spec/live-spec-list.js.map +1 -0
  59. package/dist/os/spec/live-spec-merge.d.ts +4 -0
  60. package/dist/os/spec/live-spec-merge.d.ts.map +1 -0
  61. package/dist/os/spec/live-spec-merge.js +345 -0
  62. package/dist/os/spec/live-spec-merge.js.map +1 -0
  63. package/dist/os/spec/live-spec-show.d.ts +4 -0
  64. package/dist/os/spec/live-spec-show.d.ts.map +1 -0
  65. package/dist/os/spec/live-spec-show.js +99 -0
  66. package/dist/os/spec/live-spec-show.js.map +1 -0
  67. package/dist/os/spec/live-spec-types.d.ts +71 -0
  68. package/dist/os/spec/live-spec-types.d.ts.map +1 -0
  69. package/dist/os/spec/live-spec-types.js +14 -0
  70. package/dist/os/spec/live-spec-types.js.map +1 -0
  71. package/dist/os/spec/live-spec-validate.d.ts +4 -0
  72. package/dist/os/spec/live-spec-validate.d.ts.map +1 -0
  73. package/dist/os/spec/live-spec-validate.js +140 -0
  74. package/dist/os/spec/live-spec-validate.js.map +1 -0
  75. package/dist/os/spec/spec.module.d.ts.map +1 -1
  76. package/dist/os/spec/spec.module.js +54 -2
  77. package/dist/os/spec/spec.module.js.map +1 -1
  78. package/dist/src/index.d.ts +1 -0
  79. package/dist/src/index.d.ts.map +1 -1
  80. package/dist/src/index.js +1 -0
  81. package/dist/src/index.js.map +1 -1
  82. package/os/rfc/rfc-0000-template.md +5 -0
  83. package/package.json +9 -1
  84. package/skills/_shared/fo-pipeline-conventions.md +24 -0
  85. package/skills/_shared/fo-session-summary.md +6 -0
  86. package/skills/fo/fo-design-summit/SKILL.md +240 -0
  87. package/skills/fo/fo-explore/SKILL.md +145 -0
  88. package/skills/fo/fo-idea/SKILL.md +44 -20
  89. package/skills/fo/fo-idea-audit/SKILL.md +1 -0
  90. package/skills/fo/fo-idea-create-rfc/SKILL.md +3 -0
  91. package/skills/fo/fo-idea-enhance/SKILL.md +3 -2
  92. package/skills/fo/fo-idea-implement/SKILL.md +9 -4
  93. package/skills/fo/fo-idea-plan/SKILL.md +10 -0
  94. package/skills/fo/fo-review/SKILL.md +5 -0
  95. package/skills/fo/fo-session-retro/SKILL.md +15 -8
@@ -0,0 +1,140 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>spec.live.validate handler — validates all living specs in docs/specs/live/
4
+ with rules V-LS-01..05 (RFC-0711).</purpose>
5
+ <non-goals>
6
+ <item>Do not merge or list — use spec.live.merge / spec.live.list.</item>
7
+ </non-goals>
8
+ </MODULE_CONTRACT>
9
+ <CHANGE_SUMMARY>
10
+ <item>RFC-0711: initial spec.live.validate handler with V-LS-01..05 rules.</item>
11
+ </CHANGE_SUMMARY>
12
+ */
13
+ import fs from "node:fs/promises";
14
+ import { existsSync } from "node:fs";
15
+ import path from "node:path";
16
+ import YAML from "yaml";
17
+ import { listRfcFiles, readAndParseRfc } from "../rfc/frontmatter-io.js";
18
+ import { RFC_DIR } from "../rfc/types.js";
19
+ const LIVE_SPECS_DIR = "docs/specs/live";
20
+ const REQUIRED_FM_FIELDS = ["domain", "title", "lastMergedRfc", "updatedAt", "createdAt", "history"];
21
+ export async function runSpecLiveValidate(_input, context) {
22
+ const { workspaceRoot, logger, outputFormat } = context;
23
+ const liveSpecsDir = path.join(workspaceRoot, LIVE_SPECS_DIR);
24
+ const rfcDir = path.join(workspaceRoot, RFC_DIR);
25
+ const violations = [];
26
+ let specsChecked = 0;
27
+ const domains = new Set();
28
+ const archivedRfcIds = new Set();
29
+ const rfcFiles = await listRfcFiles(rfcDir);
30
+ for (const file of rfcFiles) {
31
+ const parsed = await readAndParseRfc(rfcDir, file);
32
+ if (parsed) {
33
+ const id = String(parsed.parsed.frontmatter["id"] ?? "").trim();
34
+ const status = String(parsed.parsed.frontmatter["status"] ?? "").trim();
35
+ if (id && (status === "implemented" || status === "rejected" || status === "superseded")) {
36
+ archivedRfcIds.add(id);
37
+ }
38
+ }
39
+ }
40
+ if (!existsSync(liveSpecsDir)) {
41
+ const result = {
42
+ command: "spec.live.validate",
43
+ status: "pass",
44
+ violations: [],
45
+ specsChecked: 0,
46
+ };
47
+ if (outputFormat === "pretty") {
48
+ logger.info("spec.live.validate: no living specs directory — pass (empty)");
49
+ }
50
+ return {
51
+ data: result,
52
+ exitCode: 0,
53
+ summary: "spec.live.validate: 0 living specs — pass",
54
+ };
55
+ }
56
+ const files = await fs.readdir(liveSpecsDir);
57
+ const specFiles = files.filter((f) => f.endsWith(".md") && f !== "README.md");
58
+ for (const file of specFiles) {
59
+ specsChecked++;
60
+ const filePath = path.join(liveSpecsDir, file);
61
+ const content = await fs.readFile(filePath, "utf-8");
62
+ const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
63
+ if (!match) {
64
+ violations.push({ rule: "V-LS-01", message: `${file}: no valid frontmatter block`, domain: file });
65
+ continue;
66
+ }
67
+ const fm = (YAML.parse(match[1]) ?? {});
68
+ const domain = String(fm["domain"] ?? "");
69
+ for (const field of REQUIRED_FM_FIELDS) {
70
+ if (!(field in fm) || fm[field] === undefined || fm[field] === null) {
71
+ violations.push({
72
+ rule: "V-LS-01",
73
+ message: `${file}: missing required field "${field}"`,
74
+ domain,
75
+ });
76
+ }
77
+ }
78
+ if (domain && file !== `${domain}.md`) {
79
+ violations.push({
80
+ rule: "V-LS-02",
81
+ message: `${file}: domain "${domain}" does not match filename`,
82
+ domain,
83
+ });
84
+ }
85
+ const lastMergedRfc = String(fm["lastMergedRfc"] ?? "");
86
+ if (lastMergedRfc && !archivedRfcIds.has(lastMergedRfc)) {
87
+ violations.push({
88
+ rule: "V-LS-03",
89
+ message: `${file}: lastMergedRfc "${lastMergedRfc}" is not an archived RFC`,
90
+ domain,
91
+ });
92
+ }
93
+ const history = Array.isArray(fm["history"]) ? fm["history"] : [];
94
+ for (const entry of history) {
95
+ if (entry.rfc && !archivedRfcIds.has(entry.rfc)) {
96
+ violations.push({
97
+ rule: "V-LS-04",
98
+ message: `${file}: history entry "${entry.rfc}" is not an archived RFC`,
99
+ domain,
100
+ });
101
+ }
102
+ }
103
+ if (domain) {
104
+ if (domains.has(domain)) {
105
+ violations.push({
106
+ rule: "V-LS-05",
107
+ message: `duplicate domain "${domain}" found in multiple files`,
108
+ domain,
109
+ });
110
+ }
111
+ domains.add(domain);
112
+ }
113
+ }
114
+ const hasFailures = violations.length > 0;
115
+ const result = {
116
+ command: "spec.live.validate",
117
+ status: hasFailures ? "fail" : "pass",
118
+ violations,
119
+ specsChecked,
120
+ };
121
+ if (outputFormat === "pretty") {
122
+ if (hasFailures) {
123
+ logger.error(`spec.live.validate: ${violations.length} violation(s) across ${specsChecked} spec(s)`);
124
+ for (const v of violations) {
125
+ logger.error(` ${v.rule}: ${v.message}`);
126
+ }
127
+ }
128
+ else {
129
+ logger.success(`spec.live.validate: all ${specsChecked} living spec(s) pass`);
130
+ }
131
+ }
132
+ return {
133
+ data: result,
134
+ exitCode: hasFailures ? 1 : 0,
135
+ summary: hasFailures
136
+ ? `spec.live.validate: ${violations.length} violation(s)`
137
+ : `spec.live.validate: ${specsChecked} spec(s) — pass`,
138
+ };
139
+ }
140
+ //# sourceMappingURL=live-spec-validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-spec-validate.js","sourceRoot":"","sources":["../../../os/spec/live-spec-validate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"spec.module.d.ts","sourceRoot":"","sources":["../../../os/spec/spec.module.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,eAAO,MAAM,eAAe,EAAE,WA2D7B,CAAC"}
1
+ {"version":3,"file":"spec.module.d.ts","sourceRoot":"","sources":["../../../os/spec/spec.module.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,eAAO,MAAM,eAAe,EAAE,WAsH7B,CAAC"}
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  <MODULE_CONTRACT>
3
- <purpose>Register the forge spec module — spec.validate (RFC-0394), spec.status + spec.materialize (RFC-0396).</purpose>
3
+ <purpose>Register the forge spec module — spec.validate (RFC-0394), spec.status + spec.materialize (RFC-0396), spec.live.merge/list/show/validate (RFC-0711).</purpose>
4
4
  <non-goals>
5
5
  <item>Do not implement skill logic — skills live in skills/.</item>
6
6
  </non-goals>
@@ -8,15 +8,20 @@
8
8
  <CHANGE_SUMMARY>
9
9
  <item>RFC-0394: initial forgeSpecModule registering spec.validate.</item>
10
10
  <item>RFC-0396: added spec.status and spec.materialize commands.</item>
11
+ <item>RFC-0711: added spec.live.merge, spec.live.list, spec.live.show, spec.live.validate commands.</item>
11
12
  </CHANGE_SUMMARY>
12
13
  */
13
14
  export const forgeSpecModule = {
14
15
  name: "forge-spec",
15
- version: "0.1.0",
16
+ version: "0.2.0",
16
17
  async register(registry) {
17
18
  const { runSpecValidate } = await import("./spec-validate.js");
18
19
  const { runSpecStatus } = await import("./spec-status.js");
19
20
  const { runSpecMaterialize } = await import("./spec-materialize.js");
21
+ const { runSpecLiveMerge } = await import("./live-spec-merge.js");
22
+ const { runSpecLiveList } = await import("./live-spec-list.js");
23
+ const { runSpecLiveShow } = await import("./live-spec-show.js");
24
+ const { runSpecLiveValidate } = await import("./live-spec-validate.js");
20
25
  registry.registerCommand({
21
26
  name: "spec.validate",
22
27
  description: "Validate vendored spec packages under docs/specs/. " +
@@ -62,6 +67,53 @@ export const forgeSpecModule = {
62
67
  },
63
68
  execute: runSpecMaterialize,
64
69
  });
70
+ registry.registerCommand({
71
+ name: "spec.live.merge",
72
+ description: "Merge deltas from an implemented RFC's ## Design section into a living feature spec " +
73
+ "under docs/specs/live/<domain>.md. Requires --id=<RFC-XXXX>. " +
74
+ "Domain is auto-derived from packagesImpacted[0] when liveSpec: true, or uses " +
75
+ "the string value when liveSpec: <domain>. " +
76
+ "All-or-nothing: aborts on any heading conflict without writing. " +
77
+ "Use --dry-run to preview deltas without writing.",
78
+ scope: "workspace",
79
+ mutatesState: true,
80
+ writes: ["docs/specs/live/*.md"],
81
+ reads: ["docs/rfcs/**/*.md", "docs/specs/live/*.md"],
82
+ flags: {
83
+ id: { kind: "string", required: true, description: "RFC id to merge (e.g. RFC-0711)." },
84
+ "dry-run": { kind: "boolean", description: "Preview deltas without writing files." },
85
+ },
86
+ execute: runSpecLiveMerge,
87
+ });
88
+ registry.registerCommand({
89
+ name: "spec.live.list",
90
+ description: "List all living feature specs in docs/specs/live/. " +
91
+ "Returns domain, title, lastMergedRfc, updatedAt, and historyCount for each spec.",
92
+ scope: "workspace",
93
+ reads: ["docs/specs/live/*.md"],
94
+ execute: runSpecLiveList,
95
+ });
96
+ registry.registerCommand({
97
+ name: "spec.live.show",
98
+ description: "Show a single living feature spec by domain. " +
99
+ "Requires --domain=<name>. Returns full frontmatter and body content.",
100
+ scope: "workspace",
101
+ reads: ["docs/specs/live/*.md"],
102
+ flags: {
103
+ domain: { kind: "string", required: true, description: "Domain name (filename without .md)." },
104
+ },
105
+ execute: runSpecLiveShow,
106
+ });
107
+ registry.registerCommand({
108
+ name: "spec.live.validate",
109
+ description: "Validate all living feature specs in docs/specs/live/. " +
110
+ "Checks V-LS-01 (frontmatter), V-LS-02 (domain/filename match), " +
111
+ "V-LS-03 (lastMergedRfc is archived), V-LS-04 (history entries are archived), " +
112
+ "V-LS-05 (no duplicate domains).",
113
+ scope: "workspace",
114
+ reads: ["docs/specs/live/*.md", "docs/rfcs/**/*.md"],
115
+ execute: runSpecLiveValidate,
116
+ });
65
117
  },
66
118
  };
67
119
  //# sourceMappingURL=spec.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spec.module.js","sourceRoot":"","sources":["../../../os/spec/spec.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAIF,MAAM,CAAC,MAAM,eAAe,GAAgB;IAC1C,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,OAAO;IAChB,KAAK,CAAC,QAAQ,CAAC,QAAQ;QACrB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC/D,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAErE,QAAQ,CAAC,eAAe,CAAC;YACvB,IAAI,EAAE,eAAe;YACrB,WAAW,EACT,qDAAqD;gBACrD,kEAAkE;gBAClE,gFAAgF;gBAChF,4CAA4C;YAC9C,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE;gBACL,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+BAA+B;iBAC7C;aACF;YACD,KAAK,EAAE,CAAC,iBAAiB,CAAC;YAC1B,OAAO,EAAE,eAAe;SACzB,CAAC,CAAC;QAEH,QAAQ,CAAC,eAAe,CAAC;YACvB,IAAI,EAAE,aAAa;YACnB,WAAW,EACT,4CAA4C;gBAC5C,sFAAsF;YACxF,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE;gBACL,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gCAAgC;iBAC9C;aACF;YACD,KAAK,EAAE,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;YAC/C,OAAO,EAAE,aAAa;SACvB,CAAC,CAAC;QAEH,QAAQ,CAAC,eAAe,CAAC;YACvB,IAAI,EAAE,kBAAkB;YACxB,WAAW,EACT,mEAAmE;gBACnE,qGAAqG;YACvG,KAAK,EAAE,WAAW;YAClB,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,CAAC,oBAAoB,EAAE,8BAA8B,CAAC;YAC9D,KAAK,EAAE,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;YAC/C,KAAK,EAAE;gBACL,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,8BAA8B,EAAE;gBACrF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2DAA2D,EAAE;gBAClG,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mDAAmD,EAAE;aAC5F;YACD,OAAO,EAAE,kBAAkB;SAC5B,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"spec.module.js","sourceRoot":"","sources":["../../../os/spec/spec.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;EAYE;AAIF,MAAM,CAAC,MAAM,eAAe,GAAgB;IAC1C,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,OAAO;IAChB,KAAK,CAAC,QAAQ,CAAC,QAAQ;QACrB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC/D,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACrE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAClE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAChE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAChE,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QAExE,QAAQ,CAAC,eAAe,CAAC;YACvB,IAAI,EAAE,eAAe;YACrB,WAAW,EACT,qDAAqD;gBACrD,kEAAkE;gBAClE,gFAAgF;gBAChF,4CAA4C;YAC9C,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE;gBACL,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+BAA+B;iBAC7C;aACF;YACD,KAAK,EAAE,CAAC,iBAAiB,CAAC;YAC1B,OAAO,EAAE,eAAe;SACzB,CAAC,CAAC;QAEH,QAAQ,CAAC,eAAe,CAAC;YACvB,IAAI,EAAE,aAAa;YACnB,WAAW,EACT,4CAA4C;gBAC5C,sFAAsF;YACxF,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE;gBACL,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gCAAgC;iBAC9C;aACF;YACD,KAAK,EAAE,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;YAC/C,OAAO,EAAE,aAAa;SACvB,CAAC,CAAC;QAEH,QAAQ,CAAC,eAAe,CAAC;YACvB,IAAI,EAAE,kBAAkB;YACxB,WAAW,EACT,mEAAmE;gBACnE,qGAAqG;YACvG,KAAK,EAAE,WAAW;YAClB,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,CAAC,oBAAoB,EAAE,8BAA8B,CAAC;YAC9D,KAAK,EAAE,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;YAC/C,KAAK,EAAE;gBACL,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,8BAA8B,EAAE;gBACrF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2DAA2D,EAAE;gBAClG,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mDAAmD,EAAE;aAC5F;YACD,OAAO,EAAE,kBAAkB;SAC5B,CAAC,CAAC;QAEH,QAAQ,CAAC,eAAe,CAAC;YACvB,IAAI,EAAE,iBAAiB;YACvB,WAAW,EACT,sFAAsF;gBACtF,+DAA+D;gBAC/D,+EAA+E;gBAC/E,4CAA4C;gBAC5C,kEAAkE;gBAClE,kDAAkD;YACpD,KAAK,EAAE,WAAW;YAClB,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,CAAC,sBAAsB,CAAC;YAChC,KAAK,EAAE,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;YACpD,KAAK,EAAE;gBACL,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,kCAAkC,EAAE;gBACvF,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,uCAAuC,EAAE;aACrF;YACD,OAAO,EAAE,gBAAgB;SAC1B,CAAC,CAAC;QAEH,QAAQ,CAAC,eAAe,CAAC;YACvB,IAAI,EAAE,gBAAgB;YACtB,WAAW,EACT,qDAAqD;gBACrD,kFAAkF;YACpF,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,CAAC,sBAAsB,CAAC;YAC/B,OAAO,EAAE,eAAe;SACzB,CAAC,CAAC;QAEH,QAAQ,CAAC,eAAe,CAAC;YACvB,IAAI,EAAE,gBAAgB;YACtB,WAAW,EACT,+CAA+C;gBAC/C,sEAAsE;YACxE,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,CAAC,sBAAsB,CAAC;YAC/B,KAAK,EAAE;gBACL,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,qCAAqC,EAAE;aAC/F;YACD,OAAO,EAAE,eAAe;SACzB,CAAC,CAAC;QAEH,QAAQ,CAAC,eAAe,CAAC;YACvB,IAAI,EAAE,oBAAoB;YAC1B,WAAW,EACT,yDAAyD;gBACzD,iEAAiE;gBACjE,+EAA+E;gBAC/E,iCAAiC;YACnC,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,CAAC,sBAAsB,EAAE,mBAAmB,CAAC;YACpD,OAAO,EAAE,mBAAmB;SAC7B,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
@@ -29,4 +29,5 @@ export { forgeAdrModule } from "../os/adr/adr.module.ts";
29
29
  export { forgePlanModule } from "../os/plan/plan.module.ts";
30
30
  export { forgeAuditModule } from "../os/audit/audit.module.ts";
31
31
  export { forgeMissionModule } from "../os/mission/mission.module.ts";
32
+ export { forgeExplorationModule } from "../os/exploration/exploration.module.ts";
32
33
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/dist/src/index.js CHANGED
@@ -49,4 +49,5 @@ export { forgeAdrModule } from "../os/adr/adr.module.js";
49
49
  export { forgePlanModule } from "../os/plan/plan.module.js";
50
50
  export { forgeAuditModule } from "../os/audit/audit.module.js";
51
51
  export { forgeMissionModule } from "../os/mission/mission.module.js";
52
+ export { forgeExplorationModule } from "../os/exploration/exploration.module.js";
52
53
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AA6BF,sBAAsB;AACtB,OAAO,EACL,eAAe,EAEf,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,8BAA8B,EAG9B,WAAW,EACX,YAAY,EACZ,UAAU,EAEV,QAAQ,GACT,MAAM,kBAAkB,CAAC;AAK1B,eAAe;AACf,OAAO,EAAE,sBAAsB,EAAyB,MAAM,mBAAmB,CAAC;AAElF,iBAAiB;AACjB,OAAO,EAAE,YAAY,EAAwB,MAAM,eAAe,CAAC;AAEnE,0BAA0B;AAC1B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,0BAA0B,EAC1B,aAAa,EACb,eAAe,EACf,uBAAuB,EACvB,qBAAqB,GAMtB,MAAM,0BAA0B,CAAC;AAElC,sCAAsC;AACtC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,GAGZ,MAAM,6BAA6B,CAAC;AAErC,mCAAmC;AACnC,OAAO,EACL,8BAA8B,EAC9B,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,0BAA0B,EAC1B,oBAAoB,GAKrB,MAAM,8BAA8B,CAAC;AAEtC,8BAA8B;AAC9B,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,GAQzB,MAAM,sBAAsB,CAAC;AAE9B,aAAa;AACb,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,kCAAkC;AAClC,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEzF,aAAa;AACb,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAStE,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAChG,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,cAAc,GACf,MAAM,+BAA+B,CAAC;AAEvC,aAAa;AACb,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AA6BF,sBAAsB;AACtB,OAAO,EACL,eAAe,EAEf,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,8BAA8B,EAG9B,WAAW,EACX,YAAY,EACZ,UAAU,EAEV,QAAQ,GACT,MAAM,kBAAkB,CAAC;AAK1B,eAAe;AACf,OAAO,EAAE,sBAAsB,EAAyB,MAAM,mBAAmB,CAAC;AAElF,iBAAiB;AACjB,OAAO,EAAE,YAAY,EAAwB,MAAM,eAAe,CAAC;AAEnE,0BAA0B;AAC1B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,0BAA0B,EAC1B,aAAa,EACb,eAAe,EACf,uBAAuB,EACvB,qBAAqB,GAMtB,MAAM,0BAA0B,CAAC;AAElC,sCAAsC;AACtC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,GAGZ,MAAM,6BAA6B,CAAC;AAErC,mCAAmC;AACnC,OAAO,EACL,8BAA8B,EAC9B,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,0BAA0B,EAC1B,oBAAoB,GAKrB,MAAM,8BAA8B,CAAC;AAEtC,8BAA8B;AAC9B,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,GAQzB,MAAM,sBAAsB,CAAC;AAE9B,aAAa;AACb,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,kCAAkC;AAClC,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEzF,aAAa;AACb,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAStE,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAChG,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,cAAc,GACf,MAAM,+BAA+B,CAAC;AAEvC,aAAa;AACb,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC"}
@@ -40,6 +40,11 @@ satisfies: []
40
40
  # Values: minor (Breaks-B, requires migrator), patch (safe), none (prose-only),
41
41
  # major (architectural, manually reserved). Default: patch.
42
42
  versionBump: patch
43
+ # RFC-0711: Declares that this RFC contributes to a living feature spec
44
+ # under docs/specs/live/<domain>.md. When true, domain is auto-derived from
45
+ # packagesImpacted[0]. When a string, used as explicit domain override.
46
+ # Absent or false means no living spec merge occurs.
47
+ # liveSpec: true
43
48
  commands:
44
49
  proposed: []
45
50
  added: []
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@warpgogol/forge",
3
- "version": "0.22.0",
3
+ "version": "0.24.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -116,6 +116,14 @@
116
116
  "./os/mission-module": {
117
117
  "types": "./dist/os/mission/mission.module.d.ts",
118
118
  "default": "./dist/os/mission/mission.module.js"
119
+ },
120
+ "./os/exploration": {
121
+ "types": "./dist/os/exploration/index.d.ts",
122
+ "default": "./dist/os/exploration/index.js"
123
+ },
124
+ "./os/exploration-module": {
125
+ "types": "./dist/os/exploration/exploration.module.d.ts",
126
+ "default": "./dist/os/exploration/exploration.module.js"
119
127
  }
120
128
  },
121
129
  "files": [
@@ -27,6 +27,22 @@ Stage only the files this skill produces or modifies. Another agent may be worki
27
27
  - **RFC pipeline**: create → audit → enhance → plan → implement (includes review → fix)
28
28
  - **ADR pipeline**: create → implement (includes review → fix)
29
29
 
30
+ ## Minimality ladder
31
+
32
+ Before writing implementation code, climb the minimality ladder. Stop at the first rung that holds — that is your implementation. The ladder runs after you understand the problem (read the code, trace the flow), not instead of it.
33
+
34
+ 1. **Does this need to exist?** → no: skip it (YAGNI)
35
+ 2. **Already in this codebase?** → reuse it, don't rewrite
36
+ 3. **Stdlib does it?** → use it
37
+ 4. **Native platform feature?** → use it (e.g. `<input type="date">` instead of a date picker library)
38
+ 5. **Installed dependency?** → use it
39
+ 6. **One line?** → one line
40
+ 7. **Only then**: write the minimum that works
41
+
42
+ Lazy about the solution, never about reading. Lazy, not negligent: trust-boundary validation, data-loss handling, security, and accessibility are never on the chopping block — they are part of "the minimum that works."
43
+
44
+ The ladder is a pre-coding decision tool, not a post-hoc review checklist. It determines the implementation approach before the first edit. During `fo-review`, the reviewer checks whether the author climbed the ladder — flagging cases where a library was installed for something stdlib/native/existing-dep already provides.
45
+
30
46
  ## Forward-only discipline
31
47
 
32
48
  The ecosystem is forward-only. No backward compatibility layers, no shims, no dual-paths. Legacy code paths are deleted, not maintained behind a flag. Deprecation means removal in the same change, not an indefinite grace period.
@@ -118,6 +134,14 @@ After completing implementation work, the operator may run a three-step session-
118
134
 
119
135
  Most sessions need only `fo-doc-audit`. `fo-session-retro` is valuable after debugging sessions, exploratory work, or when non-obvious behaviors were discovered. `fo-handoff` is needed when work is incomplete and another agent will continue.
120
136
 
137
+ ### Session-end trigger phrases (BLOCKED GATE — NON-NEGOTIABLE)
138
+
139
+ When the operator says any session-end trigger phrase (e.g. "Завершаем сессию", "Завершаем эту сессию", "Заканчиваем сессию", "Завершить сессию", "End session", "Wrap up", "Session end", "/session-end"), the agent's response is **BLOCKED** — no closing summary, no ad-hoc "session complete" message, no closing block is permitted until `fo-session-retro` is invoked via the `skill` tool and completes.
140
+
141
+ **The agent MUST NOT produce any session-end output (summary, closing block, "session complete" message) before `fo-session-retro` is invoked and its report is presented. Producing a closing summary without running `fo-session-retro` is a CONTRACT VIOLATION.**
142
+
143
+ The `fo-session-retro` skill IS the session-end protocol — it runs transcript save, temp cleanup, docs.archive, clean tree check, RFC verification, insight triage, and produces the closing block. Do not substitute it with a manual summary. The closing block comes from `fo-session-retro`, not from the agent directly.
144
+
121
145
  ## Context checkpoint between batch items
122
146
 
123
147
  When the orchestrator skill processes multiple documents (>=2), perform a context checkpoint after completing one document and before starting the next:
@@ -2,6 +2,12 @@
2
2
 
3
3
  Reference file for all `fo-*` skills. Every `fo-*` skill MUST end its session by presenting the closing block defined here. This is not optional — it is the mandatory final output before the skill stops.
4
4
 
5
+ ## Session-end protocol (BLOCKED GATE — NON-NEGOTIABLE)
6
+
7
+ When the operator says any session-end trigger phrase (e.g. "Завершаем сессию", "End session", "Wrap up", "/session-end"), the agent MUST invoke `fo-session-retro` via the `skill` tool BEFORE producing any closing block or session-end output. The closing block defined below is produced by `fo-session-retro` as part of its report — the agent MUST NOT produce a closing block directly in response to a session-end trigger phrase. See `_shared/fo-pipeline-conventions.md` §Session-end trigger phrases for the full protocol.
8
+
9
+ **Producing a closing block without first invoking `fo-session-retro` is a CONTRACT VIOLATION.**
10
+
5
11
  ## When to emit
6
12
 
7
13
  The closing block is emitted **once**, at the very end of the skill's execution — after all work is done, after all commits, after any batch summaries. It is the last thing the operator sees.
@@ -0,0 +1,240 @@
1
+ ---
2
+ name: fo-design-summit
3
+ description: Simulate a multi-persona design discussion for complex RFCs. Each persona reviews from its professional perspective and raises concerns. Optional, invoked for high-risk architectural RFCs.
4
+ invocation: user
5
+ category: fo
6
+ concerns: document-only
7
+ dependsOn: ['my-preferences', 'fo-idea-audit']
8
+ languagePolicy: ref(PREFERENCES.md)
9
+ bindings:
10
+ requires: [paths.invariantsFile]
11
+ optional: []
12
+ triggers: ["design summit", "multi-persona review", "party mode"]
13
+ ---
14
+
15
+ # Design Summit
16
+
17
+ Before starting, read `PREFERENCES.md` at the repository root. If the file is missing or `aiLanguage` is unset, ask the operator once and create the file using the `my-preferences` skill semantics.
18
+
19
+ See `_shared/fo-pipeline-conventions.md` §Language policy.
20
+
21
+ A multi-persona design review for complex RFCs. The summit simulates five professional perspectives — Architect, Security Engineer, QA Engineer, Product Manager, and Developer Advocate — to surface issues that a single-perspective review misses. Each persona reviews the RFC from its professional lens and raises concerns. The operator sees all perspectives and makes the final decision.
22
+
23
+ The summit is **optional** — invoked manually by the operator or suggested by `fo-idea-plan` for RFCs that meet complexity criteria. It is not part of the default pipeline.
24
+
25
+ The summit is `concern: document-only` — it writes a summit report to `docs/summits/` and does not modify the RFC or any source code.
26
+
27
+ ## Process
28
+
29
+ ### 1. Identify the RFC
30
+
31
+ The user may provide:
32
+
33
+ - **A single RFC**: `RFC-XXXX`, a filename, or a path.
34
+ - **Nothing**: if an RFC file is open in the IDE, use it. Otherwise, ask.
35
+
36
+ ### 2. Prerequisite checks
37
+
38
+ Before running the summit, perform these checks **in order**:
39
+
40
+ 1. **Prefix check** — if the id starts with `ADR-`, stop with message: `ADR-XXXX is an ADR. Design summits are for RFCs only. ADRs use the accepted-decision fast path.`
41
+ 2. **RFC file exists** — look for `docs/rfcs/rfc-XXXX-*.md`. If no file is found, stop with message: `RFC-XXXX not found in docs/rfcs/.`
42
+ 3. **Terminal status check** — read the RFC's `status` frontmatter. If the status is `implemented`, `rejected`, or `superseded`, stop with message: `RFC-XXXX is <status> (terminal). Terminal RFCs cannot be reviewed in a summit.`
43
+
44
+ If all checks pass, proceed to step 3.
45
+
46
+ ### 3. Read the RFC and related context
47
+
48
+ Read the target RFC file and its related context:
49
+
50
+ - `ref(forge.yaml bindings.paths.invariantsFile)` — all DNA invariants referenced in the RFC's `satisfies[]` or `related[]`.
51
+ - Each RFC listed in `amends[]`, `supersedes[]`, `related[]` — read enough to understand what this RFC builds on or changes.
52
+ - The closest `AGENTS.md` for the RFC's scope.
53
+
54
+ ### 4. Read the audit report (if available)
55
+
56
+ Look for `docs/audits/audit-rfc-XXXX-*.md`. If an audit report exists, read it to avoid duplicating findings. The summit complements the audit — it does not repeat it.
57
+
58
+ If no audit report exists, proceed without it. Note this in the summit report: persona findings may overlap with future audit findings.
59
+
60
+ ### 5. Run each persona
61
+
62
+ For each of the five personas, the agent:
63
+
64
+ 1. Adopts the persona's perspective and review focus.
65
+ 2. Reads the RFC from that perspective.
66
+ 3. Produces a persona report with findings (concerns, questions, recommendations).
67
+
68
+ #### Persona: Architect
69
+
70
+ **Focus:** Structural integrity, DNA alignment, coupling.
71
+
72
+ **Key questions:**
73
+
74
+ - Does this create hidden dependencies between packages or services?
75
+ - Which DNA invariants are affected? Does the RFC explain how it enforces or protects each one?
76
+ - Will this decision be reversible? If not, is the irreversibility justified?
77
+ - Does the RFC propose a new package, command, or lifecycle that could be a flag on an existing one?
78
+
79
+ #### Persona: Security Engineer
80
+
81
+ **Focus:** Attack surface, data exposure, trust boundaries.
82
+
83
+ **Key questions:**
84
+
85
+ - What new trust boundaries does this create?
86
+ - Are there unauthenticated paths to sensitive data?
87
+ - Does this leak sensitive data in logs, error messages, or generated artifacts?
88
+ - If the RFC touches persistence, does it introduce cookies or client-side storage outside the established policy?
89
+
90
+ #### Persona: QA Engineer
91
+
92
+ **Focus:** Testability, failure modes, edge cases.
93
+
94
+ **Key questions:**
95
+
96
+ - How do we test this? What is the test seam — unit, integration, or both?
97
+ - What are the failure modes? What happens under partial failure?
98
+ - Does the RFC consider empty states (new app with no content, package with no manifests)?
99
+ - Are acceptance criteria checkable by an agent or human?
100
+
101
+ #### Persona: Product Manager
102
+
103
+ **Focus:** User impact, rollout risk, scope.
104
+
105
+ **Key questions:**
106
+
107
+ - Does this solve the stated problem? Is the problem statement grounded in a real user need?
108
+ - What is the rollout impact on existing users? Is there a migration path?
109
+ - Is the scope right — too broad, too narrow, or correctly bounded?
110
+ - Are `nonGoals` explicit and meaningful?
111
+
112
+ #### Persona: Developer Advocate
113
+
114
+ **Focus:** Agent clarity, onboarding, documentation.
115
+
116
+ **Key questions:**
117
+
118
+ - Can a new agent understand and implement this RFC without external context?
119
+ - Is the RFC self-contained, or does it reference implicit assumptions?
120
+ - Are there terms or concepts that need a glossary entry?
121
+ - Does the RFC's `Implementation notes for agents` section provide explicit behavioral rules?
122
+
123
+ ### 6. Synthesize
124
+
125
+ Present all persona reports in a single summit document, highlighting:
126
+
127
+ - **Consensus findings** — concerns raised by 2+ personas (high priority).
128
+ - **Unique findings** — concerns raised by a single persona (medium priority).
129
+ - **No concerns** — personas that found no issues (confidence signal).
130
+
131
+ Deduplicate overlapping concerns. When two personas raise the same issue from different angles, merge them into a consensus finding.
132
+
133
+ ### 7. Persist the summit report
134
+
135
+ Write `docs/summits/summit-<rfc-id>.md` with the full discussion.
136
+
137
+ #### Summit report format
138
+
139
+ ```markdown
140
+ ---
141
+ rfc: RFC-XXXX
142
+ createdAt: YYYY-MM-DD
143
+ personas: [architect, security, qa, pm, dev-advocate]
144
+ consensusFindings: <count>
145
+ uniqueFindings: <count>
146
+ ---
147
+
148
+ # Design Summit: RFC-XXXX
149
+
150
+ ## Architect
151
+
152
+ ### Findings
153
+ - **A1 (concern):** <finding text>
154
+ - **A2 (question):** <finding text>
155
+
156
+ ### No concerns
157
+ - <what the architect found well-designed>
158
+
159
+ ## Security Engineer
160
+
161
+ ### Findings
162
+ - **S1 (concern):** <finding text>
163
+
164
+ ## QA Engineer
165
+
166
+ ### Findings
167
+ - **Q1 (concern):** <finding text>
168
+
169
+ ## Product Manager
170
+
171
+ ### Findings
172
+ - **P1 (concern):** <finding text>
173
+
174
+ ## Developer Advocate
175
+
176
+ ### Findings
177
+ - **D1 (question):** <finding text>
178
+
179
+ ## Consensus findings
180
+
181
+ - **A1 + D1 (2 personas):** <merged finding and recommendation>
182
+
183
+ ## Recommendation
184
+
185
+ <proceed to acceptance | revise the RFC | run fo-explore for unresolved questions>
186
+ ```
187
+
188
+ The report must include the disclaimer: "No findings does not mean no issues — it means no issues were found from these five perspectives."
189
+
190
+ ### 8. Suggest actions
191
+
192
+ Recommend whether to:
193
+
194
+ - **Proceed to acceptance** — if no consensus findings and unique findings are minor.
195
+ - **Revise the RFC** — if consensus findings or significant unique findings exist. Route through `fo-idea-enhance` as audit-style findings.
196
+ - **Run `fo-explore`** — if unresolved questions require deeper exploration before revision.
197
+
198
+ ### 9. Commit
199
+
200
+ Commit the summit report. This is **mandatory** — the report must be committed, not left in the working tree.
201
+
202
+ Commit message format:
203
+
204
+ ```txt
205
+ summit: RFC-XXXX <short description>
206
+
207
+ Multi-persona design summit for RFC-XXXX (<title>). <count> consensus findings, <count> unique findings.
208
+ ```
209
+
210
+ Stage only the summit report file — do not stage unrelated changes.
211
+
212
+ ### 10. Stop
213
+
214
+ Do not modify the RFC or any other file. Do not run `/fo-idea-enhance` or `/fo-idea-plan` — those are separate skills. Present the summit report and stop. If the user asks to fix findings, suggest running `/fo-idea-enhance`.
215
+
216
+ ## Invocation criteria
217
+
218
+ `fo-design-summit` is invoked explicitly by the operator or suggested by `fo-idea-plan` when the RFC meets **any** of these criteria:
219
+
220
+ - `kind: architecture` AND `scope: workspace`
221
+ - `satisfies[]` includes 2+ DNA invariants
222
+ - The RFC introduces a new package, new command family, or new lifecycle
223
+ - The RFC supersedes an implemented RFC
224
+ - The operator explicitly requests it
225
+
226
+ ## Failure modes
227
+
228
+ - **RFC not found:** The skill errors if the target RFC does not exist.
229
+ - **Audit not run yet:** The skill proceeds without the audit report — persona findings may overlap with future audit findings. The skill notes this in the report.
230
+ - **RFC is too small for a summit:** If the RFC body is less than 500 words, the skill warns that a summit may be overkill and proceeds only if the operator confirms.
231
+ - **Persona findings overlap:** Multiple personas may raise the same concern. The synthesis step deduplicates and marks consensus findings.
232
+
233
+ ## Constraints
234
+
235
+ - The summit is `concern: document-only` — it must not modify the RFC, source code, or any file except the summit report in `docs/summits/`.
236
+ - **Commit only your own files.** Stage only the summit report. Do not stage unrelated changes. `git add -A` or `git add .` is forbidden.
237
+ - Personas are **simulated** by a single agent in one session. This is not multi-agent infrastructure. Each persona is a perspective shift, not a separate process.
238
+ - The summit report is an informational artifact, not a governance document. It does not block RFC acceptance — the operator decides whether to act on its findings.
239
+ - Summit findings that warrant RFC changes should be routed through `fo-idea-enhance` as audit-style findings, not applied directly by the summit skill.
240
+ - **No pauses for recoverable tool errors.** If a tool call fails with a recoverable error, recover autonomously: split content into smaller writes, use `edit`/`multi_edit`, and retry immediately.