@warpgogol/forge 2.9.7 → 2.9.9
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.
|
@@ -69,7 +69,7 @@ function deriveDomain(frontmatter) {
|
|
|
69
69
|
const packagesImpacted = frontmatter["packagesImpacted"];
|
|
70
70
|
if (Array.isArray(packagesImpacted) && packagesImpacted.length > 0) {
|
|
71
71
|
const firstPkg = String(packagesImpacted[0]);
|
|
72
|
-
return firstPkg.replace(/^packages\//, "");
|
|
72
|
+
return firstPkg.replace(/^packages\//, "").replace(/^@[^/]+\//, "");
|
|
73
73
|
}
|
|
74
74
|
return null;
|
|
75
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-spec-merge.js","sourceRoot":"","sources":["../../../os/spec/live-spec-merge.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"live-spec-merge.js","sourceRoot":"","sources":["../../../os/spec/live-spec-merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -91,7 +91,7 @@ function deriveDomain(frontmatter: Record<string, unknown>): string | null {
|
|
|
91
91
|
const packagesImpacted = frontmatter["packagesImpacted"];
|
|
92
92
|
if (Array.isArray(packagesImpacted) && packagesImpacted.length > 0) {
|
|
93
93
|
const firstPkg = String(packagesImpacted[0]);
|
|
94
|
-
return firstPkg.replace(/^packages\//, "");
|
|
94
|
+
return firstPkg.replace(/^packages\//, "").replace(/^@[^/]+\//, "");
|
|
95
95
|
}
|
|
96
96
|
return null;
|
|
97
97
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@warpgogol/forge",
|
|
3
|
-
"version": "2.9.
|
|
3
|
+
"version": "2.9.9",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -172,8 +172,8 @@
|
|
|
172
172
|
},
|
|
173
173
|
"devDependencies": {
|
|
174
174
|
"@types/node": "^24.0.0",
|
|
175
|
-
"@warpgogol/werkstatt-shared": "*",
|
|
176
175
|
"@warpgogol/werkstatt": "*",
|
|
176
|
+
"@warpgogol/werkstatt-shared": "*",
|
|
177
177
|
"eslint": "^10.8.0",
|
|
178
178
|
"fast-check": "^4.9.0",
|
|
179
179
|
"typescript": "^6.0.3",
|
|
@@ -305,5 +305,6 @@
|
|
|
305
305
|
"default": "./dist/os/program/program.module.js"
|
|
306
306
|
}
|
|
307
307
|
}
|
|
308
|
-
}
|
|
308
|
+
},
|
|
309
|
+
"packageManager": "pnpm@11.10.0"
|
|
309
310
|
}
|
package/AGENTS.md
DELETED
|
@@ -1,397 +0,0 @@
|
|
|
1
|
-
# @warpgogol/forge Agent Guide
|
|
2
|
-
|
|
3
|
-
Portable governance skills and command modules extracted from the engine (RFC-0374) (RFC-0374).
|
|
4
|
-
|
|
5
|
-
## Architecture
|
|
6
|
-
|
|
7
|
-
- `src/` — portable, no kernel imports. Contains skill schema, registry, validators, onboarding handlers, config module, canonical types, and utilities.
|
|
8
|
-
- `os/` — ForgeModule registrations. RFC-0556: `os/compass/` and `os/werkstatt/` are fully autonomous — all command handlers are inlined in `os/*/handlers/` and no longer dynamically import `@warpgogol/*` packages. Other `os/` modules may still use dynamic imports where kernel integration is needed.
|
|
9
|
-
- `bin/` — CLI entrypoint (`forge` command) for autonomous usage without `@warpgogol/werkstatt`.
|
|
10
|
-
- `skills/` — forge-managed skill definitions (29 fo skills + 5 shared + 3 meta = 37 skills). Project-declared skill packs (RFC-0539) live outside forge and are discovered via `discoverPackSkills` from `forge.yaml` `skillPacks` config.
|
|
11
|
-
|
|
12
|
-
## RFC-0855 program control-plane boundary
|
|
13
|
-
|
|
14
|
-
Packet 000 will add the portable `forge/program@1` control plane under `os/program/` as specified by accepted RFC-0856 and its committed implementation plan. Do not implement it, register commands, or alter packet state before packet 000 is sealed. The module validates and writes governance artifacts only: it never executes packet work, commits, materializes decisions without a preparation lease, deploys, or imports `@warpgogol/werkstatt`. Keep it cross-platform, deny unknown fields and unsafe paths, store only lease-token digests, and preserve packet 000 as the sole irreversible bootstrap.
|
|
15
|
-
|
|
16
|
-
## OS modules
|
|
17
|
-
|
|
18
|
-
| Module | Commands | Source |
|
|
19
|
-
| --- | --- | --- |
|
|
20
|
-
| `forgeCoreModule` | `create`, `doctor`, `upgrade`, `forge.agents.generate`, `scaffold`, `port.scaffold`, `skill.validate`, `skill.list`, `port.validate`, `profile.validate`, `dev`, `build`, `validate`, `pinned.validate`, `pinned.init`, `package.health`, `docs.archive` | `os/core/` |
|
|
21
|
-
| `forgeRfcModule` | `rfc.list`, `rfc.validate`, `rfc.create`, etc. | `os/rfc/` |
|
|
22
|
-
| `forgeWorkflowModule` | `workflow.lint`, `workflow.list`, `workflow.amend.list` | `os/workflow/` |
|
|
23
|
-
| `forgeNamingModule` | `naming.convention.lint` | `os/naming/` |
|
|
24
|
-
| `forgeCompassModule` | `compass.inventory`, `compass.validate`, `compass.summary.trim`, etc. (8 commands). All compass commands accept `--workpiece <path>` for scoping to a mission workpiece directory (RFC-0617). | `os/compass/` |
|
|
25
|
-
| `forgeWerkstattModule` | `werkstatt.lock.status`, `werkstatt.lock.recover`, `werkstatt.operation.validate` | `os/werkstatt/` |
|
|
26
|
-
| `forgeSpecModule` | `spec.validate`, `spec.status`, `spec.materialize`, `spec.live.merge`, `spec.live.list`, `spec.live.show`, `spec.live.validate` | `os/spec/` |
|
|
27
|
-
| `forgeAdrModule` | `adr.list`, `adr.create`, `adr.validate`, `adr.archive`, `adr.implement.stamp` | `os/adr/` |
|
|
28
|
-
| `forgePlanModule` | `plan.archive` | `os/plan/` |
|
|
29
|
-
| `forgeAuditModule` | `audit.archive` | `os/audit/` |
|
|
30
|
-
| `forgeSessionModule` | `session.save`, `session.archive`, `session.validate`, `session.list` | `os/session/` |
|
|
31
|
-
| `forgeMissionModule` | `mission.archive` | `os/mission/` |
|
|
32
|
-
| `forgeExplorationModule` | `exploration.list`, `exploration.show`, `exploration.archive` | `os/exploration/` |
|
|
33
|
-
| `forgeNotesModule` | `note.link.validate`, `note.frontmatter.validate`, `note.orphan.detect` | `os/notes/` |
|
|
34
|
-
| `forgeProgramModule` | `program.packet.validate`, `program.packet.seal`, `program.packet.lease`, `program.packet.complete` | `os/program/` |
|
|
35
|
-
|
|
36
|
-
## Program packet control plane (RFC-0856)
|
|
37
|
-
|
|
38
|
-
The program packet control plane governs sequential packet execution under `forge/program@1`. It validates boundaries; it does not execute implementation commands or commit on behalf of agents.
|
|
39
|
-
|
|
40
|
-
- **Program Steward** and **Packet Executor** are distinct roles. A Steward seals packets, recovers stale leases, and validates completions. An Executor holds the lease and implements the packet. The same actor MUST NOT be both Steward and Executor for the same packet.
|
|
41
|
-
- **Manual state edits are forbidden.** Packet state transitions (`draft` → `sealed` → `active` → `completed`) must go through the registered commands. Self-sealing (a packet's Executor calling `seal` or `complete` for their own packet) is rejected.
|
|
42
|
-
- **Lease tokens are opaque and untracked.** Raw lease tokens exist only in memory and the command response. Only the SHA-256 hash is persisted in `.forge/program-leases/` (gitignored). Tokens never appear in tracked artifacts, logs, or completion reports.
|
|
43
|
-
- **Normative source hashes are exact-byte.** `normativeSources` in a packet record SHA-256 digests of the exact file bytes at seal time. Reordered YAML or reformatted JSON that changes byte content will fail validation, even if the parsed structure is semantically identical.
|
|
44
|
-
- **Bootstrap packet 000 is irreversible.** The `--bootstrap` flag on `program.packet.complete` is valid only for the first packet (no predecessor, program state `preparing`). It transitions the program to `executing`. There is no second bootstrap path.
|
|
45
|
-
- **Path validation is traversal-safe.** `allowedFiles` and `forbiddenFiles` use lexical path normalization that resolves `..` segments before glob matching, preventing directory traversal escapes.
|
|
46
|
-
|
|
47
|
-
## Archive convention
|
|
48
|
-
|
|
49
|
-
When archiving terminal artifacts, prefer the `docs.archive` umbrella command over individual `rfc.archive`, `adr.archive`, `plan.archive`, `audit.archive`, `session.archive`, `mission.archive` commands. The umbrella command runs all six in sequence and prevents leaving audits/plans/sessions/missions unarchived when the operator's intent is to clean up all terminal artifacts. Use individual commands only when the operator explicitly asks for a single domain (e.g. "archive only RFCs").
|
|
50
|
-
|
|
51
|
-
- **RFC-0711: `docs.archive` post-loop `spec.live.merge` step.** After archiving, `docs.archive` scans implemented RFCs with a `liveSpec` frontmatter field and calls `spec.live.merge` for each, creating or updating living feature specs under `docs/specs/live/<domain>.md`. Rejected RFCs with `liveSpec` are skipped. Merge failures are non-fatal — the archive step still completes. Use `--dry-run` to preview merges without writing.
|
|
52
|
-
|
|
53
|
-
- **Post-rename cleanup for `fs.rename` on watched directories:** When an archive handler uses `fs.rename` to move a directory that an IDE or file watcher is tracking (e.g. mission workpiece with an open `.astro/` cache), the watcher may recreate stale cache at the source path after the rename completes. Always add a post-rename cleanup check using `trashPath` from `utils/fs-trash.ts`: `if (existsSync(sourcePath)) { await trashPath(sourcePath); }` after the `fs.rename` call. See `os/mission/handlers/archive.ts` `moveMissionDir` for the reference implementation.
|
|
54
|
-
|
|
55
|
-
## Pinned-files protection (RFC-0733)
|
|
56
|
-
|
|
57
|
-
The pinned-files protection system prevents accidental deletion, move, or modification of foundational files (templates, configs, structural directories). It is opt-in — protection is active only when `.forge/pinned.yaml` exists.
|
|
58
|
-
|
|
59
|
-
- **`forge pinned.init`** creates `.forge/pinned.yaml` with default foundation entries, installs a pre-commit hook, adds `.forge/pinned-audit.log` to `.gitignore`, and optionally generates a CI workflow (`--ci`). Re-running merges defaults with existing entries — operator-removed default entries are re-added, but custom entries are never overwritten or removed.
|
|
60
|
-
- **`forge pinned.validate`** checks the working tree against the manifest. In `staged` mode (default), it checks `git diff --cached`; in `ci` mode (`--mode ci`), it checks the last-commit diff. Violations for `delete` and `move` operations are always blocked; `modify` is blocked only for `freeze` mode entries (not `protect`).
|
|
61
|
-
- **Override:** Use `--allow-pinned-override <path>` for an audited escape hatch. Each override is logged to `.forge/pinned-audit.log` (append-only, gitignored) with timestamp, path, mode, and reason. The `FORGE_PINNED_OVERRIDE` env var (comma-separated paths) is also read by `pinned.validate` — this allows the pre-commit hook to support overrides without changing the hook script: `FORGE_PINNED_OVERRIDE=docs/rfcs/rfc-0076.md git commit`.
|
|
62
|
-
- **Manifest integrity:** `pinned.validate` compares the current manifest against the last-committed version. If entries have been removed, it reports `PINNED_MANIFEST_TAMPERED`.
|
|
63
|
-
- **Archive pre-check:** All 6 archive handlers (`rfc.archive`, `adr.archive`, `plan.archive`, `audit.archive`, `session.archive`, `mission.archive`) load the pinned manifest once per invocation and skip pinned files/directories with a warning instead of moving them. When the manifest is missing, archive handlers behave as before (protection inactive). **Intra-directory moves are exempted:** if both source and destination are within the same pinned directory (e.g. `docs/rfcs/rfc-0076.md` → `docs/rfcs/archive/implemented/rfc-0076.md`), the move is allowed — the file hasn't left the protected directory.
|
|
64
|
-
- **`.forge/` directory:** The `.forge/` directory is a forge-specific convention for project-local governance files. It sits alongside `forge.yaml` and contains `pinned.yaml` (manifest) and `pinned-audit.log` (override audit trail).
|
|
65
|
-
|
|
66
|
-
## Skills
|
|
67
|
-
|
|
68
|
-
Skills live in `skills/` and are synced to `.agents/skills/` by `create`. Each skill has a `SKILL.md` with standardized frontmatter (name, description, category, concerns, dependsOn).
|
|
69
|
-
|
|
70
|
-
- **When editing a skill in `packages/forge/skills/`**, the synced copy in `.agents/skills/<name>/SKILL.md` MUST also be committed in the same session — `create` is not run automatically after manual edits. Stale `.agents/skills/` copies cause `doctor` to report drift.
|
|
71
|
-
- **Canonical sync path is flat**: `.agents/skills/<name>/SKILL.md` (e.g. `.agents/skills/fo-idea-implement/SKILL.md`). Both `create` (`init.ts`) and `upgrade` (`upgrade.ts`) sync to this flat path. A nested `.agents/skills/fo/<name>/SKILL.md` path is NOT created or maintained by forge — it is a stale artifact if present and should be removed.
|
|
72
|
-
- **`FORGE_SKILLS[].path` is relative to the forge package root** and already includes the `skills/` prefix — resolve via `path.join(forgeRoot, skill.path)` (see `init.ts`). Never join a `skillsRoot` with `skill.path`: that produces a doubled `skills/skills/` prefix and silently finds nothing.
|
|
73
|
-
- **When renumbering steps in SKILL.md files** (inserting or removing a numbered step), grep for hard-coded step numbers across all `.md` files in the repo. Cross-references to `fo-idea-implement` step numbers exist in `PREFERENCES.md`, `fo-doc-audit/SKILL.md`, and `fo-session-retro/SKILL.md` — these break silently when steps shift. Always update all cross-references in the same commit.
|
|
74
|
-
|
|
75
|
-
The `concerns` field uses a four-level taxonomy (RFC-0523): `read-only` (no file modifications), `document-only` (modifies `.md` files only), `content-mutation` (modifies content `.md`/`.yaml` but not executable code), `code-mutation` (modifies `.ts`/`.astro` code). `skill.validate` enforces this via SKILL-12.
|
|
76
|
-
|
|
77
|
-
The optional `knowledge` field (RFC-0524) declares cumulative knowledge files as an array of file names relative to the SKILL.md directory (e.g. `knowledge: [qa-log.md, learned-principles.md]`). `skill.validate` enforces SKILL-13: declared knowledge files must exist. `create` syncs them to `.agents/skills/`. `doctor` detects stale copies. See `writing-great-skills` § Cumulative knowledge pattern for the three-layer reference pattern, entry format, and mutation contract. RFC-0660 adds SKILL-19 (entry schema validity) and SKILL-20 (identifier uniqueness) for structured knowledge entries, and `doctor` reports legacy-section counts. RFC-0661 adds SKILL-21 (hot/warm layer character budget warnings — warnings only, never build gates) and `doctor` reports budget summaries with headroom %.
|
|
78
|
-
|
|
79
|
-
### Validator return-type refactoring
|
|
80
|
-
|
|
81
|
-
When refactoring a validator's return type (e.g. from `Violation[]` to `{ errors, warnings }`), update **all** return points and call sites in the same commit. TypeScript catches missing fields in return objects, but does not catch semantic errors like warnings accidentally left in the violations array. After refactoring, search for all `return` statements and all call sites that destructure the result, and verify each one handles both `errors` and `warnings` correctly.
|
|
82
|
-
|
|
83
|
-
### Skill packs (RFC-0539)
|
|
84
|
-
|
|
85
|
-
Project-declared skill packs allow projects to manage their own skills under a project-specific prefix, separate from forge's portable `fo-` skills. Packs are declared in `forge.yaml` under `skillPacks`:
|
|
86
|
-
|
|
87
|
-
```yaml
|
|
88
|
-
skillPacks:
|
|
89
|
-
- prefix: wg
|
|
90
|
-
dir: packages/warpgogol-skills/skills
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
- `create` syncs pack skills alongside forge skills into `.agents/skills/`.
|
|
94
|
-
- `skill.validate` validates pack skills with SKILL-01..13 plus SKILL-14 (pack skill name must start with pack prefix), SKILL-15 (non-forge skill may not use `fo-` prefix), and SKILL-17 (no platform RFC/ADR ids or platform names).
|
|
95
|
-
- SKILL-07 enforces asymmetric dependency direction: pack skills may depend on forge skills, but forge skills may not depend on pack skills (breaks portability).
|
|
96
|
-
- `skill.list` includes pack skills with `pack:<prefix>` annotation.
|
|
97
|
-
- `doctor` checks for stale/missing pack skill copies and validates `skillPacks` config (unique prefixes, unique dirs, no `fo` prefix, dir exists).
|
|
98
|
-
- **RFC-0552:** `create` (via `runInit`) and `upgrade` (via `syncPackSkills`) detect pack skills whose name conflicts with a Forge skill name. Conflicting pack skills are skipped (not copied to `.agents/skills/`) and reported in `skippedSkills` on `InitResult` and `UpgradeResult`. The `forge-bootstrap` skill reports skipped skills to the operator during onboarding. The `forge-bootstrap` skill also runs `git init` for greenfield projects without a `.git` directory and commits synced skills to git.
|
|
99
|
-
|
|
100
|
-
## Import rules
|
|
101
|
-
|
|
102
|
-
- `src/` must NOT import from `@warpgogol/werkstatt` or any kernel package.
|
|
103
|
-
- `os/compass/` and `os/werkstatt/` are fully autonomous (RFC-0556) — all handlers are inlined in `os/*/handlers/` and must NOT import from `@warpgogol/*` packages.
|
|
104
|
-
- Other `os/` modules MAY dynamically import `@warpgogol/*` packages where kernel integration is needed.
|
|
105
|
-
- Apps import forge modules from `@warpgogol/forge` (the package entrypoint re-exports all OS modules).
|
|
106
|
-
- **MUST** use `hasGeneratedMarker()` from `utils/index.ts` for detecting generated file markers — never use raw `content.includes("GENERATED")` which is fragile and breaks if the marker format changes.
|
|
107
|
-
- **Compass shared flags:** New flags for compass commands MUST be added to the shared `compassScanFlags` object in `os/compass/compass.module.ts`, not to individual command definitions. The `compassScanFlags` object is spread into all compass commands that use `flags: { ...compassScanFlags }`, ensuring the flag is available consistently across the command family. Per-command flags that are unique to one command may be defined inline.
|
|
108
|
-
- **CLI flags must be wired to behavior.** Every flag declared in a command registration MUST affect the command's output or behavior — not just be read and stored. A flag that is read but never used is dead code and a contract violation. When adding a flag, implement its behavioral effect in the same commit. Verify by searching for the flag variable name in the handler function body.
|
|
109
|
-
- **Profile-driven workspace detection is domain-neutral.** `workspaceTypes` from a stack profile must replace hardcoded workspace detection for ALL domains, not just software. Do NOT gate `checkNestedAgentsMd` or `discoverWorkspaces` by `isSoftwareDomain` — that silently skips the check for non-software domains (game, creative, etc.). When `workspaceTypes` is present, it fully replaces hardcoded detection; when absent, hardcoded detection is the fallback for all domains.
|
|
110
|
-
- **`command-registered` probes MUST fall back to command manifest.** The `command-registered` probe in `os/rfc/acceptance.ts` uses `commandRegistry?.listCommands()`, which only sees workspace-scoped commands (forge modules). App-scoped commands from `werkstatt-site/checks` are invisible to the workspace-level registry. Always include a `loadManifestCommandNames(workspaceRoot)` fallback, matching the pattern already used in `os/rfc/handlers/lifecycle.ts`. Without this, `rfc.acceptance.run` and `rfc.verification.emit` will falsely report app-scoped commands as "not registered".
|
|
111
|
-
|
|
112
|
-
## RFC frontmatter: commands.changed (RFC-CMD-03)
|
|
113
|
-
|
|
114
|
-
The `commands.changed` field in RFC frontmatter must only list **registered CLI commands** (e.g. `compass.audit.baseline`, `mission.materialize`), not internal functions or handlers (e.g. `acquireLock`, `releaseLock`). `rfc.validate` enforces this via RFC-CMD-03: every entry in `commands.changed` must match a live command in the registry. Internal functions that are not registered as CLI commands must not appear in `commands.changed` — use `packagesImpacted` to indicate which packages were modified.
|
|
115
|
-
|
|
116
|
-
## RFC frontmatter: YAML backtick quoting
|
|
117
|
-
|
|
118
|
-
YAML plain scalar values that **start with a backtick** (`` ` ``) must be double-quoted. Backtick is a reserved character in YAML plain scalars — the parser fails with "Plain value cannot start with reserved character `" and `rfc.implement.stamp`reports "Could not parse target RFC" (RFC-IMP-01). This commonly affects`successSignals`, `nonGoals`, and other list items in RFC frontmatter that reference code identifiers in backticks. Always quote such strings: `` - "`doctor`reports domain information" `` instead of `` -`doctor` reports domain information ``.
|
|
119
|
-
|
|
120
|
-
**Agent action:** After creating an RFC with `rfc.create`, scan the generated `successSignals` and `nonGoals` sections for unquoted backtick entries. Fix them immediately before committing. This prevents a recurring pattern where `ecosystem.manifest.generate` and `rfc.implement.stamp` fail on RFCs created with backtick-heavy frontmatter.
|
|
121
|
-
|
|
122
|
-
**Diagnostic:** If `rfc.implement.stamp` fails with `Could not parse target RFC` (RFC-IMP-01), the RFC frontmatter has a YAML syntax error — not a missing file. Check for unquoted backtick values first.
|
|
123
|
-
|
|
124
|
-
## RFC command lifecycle validation (RFC-CMD-02)
|
|
125
|
-
|
|
126
|
-
`getLiveCommands` in `os/rfc/handlers/lifecycle.ts` always merges `commandRegistry.listCommands()` with `docs/command-manifest.generated.yaml`. This is necessary because lazy-loaded modules (e.g. `leitstand`) are not loaded when `rfc.validate` runs, so their commands are absent from the registry but present in the manifest. Never change this to a fallback-only pattern (using manifest only when registry is empty) — that produces false-positive `RFC-CMD-02` violations for commands from lazy-loaded modules.
|
|
127
|
-
|
|
128
|
-
## RFC status transitions: rfc.implement.stamp is exclusive (V-16)
|
|
129
|
-
|
|
130
|
-
`rfc.implement.stamp` is the **exclusive atomic path** for accepted → implemented transitions. It atomically sets `status: implemented`, `implementedAt`, and `updatedAt` together. **NEVER** manually edit RFC frontmatter to set `implementedAt` or change `status` to `implemented` — this bypasses the atomic guarantee and risks leaving `status` and `implementedAt` out of sync. V-16 enforces this as an error: `status: accepted/draft` with `implementedAt` set, or `status: implemented` with empty `implementedAt`, both fail `rfc.validate`. After implementing an RFC, run `rfc.implement.stamp --id RFC-XXXX` to stamp it (auto-detects the implementation commit via `git log --grep` when `--implementation-commit` is omitted, RFC-0756; pass `--implementation-commit <sha>` to override).
|
|
131
|
-
|
|
132
|
-
## RFC acceptance criteria: evidence annotation (RFC-IMP-02)
|
|
133
|
-
|
|
134
|
-
`rfc.implement.stamp` enforces RFC-IMP-02: every checked acceptance criterion (`- [x]`) MUST have an inline `(evidence: ...)` annotation. Parenthetical references without the `evidence:` keyword (e.g. `(promote.ts, 13 tests)`) do NOT satisfy the rule — the stamp fails with "checked criteria lack inline (evidence: ...) annotation". Always format as: `- [x] <criterion text> (evidence: <file paths, commands, or test counts>)`. Commit the annotated criteria before running `rfc.implement.stamp`.
|
|
135
|
-
|
|
136
|
-
## Re-entrant werkstatt locks (RFC-0616)
|
|
137
|
-
|
|
138
|
-
`acquireLock` and `releaseLock` in `os/werkstatt/handlers/lock.ts` are re-entrant by PID. When the same process re-acquires a lock it already holds, `acquireLock` increments the `depth` counter instead of throwing. `releaseLock` decrements `depth` and only deletes the lock file when `depth` reaches `1` or is `undefined`. The `depth` field is `.optional()` in `werkstattLockSchema` — old lock files without `depth` parse successfully and are treated as `depth=1` via `?? 1` fallbacks. Agents MUST NOT assume `acquireLock` always throws on an existing lock file — it only throws when a **different** live process holds the lock.
|
|
139
|
-
|
|
140
|
-
## forge.yaml (RFC-0391)
|
|
141
|
-
|
|
142
|
-
`forge.yaml` is the machine-readable project configuration file at the project root. It records project name, stack, package manager, and docs paths. `create` creates it; `doctor` checks for it; `forge.agents.generate` reads it to produce `AGENTS.md`.
|
|
143
|
-
|
|
144
|
-
- **MUST NOT** run `forge.agents.generate` against this monorepo's root `AGENTS.md` — it is hand-written and carries no generated marker; the edit guard enforces this, do not bypass it.
|
|
145
|
-
- **MUST NOT** re-add any `@warpgogol/*` import to `packages/forge` source — `doctor` autonomy guard will fail.
|
|
146
|
-
- **MUST NOT** hand-edit a generated `AGENTS.md` in bootstrapped projects — edit `forge.yaml` and regenerate.
|
|
147
|
-
|
|
148
|
-
## Stack profiles (RFC-0392)
|
|
149
|
-
|
|
150
|
-
Stack profiles are YAML documents under `profiles/` describing a supported stack (detection markers, workspace layout, install steps, baseline files). `scaffold` creates a working pnpm + Turborepo monorepo from a chosen profile in an empty directory. The migration-adapter registry (RFC-0546) detects the stack of an existing project during `forge-bootstrap` transplant mode.
|
|
151
|
-
|
|
152
|
-
- **MUST NOT** scaffold into a non-empty directory — no `--force` flag.
|
|
153
|
-
- **MUST NOT** add stack profiles for stacks forge cannot scaffold end-to-end.
|
|
154
|
-
- **MUST** reference all template files in `profiles/<profile>-templates/` from the profile YAML (`workspaceTypes[].agentsMdTemplate` or `firstWorkspace.files`) or document them in the `agentsMdTemplate` file. Unreferenced template files are orphan artifacts that operators cannot discover.
|
|
155
|
-
- Shipped profiles: `phaser-turborepo`, `godot-csharp`, `forge-shell` (minimal — default for `create`).
|
|
156
|
-
- **MUST** include a `.github/workflows/ci.yml` template in every stack profile's `workspace.files` list. The CI template MUST include `concurrency` (cancel superseded PR runs), `permissions: contents: read` at workflow level, `timeout-minutes` per job, `env: TZ: UTC` per job, `actions/checkout@v5`, and `actions/setup-node@v5` with Node 24. New projects inherit reliable CI from the scaffold — operators should not need to hand-write CI from scratch.
|
|
157
|
-
|
|
158
|
-
### Domain fields (RFC-0638)
|
|
159
|
-
|
|
160
|
-
The `forge/stack-profile@1` schema includes six optional domain-neutral fields that allow a profile to declare its domain model. All fields are optional — existing profiles without them parse and function identically.
|
|
161
|
-
|
|
162
|
-
- **`domain`** — string identifying the project domain (e.g. `software`, `game`, `book`, `music`, `illustration`). Used for profile detection and doctor output.
|
|
163
|
-
- **`terminology`** — map of universal concept keys to domain-specific terms (e.g. `artifact: "game"`). Open vocabulary; universal keys have built-in defaults exported as `TERMINOLOGY_DEFAULTS`. Missing keys fall back to the default term.
|
|
164
|
-
- **`artifacts`** — array of artifact definitions (id, extensions, produce/validate commands, determinism properties). Used by `doctor` for domain-specific health checks in follow-up RFCs.
|
|
165
|
-
- **`workspaceTypes`** — array of workspace type definitions (id, detection markers, associated skills, AGENTS.md template). Used by `forge.agents.generate` for per-domain workspace detection in follow-up RFCs.
|
|
166
|
-
- **`invariants`** — array of domain-specific invariant definitions (id matching `^[A-Z]+-\d+$`, rule text, severity). Schema only — enforcement is deferred to follow-up RFCs.
|
|
167
|
-
- **`register`** — string selecting the default behavioral register (`business` or `creative`). Used by `create` as a one-time default for new projects; existing `PREFERENCES.md` is never overwritten.
|
|
168
|
-
|
|
169
|
-
Types and schemas are exported from `@warpgogol/forge`: `StackProfileDomainFields`, `ProfileArtifact`, `ProfileWorkspaceType`, `ProfileInvariant`, `stackProfileDomainFieldsSchema`, `UNIVERSAL_TERMINOLOGY_KEYS`, `TERMINOLOGY_DEFAULTS`.
|
|
170
|
-
|
|
171
|
-
### Domain-aware commands (RFC-0640)
|
|
172
|
-
|
|
173
|
-
The following commands are domain-aware — they read domain fields from the stack profile and `forge.yaml` to adapt their behavior:
|
|
174
|
-
|
|
175
|
-
- **`profile.validate`** — validates profile YAML files under `packages/forge/profiles/` against the `forge/stack-profile@1` schema (including RFC-0638 domain fields). Supports `--id <profile-id>` to validate a single profile. Returns exit 1 if any profile is invalid.
|
|
176
|
-
- **`create`** — reads `domain`, `terminology`, `register`, and artifact-derived semantic bindings from the selected profile and writes them into `forge.yaml` (domain, terminology, bindings.commands) and `PREFERENCES.md` (register). When the profile has no domain fields, behavior is unchanged (software-domain fallback).
|
|
177
|
-
- **`doctor`** — reports domain info (domain, source, register, terminology, invariant count) as a `domain-info` check. Enforces profile invariants via the invariant engine as a `domain-invariants` check (RFC-0675) — invariants with a `check` declaration are actively verified (`filename-pattern`, `file-contains`, `file-not-contains`, `attribute-pattern`); invariants without `check` remain advisory. The `attribute-pattern` check kind (RFC-0694) validates attribute values on elements matching a tag selector — requires `elements` (array) and `attribute` fields (schema-enforced via `.refine()`). Reports `fail` for error-severity violations, `warn` for warning-severity. The `--strict` flag elevates `warn` to `fail` for `domain-invariants` and `profile-validate` checks. `--json` includes `invariantViolations` array in the `domain-invariants` check. Runs `profile.validate` as an advisory `profile-validate` check (warn status on failure, not gating — shipped profiles are forge-internal). Nested AGENTS.md check runs for all domains — profile-driven workspace types replace hardcoded detection when present. Domain is resolved via a three-tier chain: `forge.yaml` `project.domain` → stack profile `domain` → default `software`.
|
|
178
|
-
- **`forge.agents.generate`** — loads `workspaceTypes[]` from the matching stack profile and passes them to `discoverWorkspaces` for profile-driven workspace type detection. When the profile has no `workspaceTypes`, falls back to hardcoded detection (astro.config → app, Dockerfile → service, else package).
|
|
179
|
-
|
|
180
|
-
### Per-domain AGENTS.md templates (RFC-0643)
|
|
181
|
-
|
|
182
|
-
`forge.agents.generate` uses profile terminology and register to produce domain-appropriate AGENTS.md files. When no profile is loaded (or the profile has no domain fields), output is identical to the pre-RFC-0643 implementation — no regression for existing software-domain projects.
|
|
183
|
-
|
|
184
|
-
- **Root AGENTS.md templates**: Static prose (header, project section, paths section, conventions) is extracted to template files at `src/onboarding/templates/root-agents-business.md` and `root-agents-creative.md`. `selectRootTemplate(register)` returns the appropriate template. Dynamic sections (skills table, capabilities, behavioral layer) remain inline and are inserted at the `{{dynamicSections}}` marker.
|
|
185
|
-
- **Nested AGENTS.md templates**: `selectNestedTemplate(workspaceType, profile, terminology, fallback)` reads `workspaceTypes[].agentsMdTemplate` from the profile. Template paths are relative to `packages/forge/profiles/`. Absolute paths and parent-directory traversal (`..`) are rejected with a silent fallback to the hardcoded template.
|
|
186
|
-
- **Terminology substitution**: `substituteTemplate(content, terminology)` replaces `{{terminology.key}}` placeholders with resolved values. Runs on the final assembled content (after dynamic sections are appended), so the behavioral layer's fixed policy text also receives terminology substitution. Unknown keys resolve to the key name itself — no error.
|
|
187
|
-
- **`{{terminology.key}}` placeholder syntax**: AGENTS.md templates use `{{terminology.key}}` (double-brace), not `ref(bindings.terminology.key)` (skill syntax). The two are documented separately.
|
|
188
|
-
- **`details` field in `--json` output**: `AgentsGenerateResult` includes an optional `details` array with per-file metadata: `{ path, domain?, register?, workspaceType? }`. The `generated` field remains `string[]` for backward compatibility.
|
|
189
|
-
- **`profile` field in `forge.yaml`**: `create` writes `profile: <id>` to `forge.yaml`. `loadForgeConfig` loads the corresponding `profiles/<id>.yaml` and attaches it as `config.profile` (a `StackProfile` object). The profile object is stripped before serialization — `forge.yaml` stores the profile id (string), not the full profile.
|
|
190
|
-
- **Template comments MUST NOT use literal `{{placeholder}}` syntax**: `replaceProjectPlaceholders()` runs on the entire template content, including HTML comments. A comment like `<!-- inserted at {{dynamicSections}} -->` will have the placeholder replaced with the full dynamic sections content, breaking the comment and inflating the output. Use plain text names (e.g. `dynamicSections marker`) in comments instead of `{{...}}` syntax.
|
|
191
|
-
- **All template content MUST be external files, not inline `lines.push()` string arrays.** Fixed prose and policy text in forge generators (e.g. `agents-generate.ts`, `nested-agents-templates.ts`) must live in `.md` template files under `src/onboarding/templates/` or `profiles/`, loaded via `fs.readFileSync` with placeholder substitution. Inline `lines.push("### Section heading")` patterns for fixed text are a contract violation — they embed template content in source code, making it harder to review and maintain. Dynamic, data-driven content (tables generated from registry data, conditional sections from config) remains inline.
|
|
192
|
-
- **Template files read at runtime via `fs.readFileSync` MUST be listed in `package.json` `files` array.** TypeScript compilation (`tsc`) does not copy `.md` template files to `dist/`. Without an explicit `files` entry, template files exist on disk in development but are missing from the published npm package — the generator silently falls back to empty content. The test `src/tests/package-files.test.ts` guards this: it verifies that `src/onboarding/templates/` is in the `files` array and that all expected template files exist and are readable.
|
|
193
|
-
- **Profile object stripping before YAML serialization**: `loadForgeConfig` attaches a full `StackProfile` object to `config.profile`. Before serializing the config back to YAML (e.g. in `create` post-processing), the profile object MUST be stripped back to its string id. Otherwise `forge.yaml` contains an object instead of a string and fails schema validation on re-read.
|
|
194
|
-
- **Profile invariant `rule` fields containing colons MUST be double-quoted.** YAML plain scalars with colons (e.g. `rule: mode attribute must be one of: sequence, fixed, contain, fit`) cause "Nested mappings are not allowed in compact mappings" parsing errors. Always quote rule fields that contain colons: `rule: "mode attribute must be one of: sequence, fixed, contain, fit"`. This also applies to any other YAML string field in profile YAML that may contain colons.
|
|
195
|
-
|
|
196
|
-
## Bindings contract (RFC-0393)
|
|
197
|
-
|
|
198
|
-
The `bindings` section in `forge.yaml` de-hardcodes project-specific values from fo-skills. Skills reference bindings by key (e.g. `ref(forge.yaml bindings.commands.validateRfc)`) instead of hardcoding commands, paths, or terminology.
|
|
199
|
-
|
|
200
|
-
- `forgeBindingsSchema` + `resolveBinding(config, key, placeholders?)` are exported from `@warpgogol/forge`.
|
|
201
|
-
- `doctor` validates bindings: checks path existence, reports resolved/absent/invalid, and emits `defaultable-binding-null` notices for forge-CLI-backed bindings that are null (RFC-0540).
|
|
202
|
-
- `create` writes forge-CLI-backed defaults for commands forge provides (`validateRfc`, `validateAdr`, `implementStamp`, `specValidate`) and null for stack-dependent commands (`typecheck`, `test`, `scopedBuild`). The package manager from `forge.yaml` determines the runner prefix (`pnpm exec`, `npx`, `yarn exec`, `bunx`).
|
|
203
|
-
- `skill.validate` enforces SKILL-11: canonical skill bodies must not contain hardcoded `pnpm exec werkstatt run` or `docs/architecture-dna.md` in instruction lines (code blocks and `run:` directives). Supports `<!-- skill-lint-disable SKILL-11 -->` escape hatch.
|
|
204
|
-
- `skill.validate` enforces SKILL-17: skill files must not contain specific platform RFC/ADR ids (`RFC-\d{4}`, `ADR-\d{4}`) or platform names ("Warpgogol", "Warpgogol", "WarpGogol"). Generic "RFC"/"ADR" terms, generic placeholder ids (`RFC-XXXX`), file paths (`adr-0000-template.md`), and binding key names (`validateRfc`) are allowed. The `@warpgogol/forge` npm package name is excluded from the platform name check. Supports `<!-- skill-lint-disable SKILL-17 -->` escape hatch.
|
|
205
|
-
- `skill.validate` enforces SKILL-18: canonical forge skill bodies must not reference software-specific binding keys (`bindings.commands.typecheck`, `bindings.commands.scopedBuild`, `bindings.commands.test`) in instruction lines (code blocks and `run:` directives). Skills must reference semantic keys (`bindings.commands.validate`, `bindings.commands.produce`, `bindings.commands.verify`) instead. Supports `<!-- skill-lint-disable SKILL-18 -->` escape hatch. Applies to forge skills only, not pack skills.
|
|
206
|
-
- Skills declare binding requirements in frontmatter: `bindings: { requires: [...], optional: [...] }`.
|
|
207
|
-
- Degradation contract: required binding unresolvable → skill refuses to start; optional binding absent → step skipped with `Degraded:` line in report.
|
|
208
|
-
- **RFC-0609: Binding templates must use flag format.** CLI binding templates in `FORGE_CLI_BINDING_DEFAULTS` and `forge.yaml` must use `--id {id}` (flag format), not `{id}` (positional). For example: `forge rfc.validate --id {id} --json`, not `forge rfc.validate {id} --json`. This applies to `validateRfc`, `validateAdr`, and any future binding that passes an identifier to a command.
|
|
209
|
-
|
|
210
|
-
### Semantic command keys (RFC-0639)
|
|
211
|
-
|
|
212
|
-
The `forge/bindings@1` schema includes five optional semantic command keys that work across all domains. These coexist with the software-specific keys (`typecheck`, `test`, `scopedBuild`) — they do not replace them.
|
|
213
|
-
|
|
214
|
-
- **`commands.validate`** — domain-neutral validation command (replaces `typecheck` for non-software domains).
|
|
215
|
-
- **`commands.produce`** — domain-neutral artifact production command (replaces `scopedBuild`).
|
|
216
|
-
- **`commands.verify`** — domain-neutral verification command (replaces `test`).
|
|
217
|
-
- **`commands.preview`** — domain-neutral preview command (e.g. dev server, live preview).
|
|
218
|
-
- **`commands.lint`** — domain-neutral linting command.
|
|
219
|
-
|
|
220
|
-
All semantic keys are optional with `null` defaults. `applyCliBindingDefaults` initializes them with `null` (they are stack-dependent, not CLI-backed). `doctor` does **not** validate semantic keys — they are opt-in per-domain, so reporting them as `absent` for projects that intentionally leave them `null` would be noise. Skills reference them via `ref(bindings.commands.produce)` etc.
|
|
221
|
-
|
|
222
|
-
### Terminology resolution (RFC-0639)
|
|
223
|
-
|
|
224
|
-
The `terminology` field in `forge/bindings@1` is non-optional with a `{}` default (changed from `.optional()` in RFC-0639). `resolveTerminology(config, terminology, key)` resolves a terminology key using a three-tier chain:
|
|
225
|
-
|
|
226
|
-
1. **Tier 1 — bindings override**: `config.bindings.terminology[key]` (per-project).
|
|
227
|
-
2. **Tier 2 — caller-provided**: the `terminology` parameter (typically `profile.terminology` from RFC-0638).
|
|
228
|
-
3. **Tier 3 — universal default**: `TERMINOLOGY_DEFAULTS` from `@warpgogol/forge` (re-exported from `profile-schema.ts`).
|
|
229
|
-
|
|
230
|
-
If the key is not found in any tier, the key itself is returned. The `terminology` parameter is `Record<string, string> | undefined` — a separate parameter, not embedded in `StackProfile` — so the function works whether or not RFC-0638 profile terminology is available.
|
|
231
|
-
|
|
232
|
-
`resolveTerminology` is exported from `@warpgogol/forge` and `@warpgogol/forge/config`.
|
|
233
|
-
|
|
234
|
-
## Output contract (RFC-0542)
|
|
235
|
-
|
|
236
|
-
Every forge CLI command's output ends with a **Next steps** block in pretty mode and a `nextSteps` array in `--json` mode. Each entry is `{ action: string, kind: "required" | "optional" }`.
|
|
237
|
-
|
|
238
|
-
- `renderNextSteps`, `renderIdeRecommendation`, and `generateHelp` are pure functions in `src/cli-output.ts` — importable by `bin/cli.ts` and unit tests.
|
|
239
|
-
- `create` prints an IDE recommendation (Windsurf tested, alternatives without guarantee) after the Next steps block in pretty mode.
|
|
240
|
-
- All forge CLI natural-language output is English regardless of `PREFERENCES.md` — `aiLanguage` governs agent chat, not the forge binary.
|
|
241
|
-
- `printHelp` is generated from the registry via `generateHelp` — no hand-maintained command list. `--help <command>` prints per-command flags and description.
|
|
242
|
-
- `ForgeNextStep` type and `nextSteps?` field are on `ForgeCommandResult` directly (cross-cutting), not inside command-specific `data`.
|
|
243
|
-
- Lifecycle commands (`create`, `scaffold`, `doctor`, `port.scaffold`) MUST populate `nextSteps`. Pass-state validators MAY leave the array empty.
|
|
244
|
-
- Future commands (`create`, `upgrade`) MUST conform to the `nextSteps` contract from day one.
|
|
245
|
-
- Skill reports (agent chat output) use the operator's `aiLanguage` and contain zero CLI commands, guides, or format references in user-facing text. The system hides all complexity from the operator. CLI output remains English per RFC-0542; only the skill (agent chat) uses `aiLanguage`. The `forge-bootstrap` welcoming report is the canonical example of this contract.
|
|
246
|
-
|
|
247
|
-
## Silent upgrade trigger (RFC-0554)
|
|
248
|
-
|
|
249
|
-
The `forge-bootstrap` skill step 0 silently checks `forge.syncedVersion` against the installed `@warpgogol/forge` version. If they differ, it runs `forge upgrade --update-npm` invisibly — the operator is never informed about migration, version numbers, or upgrade mechanics. The npm update is skipped automatically in monorepo environments (where `packages/forge/` exists). The `upgrade` CLI command remains available for manual sync (with or without `--update-npm`). This is not a dual-path: it is a single upgrade mechanism (`runUpgrade`) with two entry points (CLI and `forge-bootstrap`).
|
|
250
|
-
|
|
251
|
-
## Core behavioral layer (RFC-0548)
|
|
252
|
-
|
|
253
|
-
`forge.agents.generate` now includes a **Core behavioral layer** section in generated `AGENTS.md` files. This section is wrapped in `<!-- forge:begin behavioral-layer -->` / `<!-- forge:end behavioral-layer -->` markers and contains:
|
|
254
|
-
|
|
255
|
-
- **Intent-to-skill routing table** — generated from `triggers` fields in fo-skill frontmatter. Each row maps natural-language trigger phrases to the corresponding skill.
|
|
256
|
-
- **Fixed policy text** for 20 core behavioral areas: auto-grilling, auto-session-save, auto-review, context awareness, creator-facing communication, adaptive learning, proactive guidance, live operator feedback, register parameter, pushback policy, external capabilities (MCP), safety net, invisible quality, first creation moment, creative health, sharing and feedback, cultural awareness, indirect teaching, ownership, and commit policy (RFC-0551).
|
|
257
|
-
- **Conditional extended behavioral layer** (RFC-0549) — included only when the register is `creative` (read from `PREFERENCES.md` `register` field). Contains ten sections: personal connection, creative memory, emotional rhythm (questions not declarations), gentle accountability, creative partnership, visual thinking, audience empathy, creative companion (companion mode, `saveCompanionSessions` flag, pull-only inspiration feed), creative confidence (outcome-based praise, never refuse creative direction), and always-next-step (RFC-0551, supersedes the "at most one per session" anticipatory suggestion limit). Content is loaded from `src/onboarding/templates/behavioral-layer-extended.md`.
|
|
258
|
-
|
|
259
|
-
`create` auto-runs `forge.agents.generate` after `forge.init`, so newly created projects get the behavioral layer from day one. If generation fails, a warning is logged but the create command continues.
|
|
260
|
-
|
|
261
|
-
The `triggers` field in skill frontmatter is validated by SKILL-16: optional array of 1-5 natural-language strings (each 5-100 characters), only allowed on fo-category skills. Pack skills may not declare triggers.
|
|
262
|
-
|
|
263
|
-
## Nested AGENTS.md generation (RFC-0611)
|
|
264
|
-
|
|
265
|
-
`forge.agents.generate` also generates nested `AGENTS.md` files for workspace directories (directories containing `package.json`). Workspace type is auto-detected by content markers:
|
|
266
|
-
|
|
267
|
-
- **app** — directory with `astro.config.*`
|
|
268
|
-
- **service** — directory with `Dockerfile` or `service.config.yaml`
|
|
269
|
-
- **package** — directory with `package.json` only
|
|
270
|
-
- Precedence: app > service > package
|
|
271
|
-
|
|
272
|
-
Workspace-type detection rules are defined in RFC-0611. Agents MUST NOT add new detection rules without an amending RFC.
|
|
273
|
-
|
|
274
|
-
The edit guard skips hand-written nested `AGENTS.md` files (no generated marker) and reports them in the `skipped` array. Generated files (with marker) are regenerated if content differs. `upgrade` also runs nested generation after skill sync. `doctor` checks for missing, stale (in-memory comparison), and hand-written improvement opportunities.
|
|
275
|
-
|
|
276
|
-
`forge.agents.generate` supports `dryRun` mode (RFC-0601 pattern): it renders content in memory without writing to disk, returning `renderedFiles` in the result. This is used by `doctor` for staleness detection.
|
|
277
|
-
|
|
278
|
-
- **Doctor stale check MUST use the same rendering pipeline as `forge agents generate`.** The stale check in `checkNestedAgentsMd` (`src/onboarding/doctor.ts`) must call `readPackageInfo` → `buildNestedAgentsMd(ws, config, packageInfo)` → `selectNestedTemplate(wsType, profile, terminology, fallback)` — exactly matching `generateNestedAgentsMd` in `src/onboarding/nested-agents-generate.ts`. Any divergence (missing `packageInfo`, missing `selectNestedTemplate`, missing `resolveAllTerminology`) causes false-positive stale reports for all generated nested `AGENTS.md` files. When modifying either function, verify the other stays in sync.
|
|
279
|
-
|
|
280
|
-
## Extended behavioral layer (RFC-0549)
|
|
281
|
-
|
|
282
|
-
The extended behavioral layer is conditionally included in generated `AGENTS.md` files when the operator's register is `creative`. It adds ten behavioral policies additive to the core layer:
|
|
283
|
-
|
|
284
|
-
1. **Personal connection** — operator name at key moments, project story, deep purpose as compass.
|
|
285
|
-
2. **Creative memory** — unimplemented ideas, aesthetic preferences, creative influences.
|
|
286
|
-
3. **Emotional rhythm** — session mood via questions (not declarations), return after break, progress celebration.
|
|
287
|
-
4. **Gentle accountability** — unfinished intentions, deep purpose checks.
|
|
288
|
-
5. **Creative partnership** — sounding board (2-3 alternatives), creative constraints, anticipatory suggestions.
|
|
289
|
-
6. **Visual thinking** — visual previews, visual diffs, milestone gallery, voice consistency, tone matching.
|
|
290
|
-
7. **Audience empathy** — audience perspective, first-visitor test, emotional memory, project narrative.
|
|
291
|
-
8. **Creative companion** — companion mode (`saveCompanionSessions` flag), creative blocks, inspiration feed (pull-only MVP, `inspirationFeed: on|off`).
|
|
292
|
-
9. **Creative confidence** — outcome-based praise (not effort-based), gentle purpose-drift pushback (never refuse creative direction).
|
|
293
|
-
10. **Always-next-step** (RFC-0551) — the agent MUST always propose a concrete next step after any pause point. Supersedes the "at most one anticipatory suggestion per session" limit from Creative partnership (section 5).
|
|
294
|
-
|
|
295
|
-
Three surrogate-relationship mitigations: questions instead of declarations, outcome-based praise, and 90-day entry expiry for emotional observations in `operator-profile.md`.
|
|
296
|
-
|
|
297
|
-
`fo-session-retro` routes extended-layer insights to `operator-profile.md` with Zugangsstufen tags: emotional rhythm → `[Vertraulich]` with 90-day expiry, aesthetic preferences → `[Öffentlich]`.
|
|
298
|
-
|
|
299
|
-
## RFC commands frontmatter (RFC-CMD-01..03)
|
|
300
|
-
|
|
301
|
-
When an RFC transitions to `implemented`, `rfc.validate` enforces command lifecycle rules against the `commands:` frontmatter:
|
|
302
|
-
|
|
303
|
-
- **RFC-CMD-01:** A live command listed under `commands.proposed` but not `commands.added` is a violation. For implemented RFCs, newly created commands MUST be in `commands.added`, not `commands.proposed`. `commands.proposed` is only valid for RFCs in `draft` or `accepted` status.
|
|
304
|
-
- **RFC-CMD-03:** Every entry under `commands.changed` MUST be a registered live command (present in `docs/command-manifest.generated.yaml`). Pipeline names (e.g. `build.prepare`, `SITES_BUILD_PREPARE_PIPELINE`) are NOT registered commands — they MUST NOT be listed under `commands.changed`. If an RFC modifies a pipeline array, that is not a command registration change.
|
|
305
|
-
|
|
306
|
-
## Spec vendoring (RFC-0394..0397)
|
|
307
|
-
|
|
308
|
-
External specification packages are vendored as immutable snapshots under `docs/specs/<spec-id>/` with an integrity manifest and `forge-spec.yaml` projection.
|
|
309
|
-
|
|
310
|
-
- `forgeSpecModule` (in `os/spec/`) registers `spec.validate`, `spec.status`, `spec.materialize`, `spec.live.merge`, `spec.live.list`, `spec.live.show`, `spec.live.validate`.
|
|
311
|
-
- `spec.validate` enforces SPEC-01..07: integrity, schema, cycles, references, waves, duplicates, materializedAs.
|
|
312
|
-
- `spec.materialize` scaffolds RFC files for front nodes with `specRef` traceability and writes `materializedAs` back to `forge-spec.yaml`.
|
|
313
|
-
- `spec.status` projects per-node states, blockers, and progress.
|
|
314
|
-
- Spec amendments (`docs/specs/<id>/amendments/amd-NNN-*.md`) are the only correction channel — snapshot files are never modified.
|
|
315
|
-
|
|
316
|
-
### Living feature specs (RFC-0711)
|
|
317
|
-
|
|
318
|
-
Living feature specs are mutable markdown documents under `docs/specs/live/<domain>.md` that reflect the current specification of a feature or module. Unlike vendored spec snapshots (DNA-55), living specs evolve through delta merges from archived RFCs.
|
|
319
|
-
|
|
320
|
-
- `spec.live.merge --id <RFC-XXXX>` extracts headings from the RFC's `## Design` section and merges them into the corresponding living spec. All-or-nothing: aborts on any heading conflict without writing. Use `--dry-run` to preview.
|
|
321
|
-
- `spec.live.list` lists all living specs with domain, title, lastMergedRfc, and history count.
|
|
322
|
-
- `spec.live.show --domain <name>` reads and returns a single living spec.
|
|
323
|
-
- `spec.live.validate` validates all living specs with rules V-LS-01..05 (frontmatter, domain/filename match, archived RFC references, history integrity, duplicate domains).
|
|
324
|
-
- `docs.archive` automatically calls `spec.live.merge` for implemented RFCs with `liveSpec` frontmatter field after archiving. Rejected RFCs with `liveSpec` are skipped.
|
|
325
|
-
|
|
326
|
-
## NPM publish workflow
|
|
327
|
-
|
|
328
|
-
To publish a new version of `@warpgogol/forge` to NPM:
|
|
329
|
-
|
|
330
|
-
1. Bump `version` in `packages/forge/package.json` (semver: minor for new skills/features, patch for fixes).
|
|
331
|
-
2. Bump `forge.syncedVersion` in `forge.yaml` to match.
|
|
332
|
-
3. Run `pnpm --filter @warpgogol/forge publish --access public --no-git-checks` — publishes to `@warpgogol/forge` on npmjs.org.
|
|
333
|
-
4. Commit version bumps: `git add packages/forge/package.json forge.yaml && git commit -m "release: @warpgogol/forge@<version>"`.
|
|
334
|
-
|
|
335
|
-
The `prepublishOnly` script runs `clean → build → publish-check → strip-workspace-deps` automatically. **`strip-workspace-deps.mjs`** removes `@warpgogol/*` `workspace:*` dependencies from `package.json` before publish — these packages are not on npm and would make the published package uninstallable. The `postpublish` script restores the original `package.json` via `git checkout -- ./package.json`.
|
|
336
|
-
|
|
337
|
-
**Do NOT use `npm publish`** — it fails during `prepublishOnly` because `tsc` cannot resolve workspace dependencies (`@warpgogol/werkstatt-site/share/fs`, `@warpgogol/werkstatt/fingerprint`) outside the pnpm workspace context. `pnpm publish` handles workspace dependencies correctly.
|
|
338
|
-
|
|
339
|
-
**Workspace deps must use dynamic imports.** `@warpgogol/*` packages that are not published to npm MUST be imported via dynamic `import()` (see `os/core/handlers/workspace-deps.ts`), never static `import`. Static imports would fail at runtime when forge is installed standalone from npm. The `workspace-deps.ts` helper caches the dynamic import and throws a clear error message if the packages are missing.
|
|
340
|
-
|
|
341
|
-
### `.npmrc` token precedence
|
|
342
|
-
|
|
343
|
-
When publishing `@warpgogol/forge`, npm resolves the auth token from `.npmrc` files in precedence order: `packages/forge/.npmrc` (project) > `werkstatt/.npmrc` (workspace root) > `~/.npmrc` (user). A stale token in `packages/forge/.npmrc` silently overrides valid tokens in the other files. npm returns `404 Not Found` (not `403 Forbidden`) on PUT when the token lacks publish permissions — this is a deliberate npm security behavior that masks auth failures as missing resources. When rotating npm tokens, update ALL `.npmrc` files that contain a token, starting with `packages/forge/.npmrc`. All three files are gitignored.
|
|
344
|
-
|
|
345
|
-
## Git command patterns in forge handlers
|
|
346
|
-
|
|
347
|
-
- **`git log --oneline` output includes a hash prefix** — the format is `<hash> <message>`, not `<message>`. When matching commit message patterns in `--oneline` output, do NOT anchor the regex to `^implement:` or `^feat:` — the line starts with the hash. Use a non-anchored pattern like `implement:\s+RFC-\d{4}\b` instead. Discovered during RFC-0625 V-32 implementation where `^implement:` failed to match `--oneline` output.
|
|
348
|
-
- **`execGit` helper pattern** — multiple forge handlers (`implement-stamp.ts`, `verification-evidence.ts`, `validate-rules.ts`, `validate.ts`) each define their own `execGit`/`execGitLog` helper wrapping `execFile("git", ...)`. These are candidates for extraction into a shared `os/utils/git.ts` utility.
|
|
349
|
-
|
|
350
|
-
## CLI invocation and test fixtures
|
|
351
|
-
|
|
352
|
-
- **Running forge CLI commands on the workspace root** — `pnpm --filter @warpgogol/forge exec forge <command>` runs from the package directory (`packages/forge/`), where `forge.yaml` is not found. To run forge commands against the workspace root (e.g. `doctor`, `rfc.validate`, `upgrade`), use `node packages/forge/bin/cli.js <command>` from the workspace root instead.
|
|
353
|
-
- **Golden fixture for `agents-generate`** — when adding or modifying sections in `agents-generate.ts`, the golden fixture `src/tests/fixtures/agents-generate-business-before.txt` MUST be updated to match the new generated output. The test `agents-generate-domain.test.ts` compares generated content against this fixture with `expect(content).toBe(goldenFixture)` — a mismatch fails the test.
|
|
354
|
-
- **SKILL-17 brand pattern must be case-sensitive** — the brand regex in `skill-validate.ts` uses a `@`-lookbehind to allow `@warpgogol/<pkg>` npm-scope references in skill instruction lines. Making the regex case-insensitive (`/gi`) defeats the lookbehind and false-flags every `@warpgogol` import as a brand violation. Keep the regex case-sensitive (`/g` only) so the `@`-scope allowance works correctly.
|
|
355
|
-
- **`vi.resetModules()` before `vi.doMock()` for Node builtins** — when mocking Node built-in modules (e.g. `node:child_process`) in vitest, `vi.resetModules()` MUST be called BEFORE `vi.doMock()`. Without `resetModules()` first, the module cache retains the original module and the mock is not applied on re-import via dynamic `import()`. After the test, call `vi.doUnmock()` and `vi.resetModules()` to restore. Discovered during `upgrade.test.ts` `--update-npm` mock testing.
|
|
356
|
-
- **Mock `execSync` for scaffold tests** — `runScaffoldProject` calls `execSync` to run `pnpm add` install commands, which fail in test environments without network access. Mock `node:child_process` with `vi.mock("node:child_process", async (importActual) => { const actual = await importActual(); return { ...actual, execSync: vi.fn(() => Buffer.from("mocked")) }; })` and use dynamic `await import("../onboarding/scaffold-project.ts")` after the mock. Use `vi.importActual` to preserve `execFile` (used by `promisify(execFile)` in forge/os/compass).
|
|
357
|
-
- **`runDoctor` profile resolution in tests** — `runDoctor` calls `resolveForgeRoot(workspaceRoot)` which searches for `packages/forge/` relative to the workspace root. In temp-directory tests, the forge package is not found, so profile-dependent checks (prerequisites, invariants) are silently skipped. Either pass `forgeRoot` in the `ForgeRuntimeContext` (preferred), or create a minimal `packages/forge/profiles/<id>.yaml` inside the temp directory.
|
|
358
|
-
|
|
359
|
-
## RFC frontmatter: versionBump for prose-only policy RFCs
|
|
360
|
-
|
|
361
|
-
Prose-only policy RFCs (skill-text-only, no code/command/contract changes) MUST set `versionBump: none`, not `patch`. The `patch` value over-reports the SemVer impact — there is no runtime or API surface change. This was a recurring audit finding across RFC-0669, RFC-0670, RFC-0671, RFC-0672, and RFC-0673 (5 consecutive RFCs). Set `versionBump: none` at creation time for `kind: policy` RFCs that only modify `.md` skill files.
|
|
362
|
-
|
|
363
|
-
## RFC frontmatter: file system responsibilities table
|
|
364
|
-
|
|
365
|
-
Skill-text-only RFCs MUST include `packages/forge/AGENTS.md` in the file system responsibilities table with the note "No change needed — documents skill infrastructure, not individual skill behavior." This preempts a recurring audit finding (5 consecutive RFCs). The `packages/forge/AGENTS.md` file documents skill infrastructure (sync paths, validator rules, import constraints), not individual skill behavior — so it never needs updating when a skill's text changes.
|
|
366
|
-
|
|
367
|
-
## rfc.create title reuse
|
|
368
|
-
|
|
369
|
-
`rfc.create` may reuse the title from a previous invocation in the same session. After creating an RFC, always verify the generated filename matches the intended title before populating content. If the filename is wrong, delete the file and re-run `rfc.create` with the correct `--title`. Do not rename the file — the RFC ID is assigned by the command and must not be manually changed.
|
|
370
|
-
|
|
371
|
-
## Profile-driven RFC conventions
|
|
372
|
-
|
|
373
|
-
All profile-driven RFCs (RFC-0674 onwards) MUST follow these conventions:
|
|
374
|
-
|
|
375
|
-
- **CLI flags**: every proposed command MUST support `--dry-run`, `--json`, and `--profile` flags. These are the standard Forge lifecycle flags.
|
|
376
|
-
- **Schema extensions**: all new profile schema fields MUST be optional (`z.optional()`) — existing profiles must continue to validate without changes.
|
|
377
|
-
- **No domain-specific logic in Forge core**: all behavior is driven by profile YAML declarations. Forge source must not import domain-specific packages or hardcode domain-specific rules.
|
|
378
|
-
- **File system responsibilities table**: every profile-driven RFC MUST list `packages/forge/src/profiles/profile-schema.ts` and `packages/forge/os/core/core.module.ts` in the table.
|
|
379
|
-
|
|
380
|
-
## Workflow file placement
|
|
381
|
-
|
|
382
|
-
Workflow files MUST live only in `.agents/workflows/`. Do NOT duplicate workflow files in `.windsurf/workflows/` — `.windsurf/workflows/` is IDE-specific config that does not ship to new projects via `create`. `.agents/workflows/` is the single source of truth for workflow definitions.
|
|
383
|
-
|
|
384
|
-
## Workflow files vs skill content
|
|
385
|
-
|
|
386
|
-
IDE-specific workflow files (`.windsurf/workflows/`, `.devin/workflows/`) MUST NOT duplicate skill content. Skills (`packages/forge/skills/`) are the portable unit — they ship to every new project via `create`. Workflow files are IDE-specific triggers that reference skills by name; they should not contain the protocol itself. If a workflow file grows beyond a trigger phrase + skill reference, move the content into the skill's `SKILL.md`.
|
|
387
|
-
|
|
388
|
-
## Kernel command handler pattern: pure function + thin handler
|
|
389
|
-
|
|
390
|
-
When a kernel command's logic needs to be called from two contexts — (1) a pipeline step via `KernelRuntimeContext` and (2) directly from another package without kernel types — split into a pure function + thin kernel handler.
|
|
391
|
-
|
|
392
|
-
- **Pure function**: `ensureThing(workspaceRoot: string, logger: { info: (msg: string) => void }): Promise<Result>` — no kernel types, callable from any package.
|
|
393
|
-
- **Thin kernel handler**: `runThing(input: KernelCommandInput, context: KernelRuntimeContext): Promise<KernelCommandResult<Result>>` — calls the pure function, wraps result in `KernelCommandResult`, catches errors → `exitCode: 1`.
|
|
394
|
-
|
|
395
|
-
This avoids the fragile alternative of calling a kernel handler with synthetic `input`/`context` from non-kernel code. The pure function is the reusable unit; the handler is the pipeline/CLI adapter.
|
|
396
|
-
|
|
397
|
-
**Custom result types:** When a kernel command returns a custom data type (not `CheckResult`), you cannot use `failResult`/`passResult` from result helpers — they return `KernelCommandResult<CheckResult>`, not your type. Build the `KernelCommandResult` manually: `{ data: result, exitCode: 0, summary: "ok" }` for success, `{ data: { ...nulls }, exitCode: 1, summary: msg }` for error.
|