@warpgogol/forge 2.19.0 → 2.21.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.
- package/README.md +13 -1
- package/README.uk.md +7 -1
- package/os/adr/adr.module.ts +2 -0
- package/os/compass/compass.module.ts +6 -0
- package/os/core/core.module.ts +17 -1
- package/os/naming/naming.module.ts +2 -0
- package/os/notes/notes.module.ts +4 -0
- package/os/plugin/plugin.module.ts +2 -0
- package/os/program/program.module.ts +2 -0
- package/os/rfc/acceptance.ts +1 -1
- package/os/rfc/rfc.module.ts +10 -0
- package/os/session/session.module.ts +2 -0
- package/os/spec/live-spec-merge.test.ts +76 -0
- package/os/spec/live-spec-merge.ts +14 -49
- package/os/spec/spec.module.ts +4 -0
- package/os/werkstatt/werkstatt.module.ts +2 -0
- package/os/workflow/workflow.module.ts +2 -0
- package/package.json +1 -1
- package/profiles/godot-csharp.yaml +4 -4
- package/profiles/typescript-turborepo.yaml +222 -0
- package/skills/meta/forge-bootstrap/SKILL.md +6 -6
- package/src/migration-adapters/git-utils.ts +4 -3
- package/src/onboarding/create.ts +19 -0
- package/src/onboarding/doctor.ts +37 -0
- package/src/tests/migration-adapters.test.ts +21 -0
- package/src/tests/profile-schema.test.ts +1 -1
- package/src/types/werkstatt-engine-shims.d.ts +99 -12
- package/src/types/werkstatt-shared-shims.d.ts +71 -0
- package/src/types.ts +4 -0
- package/dist/bin/cli.d.ts +0 -3
- package/dist/bin/cli.d.ts.map +0 -1
- package/dist/bin/cli.js +0 -291
- package/dist/bin/cli.js.map +0 -1
- package/dist/os/adr/adr.module.d.ts +0 -3
- package/dist/os/adr/adr.module.d.ts.map +0 -1
- package/dist/os/adr/adr.module.js +0 -146
- package/dist/os/adr/adr.module.js.map +0 -1
- package/dist/os/adr/frontmatter-io.d.ts +0 -12
- package/dist/os/adr/frontmatter-io.d.ts.map +0 -1
- package/dist/os/adr/frontmatter-io.js +0 -67
- package/dist/os/adr/frontmatter-io.js.map +0 -1
- package/dist/os/adr/handlers/archive.d.ts +0 -24
- package/dist/os/adr/handlers/archive.d.ts.map +0 -1
- package/dist/os/adr/handlers/archive.js +0 -194
- package/dist/os/adr/handlers/archive.js.map +0 -1
- package/dist/os/adr/handlers/implement-stamp.d.ts +0 -4
- package/dist/os/adr/handlers/implement-stamp.d.ts.map +0 -1
- package/dist/os/adr/handlers/implement-stamp.js +0 -264
- package/dist/os/adr/handlers/implement-stamp.js.map +0 -1
- package/dist/os/adr/handlers/list-create.d.ts +0 -5
- package/dist/os/adr/handlers/list-create.d.ts.map +0 -1
- package/dist/os/adr/handlers/list-create.js +0 -201
- package/dist/os/adr/handlers/list-create.js.map +0 -1
- package/dist/os/adr/handlers/validate.d.ts +0 -4
- package/dist/os/adr/handlers/validate.d.ts.map +0 -1
- package/dist/os/adr/handlers/validate.js +0 -279
- package/dist/os/adr/handlers/validate.js.map +0 -1
- package/dist/os/adr/index.d.ts +0 -8
- package/dist/os/adr/index.d.ts.map +0 -1
- package/dist/os/adr/index.js +0 -18
- package/dist/os/adr/index.js.map +0 -1
- package/dist/os/adr/types.d.ts +0 -76
- package/dist/os/adr/types.d.ts.map +0 -1
- package/dist/os/adr/types.js +0 -56
- package/dist/os/adr/types.js.map +0 -1
- package/dist/os/audit/audit.module.d.ts +0 -3
- package/dist/os/audit/audit.module.d.ts.map +0 -1
- package/dist/os/audit/audit.module.js +0 -45
- package/dist/os/audit/audit.module.js.map +0 -1
- package/dist/os/audit/frontmatter-io.d.ts +0 -12
- package/dist/os/audit/frontmatter-io.d.ts.map +0 -1
- package/dist/os/audit/frontmatter-io.js +0 -71
- package/dist/os/audit/frontmatter-io.js.map +0 -1
- package/dist/os/audit/handlers/archive.d.ts +0 -4
- package/dist/os/audit/handlers/archive.d.ts.map +0 -1
- package/dist/os/audit/handlers/archive.js +0 -207
- package/dist/os/audit/handlers/archive.js.map +0 -1
- package/dist/os/audit/index.d.ts +0 -6
- package/dist/os/audit/index.d.ts.map +0 -1
- package/dist/os/audit/index.js +0 -16
- package/dist/os/audit/index.js.map +0 -1
- package/dist/os/audit/types.d.ts +0 -12
- package/dist/os/audit/types.d.ts.map +0 -1
- package/dist/os/audit/types.js +0 -17
- package/dist/os/audit/types.js.map +0 -1
- package/dist/os/compass/compass.module.d.ts +0 -3
- package/dist/os/compass/compass.module.d.ts.map +0 -1
- package/dist/os/compass/compass.module.js +0 -183
- package/dist/os/compass/compass.module.js.map +0 -1
- package/dist/os/compass/handlers/compass-audit-handler.d.ts +0 -36
- package/dist/os/compass/handlers/compass-audit-handler.d.ts.map +0 -1
- package/dist/os/compass/handlers/compass-audit-handler.js +0 -260
- package/dist/os/compass/handlers/compass-audit-handler.js.map +0 -1
- package/dist/os/compass/handlers/compass-change-summary-handler.d.ts +0 -19
- package/dist/os/compass/handlers/compass-change-summary-handler.d.ts.map +0 -1
- package/dist/os/compass/handlers/compass-change-summary-handler.js +0 -222
- package/dist/os/compass/handlers/compass-change-summary-handler.js.map +0 -1
- package/dist/os/compass/handlers/compass-inventory-handler.d.ts +0 -28
- package/dist/os/compass/handlers/compass-inventory-handler.d.ts.map +0 -1
- package/dist/os/compass/handlers/compass-inventory-handler.js +0 -377
- package/dist/os/compass/handlers/compass-inventory-handler.js.map +0 -1
- package/dist/os/compass/handlers/compass-inventory.d.ts +0 -30
- package/dist/os/compass/handlers/compass-inventory.d.ts.map +0 -1
- package/dist/os/compass/handlers/compass-inventory.js +0 -462
- package/dist/os/compass/handlers/compass-inventory.js.map +0 -1
- package/dist/os/compass/handlers/git-revision.d.ts +0 -8
- package/dist/os/compass/handlers/git-revision.d.ts.map +0 -1
- package/dist/os/compass/handlers/git-revision.js +0 -99
- package/dist/os/compass/handlers/git-revision.js.map +0 -1
- package/dist/os/compass/handlers/resolve-scan-root.d.ts +0 -3
- package/dist/os/compass/handlers/resolve-scan-root.d.ts.map +0 -1
- package/dist/os/compass/handlers/resolve-scan-root.js +0 -57
- package/dist/os/compass/handlers/resolve-scan-root.js.map +0 -1
- package/dist/os/compass/index.d.ts +0 -8
- package/dist/os/compass/index.d.ts.map +0 -1
- package/dist/os/compass/index.js +0 -19
- package/dist/os/compass/index.js.map +0 -1
- package/dist/os/core/core.module.d.ts +0 -3
- package/dist/os/core/core.module.d.ts.map +0 -1
- package/dist/os/core/core.module.js +0 -836
- package/dist/os/core/core.module.js.map +0 -1
- package/dist/os/core/handlers/assets-check.d.ts +0 -19
- package/dist/os/core/handlers/assets-check.d.ts.map +0 -1
- package/dist/os/core/handlers/assets-check.js +0 -89
- package/dist/os/core/handlers/assets-check.js.map +0 -1
- package/dist/os/core/handlers/assets-helpers.d.ts +0 -28
- package/dist/os/core/handlers/assets-helpers.d.ts.map +0 -1
- package/dist/os/core/handlers/assets-helpers.js +0 -128
- package/dist/os/core/handlers/assets-helpers.js.map +0 -1
- package/dist/os/core/handlers/assets-list.d.ts +0 -9
- package/dist/os/core/handlers/assets-list.d.ts.map +0 -1
- package/dist/os/core/handlers/assets-list.js +0 -72
- package/dist/os/core/handlers/assets-list.js.map +0 -1
- package/dist/os/core/handlers/build.d.ts +0 -16
- package/dist/os/core/handlers/build.d.ts.map +0 -1
- package/dist/os/core/handlers/build.js +0 -123
- package/dist/os/core/handlers/build.js.map +0 -1
- package/dist/os/core/handlers/determinism-check.d.ts +0 -20
- package/dist/os/core/handlers/determinism-check.d.ts.map +0 -1
- package/dist/os/core/handlers/determinism-check.js +0 -289
- package/dist/os/core/handlers/determinism-check.js.map +0 -1
- package/dist/os/core/handlers/dev.d.ts +0 -10
- package/dist/os/core/handlers/dev.d.ts.map +0 -1
- package/dist/os/core/handlers/dev.js +0 -102
- package/dist/os/core/handlers/dev.js.map +0 -1
- package/dist/os/core/handlers/forge-autonomy-validate.d.ts +0 -18
- package/dist/os/core/handlers/forge-autonomy-validate.d.ts.map +0 -1
- package/dist/os/core/handlers/forge-autonomy-validate.js +0 -115
- package/dist/os/core/handlers/forge-autonomy-validate.js.map +0 -1
- package/dist/os/core/handlers/knowledge-compact.d.ts +0 -4
- package/dist/os/core/handlers/knowledge-compact.d.ts.map +0 -1
- package/dist/os/core/handlers/knowledge-compact.js +0 -204
- package/dist/os/core/handlers/knowledge-compact.js.map +0 -1
- package/dist/os/core/handlers/package-health.d.ts +0 -17
- package/dist/os/core/handlers/package-health.d.ts.map +0 -1
- package/dist/os/core/handlers/package-health.js +0 -196
- package/dist/os/core/handlers/package-health.js.map +0 -1
- package/dist/os/core/handlers/pinned-check.d.ts +0 -49
- package/dist/os/core/handlers/pinned-check.d.ts.map +0 -1
- package/dist/os/core/handlers/pinned-check.js +0 -159
- package/dist/os/core/handlers/pinned-check.js.map +0 -1
- package/dist/os/core/handlers/pinned-init.d.ts +0 -19
- package/dist/os/core/handlers/pinned-init.d.ts.map +0 -1
- package/dist/os/core/handlers/pinned-init.js +0 -283
- package/dist/os/core/handlers/pinned-init.js.map +0 -1
- package/dist/os/core/handlers/pinned-types.d.ts +0 -29
- package/dist/os/core/handlers/pinned-types.d.ts.map +0 -1
- package/dist/os/core/handlers/pinned-types.js +0 -16
- package/dist/os/core/handlers/pinned-types.js.map +0 -1
- package/dist/os/core/handlers/pinned-validate.d.ts +0 -4
- package/dist/os/core/handlers/pinned-validate.d.ts.map +0 -1
- package/dist/os/core/handlers/pinned-validate.js +0 -248
- package/dist/os/core/handlers/pinned-validate.js.map +0 -1
- package/dist/os/core/handlers/profile-resolve.d.ts +0 -13
- package/dist/os/core/handlers/profile-resolve.d.ts.map +0 -1
- package/dist/os/core/handlers/profile-resolve.js +0 -65
- package/dist/os/core/handlers/profile-resolve.js.map +0 -1
- package/dist/os/core/handlers/release-prepare.d.ts +0 -25
- package/dist/os/core/handlers/release-prepare.d.ts.map +0 -1
- package/dist/os/core/handlers/release-prepare.js +0 -228
- package/dist/os/core/handlers/release-prepare.js.map +0 -1
- package/dist/os/core/handlers/release-publish.d.ts +0 -13
- package/dist/os/core/handlers/release-publish.d.ts.map +0 -1
- package/dist/os/core/handlers/release-publish.js +0 -173
- package/dist/os/core/handlers/release-publish.js.map +0 -1
- package/dist/os/core/handlers/validate.d.ts +0 -26
- package/dist/os/core/handlers/validate.d.ts.map +0 -1
- package/dist/os/core/handlers/validate.js +0 -208
- package/dist/os/core/handlers/validate.js.map +0 -1
- package/dist/os/core/index.d.ts +0 -2
- package/dist/os/core/index.d.ts.map +0 -1
- package/dist/os/core/index.js +0 -13
- package/dist/os/core/index.js.map +0 -1
- package/dist/os/exploration/exploration.module.d.ts +0 -3
- package/dist/os/exploration/exploration.module.d.ts.map +0 -1
- package/dist/os/exploration/exploration.module.js +0 -83
- package/dist/os/exploration/exploration.module.js.map +0 -1
- package/dist/os/exploration/frontmatter-io.d.ts +0 -13
- package/dist/os/exploration/frontmatter-io.d.ts.map +0 -1
- package/dist/os/exploration/frontmatter-io.js +0 -61
- package/dist/os/exploration/frontmatter-io.js.map +0 -1
- package/dist/os/exploration/handlers/archive.d.ts +0 -4
- package/dist/os/exploration/handlers/archive.d.ts.map +0 -1
- package/dist/os/exploration/handlers/archive.js +0 -141
- package/dist/os/exploration/handlers/archive.js.map +0 -1
- package/dist/os/exploration/handlers/list.d.ts +0 -4
- package/dist/os/exploration/handlers/list.d.ts.map +0 -1
- package/dist/os/exploration/handlers/list.js +0 -64
- package/dist/os/exploration/handlers/list.js.map +0 -1
- package/dist/os/exploration/handlers/show.d.ts +0 -4
- package/dist/os/exploration/handlers/show.d.ts.map +0 -1
- package/dist/os/exploration/handlers/show.js +0 -97
- package/dist/os/exploration/handlers/show.js.map +0 -1
- package/dist/os/exploration/index.d.ts +0 -7
- package/dist/os/exploration/index.d.ts.map +0 -1
- package/dist/os/exploration/index.js +0 -17
- package/dist/os/exploration/index.js.map +0 -1
- package/dist/os/exploration/types.d.ts +0 -38
- package/dist/os/exploration/types.d.ts.map +0 -1
- package/dist/os/exploration/types.js +0 -23
- package/dist/os/exploration/types.js.map +0 -1
- package/dist/os/mission/handlers/archive.d.ts +0 -4
- package/dist/os/mission/handlers/archive.d.ts.map +0 -1
- package/dist/os/mission/handlers/archive.js +0 -356
- package/dist/os/mission/handlers/archive.js.map +0 -1
- package/dist/os/mission/index.d.ts +0 -2
- package/dist/os/mission/index.d.ts.map +0 -1
- package/dist/os/mission/index.js +0 -2
- package/dist/os/mission/index.js.map +0 -1
- package/dist/os/mission/mission.module.d.ts +0 -3
- package/dist/os/mission/mission.module.d.ts.map +0 -1
- package/dist/os/mission/mission.module.js +0 -45
- package/dist/os/mission/mission.module.js.map +0 -1
- package/dist/os/mission/types.d.ts +0 -23
- package/dist/os/mission/types.d.ts.map +0 -1
- package/dist/os/mission/types.js +0 -18
- package/dist/os/mission/types.js.map +0 -1
- package/dist/os/naming/index.d.ts +0 -3
- package/dist/os/naming/index.d.ts.map +0 -1
- package/dist/os/naming/index.js +0 -14
- package/dist/os/naming/index.js.map +0 -1
- package/dist/os/naming/naming-convention.d.ts +0 -25
- package/dist/os/naming/naming-convention.d.ts.map +0 -1
- package/dist/os/naming/naming-convention.js +0 -324
- package/dist/os/naming/naming-convention.js.map +0 -1
- package/dist/os/naming/naming.module.d.ts +0 -3
- package/dist/os/naming/naming.module.d.ts.map +0 -1
- package/dist/os/naming/naming.module.js +0 -34
- package/dist/os/naming/naming.module.js.map +0 -1
- package/dist/os/notes/index.d.ts +0 -2
- package/dist/os/notes/index.d.ts.map +0 -1
- package/dist/os/notes/index.js +0 -10
- package/dist/os/notes/index.js.map +0 -1
- package/dist/os/notes/notes.module.d.ts +0 -3
- package/dist/os/notes/notes.module.d.ts.map +0 -1
- package/dist/os/notes/notes.module.js +0 -84
- package/dist/os/notes/notes.module.js.map +0 -1
- package/dist/os/plan/frontmatter-io.d.ts +0 -12
- package/dist/os/plan/frontmatter-io.d.ts.map +0 -1
- package/dist/os/plan/frontmatter-io.js +0 -69
- package/dist/os/plan/frontmatter-io.js.map +0 -1
- package/dist/os/plan/handlers/archive.d.ts +0 -4
- package/dist/os/plan/handlers/archive.d.ts.map +0 -1
- package/dist/os/plan/handlers/archive.js +0 -206
- package/dist/os/plan/handlers/archive.js.map +0 -1
- package/dist/os/plan/index.d.ts +0 -6
- package/dist/os/plan/index.d.ts.map +0 -1
- package/dist/os/plan/index.js +0 -16
- package/dist/os/plan/index.js.map +0 -1
- package/dist/os/plan/plan.module.d.ts +0 -3
- package/dist/os/plan/plan.module.d.ts.map +0 -1
- package/dist/os/plan/plan.module.js +0 -45
- package/dist/os/plan/plan.module.js.map +0 -1
- package/dist/os/plan/types.d.ts +0 -12
- package/dist/os/plan/types.d.ts.map +0 -1
- package/dist/os/plan/types.js +0 -17
- package/dist/os/plan/types.js.map +0 -1
- package/dist/os/plugin/plugin.module.d.ts +0 -25
- package/dist/os/plugin/plugin.module.d.ts.map +0 -1
- package/dist/os/plugin/plugin.module.js +0 -208
- package/dist/os/plugin/plugin.module.js.map +0 -1
- package/dist/os/program/discovery.d.ts +0 -61
- package/dist/os/program/discovery.d.ts.map +0 -1
- package/dist/os/program/discovery.js +0 -236
- package/dist/os/program/discovery.js.map +0 -1
- package/dist/os/program/handlers/complete.d.ts +0 -12
- package/dist/os/program/handlers/complete.d.ts.map +0 -1
- package/dist/os/program/handlers/complete.js +0 -362
- package/dist/os/program/handlers/complete.js.map +0 -1
- package/dist/os/program/handlers/lease.d.ts +0 -13
- package/dist/os/program/handlers/lease.d.ts.map +0 -1
- package/dist/os/program/handlers/lease.js +0 -328
- package/dist/os/program/handlers/lease.js.map +0 -1
- package/dist/os/program/handlers/seal.d.ts +0 -12
- package/dist/os/program/handlers/seal.d.ts.map +0 -1
- package/dist/os/program/handlers/seal.js +0 -277
- package/dist/os/program/handlers/seal.js.map +0 -1
- package/dist/os/program/handlers/validate.d.ts +0 -14
- package/dist/os/program/handlers/validate.d.ts.map +0 -1
- package/dist/os/program/handlers/validate.js +0 -170
- package/dist/os/program/handlers/validate.js.map +0 -1
- package/dist/os/program/lease.d.ts +0 -39
- package/dist/os/program/lease.d.ts.map +0 -1
- package/dist/os/program/lease.js +0 -129
- package/dist/os/program/lease.js.map +0 -1
- package/dist/os/program/program.module.d.ts +0 -3
- package/dist/os/program/program.module.d.ts.map +0 -1
- package/dist/os/program/program.module.js +0 -202
- package/dist/os/program/program.module.js.map +0 -1
- package/dist/os/program/schemas.d.ts +0 -225
- package/dist/os/program/schemas.d.ts.map +0 -1
- package/dist/os/program/schemas.js +0 -174
- package/dist/os/program/schemas.js.map +0 -1
- package/dist/os/program/state.d.ts +0 -38
- package/dist/os/program/state.d.ts.map +0 -1
- package/dist/os/program/state.js +0 -189
- package/dist/os/program/state.js.map +0 -1
- package/dist/os/rfc/acceptance.d.ts +0 -15
- package/dist/os/rfc/acceptance.d.ts.map +0 -1
- package/dist/os/rfc/acceptance.js +0 -318
- package/dist/os/rfc/acceptance.js.map +0 -1
- package/dist/os/rfc/decision-log.d.ts +0 -6
- package/dist/os/rfc/decision-log.d.ts.map +0 -1
- package/dist/os/rfc/decision-log.js +0 -269
- package/dist/os/rfc/decision-log.js.map +0 -1
- package/dist/os/rfc/dna-trace.d.ts +0 -27
- package/dist/os/rfc/dna-trace.d.ts.map +0 -1
- package/dist/os/rfc/dna-trace.js +0 -214
- package/dist/os/rfc/dna-trace.js.map +0 -1
- package/dist/os/rfc/frontmatter-io.d.ts +0 -18
- package/dist/os/rfc/frontmatter-io.d.ts.map +0 -1
- package/dist/os/rfc/frontmatter-io.js +0 -110
- package/dist/os/rfc/frontmatter-io.js.map +0 -1
- package/dist/os/rfc/handlers/archive.d.ts +0 -25
- package/dist/os/rfc/handlers/archive.d.ts.map +0 -1
- package/dist/os/rfc/handlers/archive.js +0 -247
- package/dist/os/rfc/handlers/archive.js.map +0 -1
- package/dist/os/rfc/handlers/check.d.ts +0 -4
- package/dist/os/rfc/handlers/check.d.ts.map +0 -1
- package/dist/os/rfc/handlers/check.js +0 -203
- package/dist/os/rfc/handlers/check.js.map +0 -1
- package/dist/os/rfc/handlers/implement-stamp.d.ts +0 -4
- package/dist/os/rfc/handlers/implement-stamp.d.ts.map +0 -1
- package/dist/os/rfc/handlers/implement-stamp.js +0 -426
- package/dist/os/rfc/handlers/implement-stamp.js.map +0 -1
- package/dist/os/rfc/handlers/index-graph.d.ts +0 -13
- package/dist/os/rfc/handlers/index-graph.d.ts.map +0 -1
- package/dist/os/rfc/handlers/index-graph.js +0 -192
- package/dist/os/rfc/handlers/index-graph.js.map +0 -1
- package/dist/os/rfc/handlers/lifecycle.d.ts +0 -13
- package/dist/os/rfc/handlers/lifecycle.d.ts.map +0 -1
- package/dist/os/rfc/handlers/lifecycle.js +0 -155
- package/dist/os/rfc/handlers/lifecycle.js.map +0 -1
- package/dist/os/rfc/handlers/list-create.d.ts +0 -6
- package/dist/os/rfc/handlers/list-create.d.ts.map +0 -1
- package/dist/os/rfc/handlers/list-create.js +0 -260
- package/dist/os/rfc/handlers/list-create.js.map +0 -1
- package/dist/os/rfc/handlers/pipeline-status.d.ts +0 -26
- package/dist/os/rfc/handlers/pipeline-status.d.ts.map +0 -1
- package/dist/os/rfc/handlers/pipeline-status.js +0 -124
- package/dist/os/rfc/handlers/pipeline-status.js.map +0 -1
- package/dist/os/rfc/handlers/shared.d.ts +0 -22
- package/dist/os/rfc/handlers/shared.d.ts.map +0 -1
- package/dist/os/rfc/handlers/shared.js +0 -105
- package/dist/os/rfc/handlers/shared.js.map +0 -1
- package/dist/os/rfc/handlers/supersede-propose.d.ts +0 -4
- package/dist/os/rfc/handlers/supersede-propose.d.ts.map +0 -1
- package/dist/os/rfc/handlers/supersede-propose.js +0 -203
- package/dist/os/rfc/handlers/supersede-propose.js.map +0 -1
- package/dist/os/rfc/handlers/validate-rules.d.ts +0 -32
- package/dist/os/rfc/handlers/validate-rules.d.ts.map +0 -1
- package/dist/os/rfc/handlers/validate-rules.js +0 -590
- package/dist/os/rfc/handlers/validate-rules.js.map +0 -1
- package/dist/os/rfc/handlers/validate.d.ts +0 -4
- package/dist/os/rfc/handlers/validate.d.ts.map +0 -1
- package/dist/os/rfc/handlers/validate.js +0 -122
- package/dist/os/rfc/handlers/validate.js.map +0 -1
- package/dist/os/rfc/handlers.d.ts +0 -7
- package/dist/os/rfc/handlers.d.ts.map +0 -1
- package/dist/os/rfc/handlers.js +0 -19
- package/dist/os/rfc/handlers.js.map +0 -1
- package/dist/os/rfc/index.d.ts +0 -18
- package/dist/os/rfc/index.d.ts.map +0 -1
- package/dist/os/rfc/index.js +0 -24
- package/dist/os/rfc/index.js.map +0 -1
- package/dist/os/rfc/rfc.module.d.ts +0 -3
- package/dist/os/rfc/rfc.module.d.ts.map +0 -1
- package/dist/os/rfc/rfc.module.js +0 -367
- package/dist/os/rfc/rfc.module.js.map +0 -1
- package/dist/os/rfc/types.d.ts +0 -483
- package/dist/os/rfc/types.d.ts.map +0 -1
- package/dist/os/rfc/types.js +0 -100
- package/dist/os/rfc/types.js.map +0 -1
- package/dist/os/rfc/verification-evidence.d.ts +0 -8
- package/dist/os/rfc/verification-evidence.d.ts.map +0 -1
- package/dist/os/rfc/verification-evidence.js +0 -184
- package/dist/os/rfc/verification-evidence.js.map +0 -1
- package/dist/os/session/atif-parser.d.ts +0 -29
- package/dist/os/session/atif-parser.d.ts.map +0 -1
- package/dist/os/session/atif-parser.js +0 -140
- package/dist/os/session/atif-parser.js.map +0 -1
- package/dist/os/session/frontmatter-io.d.ts +0 -31
- package/dist/os/session/frontmatter-io.d.ts.map +0 -1
- package/dist/os/session/frontmatter-io.js +0 -146
- package/dist/os/session/frontmatter-io.js.map +0 -1
- package/dist/os/session/handlers/archive.d.ts +0 -4
- package/dist/os/session/handlers/archive.d.ts.map +0 -1
- package/dist/os/session/handlers/archive.js +0 -241
- package/dist/os/session/handlers/archive.js.map +0 -1
- package/dist/os/session/handlers/list.d.ts +0 -4
- package/dist/os/session/handlers/list.d.ts.map +0 -1
- package/dist/os/session/handlers/list.js +0 -147
- package/dist/os/session/handlers/list.js.map +0 -1
- package/dist/os/session/handlers/save.d.ts +0 -6
- package/dist/os/session/handlers/save.d.ts.map +0 -1
- package/dist/os/session/handlers/save.js +0 -297
- package/dist/os/session/handlers/save.js.map +0 -1
- package/dist/os/session/handlers/validate.d.ts +0 -4
- package/dist/os/session/handlers/validate.d.ts.map +0 -1
- package/dist/os/session/handlers/validate.js +0 -224
- package/dist/os/session/handlers/validate.js.map +0 -1
- package/dist/os/session/index.d.ts +0 -9
- package/dist/os/session/index.d.ts.map +0 -1
- package/dist/os/session/index.js +0 -20
- package/dist/os/session/index.js.map +0 -1
- package/dist/os/session/session.module.d.ts +0 -3
- package/dist/os/session/session.module.d.ts.map +0 -1
- package/dist/os/session/session.module.js +0 -116
- package/dist/os/session/session.module.js.map +0 -1
- package/dist/os/session/types.d.ts +0 -131
- package/dist/os/session/types.d.ts.map +0 -1
- package/dist/os/session/types.js +0 -59
- package/dist/os/session/types.js.map +0 -1
- package/dist/os/spec/live-spec-list.d.ts +0 -4
- package/dist/os/spec/live-spec-list.d.ts.map +0 -1
- package/dist/os/spec/live-spec-list.js +0 -72
- package/dist/os/spec/live-spec-list.js.map +0 -1
- package/dist/os/spec/live-spec-merge.d.ts +0 -4
- package/dist/os/spec/live-spec-merge.d.ts.map +0 -1
- package/dist/os/spec/live-spec-merge.js +0 -345
- package/dist/os/spec/live-spec-merge.js.map +0 -1
- package/dist/os/spec/live-spec-show.d.ts +0 -4
- package/dist/os/spec/live-spec-show.d.ts.map +0 -1
- package/dist/os/spec/live-spec-show.js +0 -105
- package/dist/os/spec/live-spec-show.js.map +0 -1
- package/dist/os/spec/live-spec-types.d.ts +0 -71
- package/dist/os/spec/live-spec-types.d.ts.map +0 -1
- package/dist/os/spec/live-spec-types.js +0 -14
- package/dist/os/spec/live-spec-types.js.map +0 -1
- package/dist/os/spec/live-spec-validate.d.ts +0 -4
- package/dist/os/spec/live-spec-validate.d.ts.map +0 -1
- package/dist/os/spec/live-spec-validate.js +0 -140
- package/dist/os/spec/live-spec-validate.js.map +0 -1
- package/dist/os/spec/spec-materialize.d.ts +0 -21
- package/dist/os/spec/spec-materialize.d.ts.map +0 -1
- package/dist/os/spec/spec-materialize.js +0 -342
- package/dist/os/spec/spec-materialize.js.map +0 -1
- package/dist/os/spec/spec-schema.d.ts +0 -126
- package/dist/os/spec/spec-schema.d.ts.map +0 -1
- package/dist/os/spec/spec-schema.js +0 -118
- package/dist/os/spec/spec-schema.js.map +0 -1
- package/dist/os/spec/spec-status.d.ts +0 -33
- package/dist/os/spec/spec-status.d.ts.map +0 -1
- package/dist/os/spec/spec-status.js +0 -228
- package/dist/os/spec/spec-status.js.map +0 -1
- package/dist/os/spec/spec-validate.d.ts +0 -4
- package/dist/os/spec/spec-validate.d.ts.map +0 -1
- package/dist/os/spec/spec-validate.js +0 -435
- package/dist/os/spec/spec-validate.js.map +0 -1
- package/dist/os/spec/spec.module.d.ts +0 -3
- package/dist/os/spec/spec.module.d.ts.map +0 -1
- package/dist/os/spec/spec.module.js +0 -120
- package/dist/os/spec/spec.module.js.map +0 -1
- package/dist/os/werkstatt/handlers/lock.d.ts +0 -10
- package/dist/os/werkstatt/handlers/lock.d.ts.map +0 -1
- package/dist/os/werkstatt/handlers/lock.js +0 -153
- package/dist/os/werkstatt/handlers/lock.js.map +0 -1
- package/dist/os/werkstatt/handlers/schema.d.ts +0 -33
- package/dist/os/werkstatt/handlers/schema.d.ts.map +0 -1
- package/dist/os/werkstatt/handlers/schema.js +0 -42
- package/dist/os/werkstatt/handlers/schema.js.map +0 -1
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.d.ts +0 -15
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.d.ts.map +0 -1
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js +0 -152
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js.map +0 -1
- package/dist/os/werkstatt/handlers/werkstatt-lock-status.d.ts +0 -18
- package/dist/os/werkstatt/handlers/werkstatt-lock-status.d.ts.map +0 -1
- package/dist/os/werkstatt/handlers/werkstatt-lock-status.js +0 -51
- package/dist/os/werkstatt/handlers/werkstatt-lock-status.js.map +0 -1
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.d.ts +0 -11
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.d.ts.map +0 -1
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.js +0 -79
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.js.map +0 -1
- package/dist/os/werkstatt/handlers/workspace-deps.d.ts +0 -12
- package/dist/os/werkstatt/handlers/workspace-deps.d.ts.map +0 -1
- package/dist/os/werkstatt/handlers/workspace-deps.js +0 -42
- package/dist/os/werkstatt/handlers/workspace-deps.js.map +0 -1
- package/dist/os/werkstatt/index.d.ts +0 -7
- package/dist/os/werkstatt/index.d.ts.map +0 -1
- package/dist/os/werkstatt/index.js +0 -18
- package/dist/os/werkstatt/index.js.map +0 -1
- package/dist/os/werkstatt/werkstatt.module.d.ts +0 -3
- package/dist/os/werkstatt/werkstatt.module.d.ts.map +0 -1
- package/dist/os/werkstatt/werkstatt.module.js +0 -59
- package/dist/os/werkstatt/werkstatt.module.js.map +0 -1
- package/dist/os/workflow/handlers.d.ts +0 -12
- package/dist/os/workflow/handlers.d.ts.map +0 -1
- package/dist/os/workflow/handlers.js +0 -262
- package/dist/os/workflow/handlers.js.map +0 -1
- package/dist/os/workflow/index.d.ts +0 -4
- package/dist/os/workflow/index.d.ts.map +0 -1
- package/dist/os/workflow/index.js +0 -18
- package/dist/os/workflow/index.js.map +0 -1
- package/dist/os/workflow/types.d.ts +0 -69
- package/dist/os/workflow/types.d.ts.map +0 -1
- package/dist/os/workflow/types.js +0 -23
- package/dist/os/workflow/types.js.map +0 -1
- package/dist/os/workflow/workflow.module.d.ts +0 -3
- package/dist/os/workflow/workflow.module.d.ts.map +0 -1
- package/dist/os/workflow/workflow.module.js +0 -49
- package/dist/os/workflow/workflow.module.js.map +0 -1
- package/dist/src/cli-output.d.ts +0 -5
- package/dist/src/cli-output.d.ts.map +0 -1
- package/dist/src/cli-output.js +0 -53
- package/dist/src/cli-output.js.map +0 -1
- package/dist/src/compass/contract-registry.d.ts +0 -7
- package/dist/src/compass/contract-registry.d.ts.map +0 -1
- package/dist/src/compass/contract-registry.js +0 -93
- package/dist/src/compass/contract-registry.js.map +0 -1
- package/dist/src/compass/types.d.ts +0 -28
- package/dist/src/compass/types.d.ts.map +0 -1
- package/dist/src/compass/types.js +0 -14
- package/dist/src/compass/types.js.map +0 -1
- package/dist/src/config/forge-config.d.ts +0 -242
- package/dist/src/config/forge-config.d.ts.map +0 -1
- package/dist/src/config/forge-config.js +0 -363
- package/dist/src/config/forge-config.js.map +0 -1
- package/dist/src/forge-module.d.ts +0 -17
- package/dist/src/forge-module.d.ts.map +0 -1
- package/dist/src/forge-module.js +0 -16
- package/dist/src/forge-module.js.map +0 -1
- package/dist/src/index.d.ts +0 -39
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -59
- package/dist/src/index.js.map +0 -1
- package/dist/src/knowledge/budgets.d.ts +0 -38
- package/dist/src/knowledge/budgets.d.ts.map +0 -1
- package/dist/src/knowledge/budgets.js +0 -157
- package/dist/src/knowledge/budgets.js.map +0 -1
- package/dist/src/knowledge/compact.d.ts +0 -47
- package/dist/src/knowledge/compact.d.ts.map +0 -1
- package/dist/src/knowledge/compact.js +0 -320
- package/dist/src/knowledge/compact.js.map +0 -1
- package/dist/src/knowledge/index.d.ts +0 -7
- package/dist/src/knowledge/index.d.ts.map +0 -1
- package/dist/src/knowledge/index.js +0 -19
- package/dist/src/knowledge/index.js.map +0 -1
- package/dist/src/knowledge/parse.d.ts +0 -3
- package/dist/src/knowledge/parse.d.ts.map +0 -1
- package/dist/src/knowledge/parse.js +0 -205
- package/dist/src/knowledge/parse.js.map +0 -1
- package/dist/src/knowledge/promote.d.ts +0 -37
- package/dist/src/knowledge/promote.d.ts.map +0 -1
- package/dist/src/knowledge/promote.js +0 -120
- package/dist/src/knowledge/promote.js.map +0 -1
- package/dist/src/knowledge/schema.d.ts +0 -61
- package/dist/src/knowledge/schema.d.ts.map +0 -1
- package/dist/src/knowledge/schema.js +0 -64
- package/dist/src/knowledge/schema.js.map +0 -1
- package/dist/src/knowledge/serialize.d.ts +0 -3
- package/dist/src/knowledge/serialize.d.ts.map +0 -1
- package/dist/src/knowledge/serialize.js +0 -67
- package/dist/src/knowledge/serialize.js.map +0 -1
- package/dist/src/migration-adapters/git-utils.d.ts +0 -3
- package/dist/src/migration-adapters/git-utils.d.ts.map +0 -1
- package/dist/src/migration-adapters/git-utils.js +0 -64
- package/dist/src/migration-adapters/git-utils.js.map +0 -1
- package/dist/src/migration-adapters/ignored-files.d.ts +0 -12
- package/dist/src/migration-adapters/ignored-files.d.ts.map +0 -1
- package/dist/src/migration-adapters/ignored-files.js +0 -190
- package/dist/src/migration-adapters/ignored-files.js.map +0 -1
- package/dist/src/migration-adapters/index.d.ts +0 -8
- package/dist/src/migration-adapters/index.d.ts.map +0 -1
- package/dist/src/migration-adapters/index.js +0 -17
- package/dist/src/migration-adapters/index.js.map +0 -1
- package/dist/src/migration-adapters/node-typescript-pnpm/index.d.ts +0 -3
- package/dist/src/migration-adapters/node-typescript-pnpm/index.d.ts.map +0 -1
- package/dist/src/migration-adapters/node-typescript-pnpm/index.js +0 -141
- package/dist/src/migration-adapters/node-typescript-pnpm/index.js.map +0 -1
- package/dist/src/migration-adapters/phaser-pnpm/index.d.ts +0 -3
- package/dist/src/migration-adapters/phaser-pnpm/index.d.ts.map +0 -1
- package/dist/src/migration-adapters/phaser-pnpm/index.js +0 -142
- package/dist/src/migration-adapters/phaser-pnpm/index.js.map +0 -1
- package/dist/src/migration-adapters/registry.d.ts +0 -6
- package/dist/src/migration-adapters/registry.d.ts.map +0 -1
- package/dist/src/migration-adapters/registry.js +0 -55
- package/dist/src/migration-adapters/registry.js.map +0 -1
- package/dist/src/migration-adapters/types.d.ts +0 -35
- package/dist/src/migration-adapters/types.d.ts.map +0 -1
- package/dist/src/migration-adapters/types.js +0 -31
- package/dist/src/migration-adapters/types.js.map +0 -1
- package/dist/src/onboarding/agents-generate.d.ts +0 -31
- package/dist/src/onboarding/agents-generate.d.ts.map +0 -1
- package/dist/src/onboarding/agents-generate.js +0 -372
- package/dist/src/onboarding/agents-generate.js.map +0 -1
- package/dist/src/onboarding/create.d.ts +0 -12
- package/dist/src/onboarding/create.d.ts.map +0 -1
- package/dist/src/onboarding/create.js +0 -389
- package/dist/src/onboarding/create.js.map +0 -1
- package/dist/src/onboarding/doctor.d.ts +0 -45
- package/dist/src/onboarding/doctor.d.ts.map +0 -1
- package/dist/src/onboarding/doctor.js +0 -1190
- package/dist/src/onboarding/doctor.js.map +0 -1
- package/dist/src/onboarding/init.d.ts +0 -36
- package/dist/src/onboarding/init.d.ts.map +0 -1
- package/dist/src/onboarding/init.js +0 -362
- package/dist/src/onboarding/init.js.map +0 -1
- package/dist/src/onboarding/invariant-engine.d.ts +0 -17
- package/dist/src/onboarding/invariant-engine.d.ts.map +0 -1
- package/dist/src/onboarding/invariant-engine.js +0 -416
- package/dist/src/onboarding/invariant-engine.js.map +0 -1
- package/dist/src/onboarding/memory-scaffold.d.ts +0 -18
- package/dist/src/onboarding/memory-scaffold.d.ts.map +0 -1
- package/dist/src/onboarding/memory-scaffold.js +0 -151
- package/dist/src/onboarding/memory-scaffold.js.map +0 -1
- package/dist/src/onboarding/nested-agents-generate.d.ts +0 -18
- package/dist/src/onboarding/nested-agents-generate.d.ts.map +0 -1
- package/dist/src/onboarding/nested-agents-generate.js +0 -69
- package/dist/src/onboarding/nested-agents-generate.js.map +0 -1
- package/dist/src/onboarding/nested-agents-templates.d.ts +0 -26
- package/dist/src/onboarding/nested-agents-templates.d.ts.map +0 -1
- package/dist/src/onboarding/nested-agents-templates.js +0 -178
- package/dist/src/onboarding/nested-agents-templates.js.map +0 -1
- package/dist/src/onboarding/profile-validate.d.ts +0 -13
- package/dist/src/onboarding/profile-validate.d.ts.map +0 -1
- package/dist/src/onboarding/profile-validate.js +0 -109
- package/dist/src/onboarding/profile-validate.js.map +0 -1
- package/dist/src/onboarding/scaffold-project.d.ts +0 -12
- package/dist/src/onboarding/scaffold-project.d.ts.map +0 -1
- package/dist/src/onboarding/scaffold-project.js +0 -264
- package/dist/src/onboarding/scaffold-project.js.map +0 -1
- package/dist/src/onboarding/scaffold.d.ts +0 -15
- package/dist/src/onboarding/scaffold.d.ts.map +0 -1
- package/dist/src/onboarding/scaffold.js +0 -121
- package/dist/src/onboarding/scaffold.js.map +0 -1
- package/dist/src/onboarding/upgrade.d.ts +0 -27
- package/dist/src/onboarding/upgrade.d.ts.map +0 -1
- package/dist/src/onboarding/upgrade.js +0 -453
- package/dist/src/onboarding/upgrade.js.map +0 -1
- package/dist/src/onboarding/workspace-discovery.d.ts +0 -11
- package/dist/src/onboarding/workspace-discovery.d.ts.map +0 -1
- package/dist/src/onboarding/workspace-discovery.js +0 -138
- package/dist/src/onboarding/workspace-discovery.js.map +0 -1
- package/dist/src/plugin/ForgePluginManifest.d.ts +0 -38
- package/dist/src/plugin/ForgePluginManifest.d.ts.map +0 -1
- package/dist/src/plugin/ForgePluginManifest.js +0 -52
- package/dist/src/plugin/ForgePluginManifest.js.map +0 -1
- package/dist/src/profiles/profile-schema.d.ts +0 -361
- package/dist/src/profiles/profile-schema.d.ts.map +0 -1
- package/dist/src/profiles/profile-schema.js +0 -208
- package/dist/src/profiles/profile-schema.js.map +0 -1
- package/dist/src/profiles/stack-profile.d.ts +0 -173
- package/dist/src/profiles/stack-profile.d.ts.map +0 -1
- package/dist/src/profiles/stack-profile.js +0 -148
- package/dist/src/profiles/stack-profile.js.map +0 -1
- package/dist/src/profiles/terminology-utils.d.ts +0 -8
- package/dist/src/profiles/terminology-utils.d.ts.map +0 -1
- package/dist/src/profiles/terminology-utils.js +0 -31
- package/dist/src/profiles/terminology-utils.js.map +0 -1
- package/dist/src/registry.d.ts +0 -38
- package/dist/src/registry.d.ts.map +0 -1
- package/dist/src/registry.js +0 -174
- package/dist/src/registry.js.map +0 -1
- package/dist/src/skill-schema.d.ts +0 -30
- package/dist/src/skill-schema.d.ts.map +0 -1
- package/dist/src/skill-schema.js +0 -34
- package/dist/src/skill-schema.js.map +0 -1
- package/dist/src/types.d.ts +0 -154
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -17
- package/dist/src/types.js.map +0 -1
- package/dist/src/utils/fs-atomic.d.ts +0 -7
- package/dist/src/utils/fs-atomic.d.ts.map +0 -1
- package/dist/src/utils/fs-atomic.js +0 -81
- package/dist/src/utils/fs-atomic.js.map +0 -1
- package/dist/src/utils/fs-idempotent.d.ts +0 -2
- package/dist/src/utils/fs-idempotent.d.ts.map +0 -1
- package/dist/src/utils/fs-idempotent.js +0 -39
- package/dist/src/utils/fs-idempotent.js.map +0 -1
- package/dist/src/utils/fs-trash-sync.d.ts +0 -2
- package/dist/src/utils/fs-trash-sync.d.ts.map +0 -1
- package/dist/src/utils/fs-trash-sync.js +0 -34
- package/dist/src/utils/fs-trash-sync.js.map +0 -1
- package/dist/src/utils/fs-trash.d.ts +0 -2
- package/dist/src/utils/fs-trash.d.ts.map +0 -1
- package/dist/src/utils/fs-trash.js +0 -24
- package/dist/src/utils/fs-trash.js.map +0 -1
- package/dist/src/utils/fs.d.ts +0 -8
- package/dist/src/utils/fs.d.ts.map +0 -1
- package/dist/src/utils/fs.js +0 -60
- package/dist/src/utils/fs.js.map +0 -1
- package/dist/src/utils/generated-marker.d.ts +0 -21
- package/dist/src/utils/generated-marker.d.ts.map +0 -1
- package/dist/src/utils/generated-marker.js +0 -128
- package/dist/src/utils/generated-marker.js.map +0 -1
- package/dist/src/utils/hash.d.ts +0 -2
- package/dist/src/utils/hash.d.ts.map +0 -1
- package/dist/src/utils/hash.js +0 -18
- package/dist/src/utils/hash.js.map +0 -1
- package/dist/src/utils/index.d.ts +0 -9
- package/dist/src/utils/index.d.ts.map +0 -1
- package/dist/src/utils/index.js +0 -21
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/utils/string-utils.d.ts +0 -2
- package/dist/src/utils/string-utils.d.ts.map +0 -1
- package/dist/src/utils/string-utils.js +0 -19
- package/dist/src/utils/string-utils.js.map +0 -1
- package/dist/src/validators/note-frontmatter-validate.d.ts +0 -20
- package/dist/src/validators/note-frontmatter-validate.d.ts.map +0 -1
- package/dist/src/validators/note-frontmatter-validate.js +0 -117
- package/dist/src/validators/note-frontmatter-validate.js.map +0 -1
- package/dist/src/validators/note-link-validate.d.ts +0 -21
- package/dist/src/validators/note-link-validate.d.ts.map +0 -1
- package/dist/src/validators/note-link-validate.js +0 -121
- package/dist/src/validators/note-link-validate.js.map +0 -1
- package/dist/src/validators/note-orphan-detect.d.ts +0 -19
- package/dist/src/validators/note-orphan-detect.d.ts.map +0 -1
- package/dist/src/validators/note-orphan-detect.js +0 -123
- package/dist/src/validators/note-orphan-detect.js.map +0 -1
- package/dist/src/validators/port-validate.d.ts +0 -12
- package/dist/src/validators/port-validate.d.ts.map +0 -1
- package/dist/src/validators/port-validate.js +0 -78
- package/dist/src/validators/port-validate.js.map +0 -1
- package/dist/src/validators/skill-validate.d.ts +0 -29
- package/dist/src/validators/skill-validate.d.ts.map +0 -1
- package/dist/src/validators/skill-validate.js +0 -689
- package/dist/src/validators/skill-validate.js.map +0 -1
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ Replace `[describe your project]` with your idea — a game, a library, a knowle
|
|
|
20
20
|
|
|
21
21
|
## What you can build with Forge
|
|
22
22
|
|
|
23
|
-
Forge supports
|
|
23
|
+
Forge supports five kinds of projects. You pick one when you start — everything else is automatic.
|
|
24
24
|
|
|
25
25
|
| Project type | What it is | Example ideas |
|
|
26
26
|
| --- | --- | --- |
|
|
@@ -28,6 +28,7 @@ Forge supports four kinds of projects. You pick one when you start — everythin
|
|
|
28
28
|
| **Governance / library** | A code library or governance-only project — no website, no game, no video, just structure and documentation | npm package, internal toolkit, documentation hub |
|
|
29
29
|
| **Godot game** | A desktop or mobile game built with Godot 4.x and C# — 2D, 3D, platformer, RPG | Top-down adventure, 3D platformer, puzzle game |
|
|
30
30
|
| **Knowledge system** | An evidence-backed knowledge base — structured datasets where claims are backed by registered source provenance | Game knowledge base, domain ontology, curated reference dataset |
|
|
31
|
+
| **TypeScript library** | A generic TypeScript monorepo with best-practice validators — tsconfig, import boundaries, phantom deps, package exports, strict mode, barrel safety | Internal toolkit, shared library, TypeScript monorepo |
|
|
31
32
|
|
|
32
33
|
Each project type gets its own scaffold: the right folder structure, the right dependencies, the right tools. You don't need to know what any of those are — Forge sets them up for you.
|
|
33
34
|
|
|
@@ -46,6 +47,7 @@ For full project lifecycle management — missions, releases, deployment, certif
|
|
|
46
47
|
| [`@warpgogol/werkstatt-phaser-game`](https://github.com/syrokomskyi/werkstatt-phaser-game) | Phaser game plugin — phaser validators, Vite build, deploy adapters | Browser game projects (`phaser-turborepo`) |
|
|
47
48
|
| [`@warpgogol/werkstatt-godot-game`](https://github.com/syrokomskyi/werkstatt-godot-game) | Godot plugin — scene validators, dotnet build, itch.io deploy, Godot skills | Godot game projects (`godot-csharp`) |
|
|
48
49
|
| [`@warpgogol/werkstatt-knowledge`](https://github.com/syrokomskyi/werkstatt-knowledge) | Knowledge plugin — source binding, canonical verification, extraction, materialization, release checks | Knowledge system projects (`knowledge-typescript-turborepo`) |
|
|
50
|
+
| [`@warpgogol/werkstatt-typescript`](https://github.com/syrokomskyi/werkstatt-typescript) | TypeScript plugin — tsconfig, import boundaries, phantom deps, package exports, strict mode, barrel validators | TypeScript TurboRepo projects (`typescript-turborepo`) |
|
|
49
51
|
|
|
50
52
|
### When you need these packages
|
|
51
53
|
|
|
@@ -65,6 +67,11 @@ pnpm add -D @warpgogol/werkstatt @warpgogol/werkstatt-godot-game
|
|
|
65
67
|
pnpm add -D @warpgogol/werkstatt @warpgogol/werkstatt-knowledge
|
|
66
68
|
```
|
|
67
69
|
|
|
70
|
+
```sh
|
|
71
|
+
# TypeScript TurboRepo project
|
|
72
|
+
pnpm add -D @warpgogol/werkstatt @warpgogol/werkstatt-typescript
|
|
73
|
+
```
|
|
74
|
+
|
|
68
75
|
> **Note for agents:** When scaffolding a new project with `forge create`, always install the engine and matching stack plugin after the scaffold completes. The `forge.yaml` bindings reference commands from these packages (e.g. `pnpm exec werkstatt run rfc.validate`), and they will fail if the packages are not installed.
|
|
69
76
|
|
|
70
77
|
---
|
|
@@ -217,6 +224,7 @@ You need to run one command in the terminal to create your project. After that,
|
|
|
217
224
|
| Browser game (2D, arcade, puzzle) | `--profile phaser-turborepo` |
|
|
218
225
|
| Godot game (desktop, mobile, 2D/3D) | `--profile godot-csharp` |
|
|
219
226
|
| Knowledge system (evidence-backed) | `--profile knowledge-typescript-turborepo` |
|
|
227
|
+
| TypeScript library (monorepo) | `--profile typescript-turborepo` |
|
|
220
228
|
| Library or governance-only project | `--profile forge-shell` |
|
|
221
229
|
|
|
222
230
|
2. **Open the project folder in your AI IDE.** Open the folder from step 1 in Windsurf or your preferred IDE.
|
|
@@ -297,6 +305,9 @@ pnpm dlx @warpgogol/forge@latest create --in-place --profile godot-csharp
|
|
|
297
305
|
mkdir my-knowledge-base && cd my-knowledge-base
|
|
298
306
|
pnpm dlx @warpgogol/forge@latest create --in-place --profile knowledge-typescript-turborepo
|
|
299
307
|
|
|
308
|
+
mkdir my-ts-project && cd my-ts-project
|
|
309
|
+
pnpm dlx @warpgogol/forge@latest create --in-place --profile typescript-turborepo
|
|
310
|
+
|
|
300
311
|
# Override the project name (derived from folder name by default)
|
|
301
312
|
pnpm dlx @warpgogol/forge@latest create --in-place --profile forge-shell --name my-custom-name
|
|
302
313
|
```
|
|
@@ -346,6 +357,7 @@ A stack profile defines the project scaffold: directory structure, dependencies,
|
|
|
346
357
|
| `phaser-turborepo` | Browser game | Phaser + TypeScript + pnpm + Turborepo | `games/my-game` | Browser games, interactive experiences |
|
|
347
358
|
| `godot-csharp` | Godot game | Godot 4.x + C# + pnpm + Turborepo | `games/my-game` | Desktop/mobile games, Godot-based interactive projects |
|
|
348
359
|
| `knowledge-typescript-turborepo` | Knowledge system | TypeScript + pnpm + Turborepo | `knowledge/my-kb` | Evidence-backed knowledge bases, structured datasets with source provenance |
|
|
360
|
+
| `typescript-turborepo` | TypeScript library | TypeScript + pnpm + Turborepo | — | Generic TypeScript TurboRepo monorepo with best-practice validators |
|
|
349
361
|
|
|
350
362
|
```sh
|
|
351
363
|
# List available profiles (after install)
|
package/README.uk.md
CHANGED
|
@@ -20,7 +20,7 @@ Install https://npmjs.com/package/@warpgogol/forge in this folder and set up my
|
|
|
20
20
|
|
|
21
21
|
## Що можна створити за допомогою Forge
|
|
22
22
|
|
|
23
|
-
Forge підтримує
|
|
23
|
+
Forge підтримує п'ять типів проєктів. Ви обираєте один на старті — все інше відбувається автоматично.
|
|
24
24
|
|
|
25
25
|
| Тип проєкту | Що це | Приклади |
|
|
26
26
|
| --- | --- | --- |
|
|
@@ -28,6 +28,7 @@ Forge підтримує чотири типи проєктів. Ви обира
|
|
|
28
28
|
| **Управління / бібліотека** | Бібліотека коду або проєкт лише з управлінською структурою — без сайту, без гри, без відео, лише структура та документація | npm-пакет, внутрішній інструмент, центр документації |
|
|
29
29
|
| **Гра Godot** | Десктопна або мобільна гра на Godot 4.x з C# — 2D, 3D, платформер, RPG | Пригода з виглядом зверху, 3D-платформер, головоломка |
|
|
30
30
|
| **Система знань** | База знань з підтримкою доказів — структуровані набори даних, де твердження підтверджені зареєстрованими джерелами | База знань гри, доменна онтологія, куратований довідковий набір даних |
|
|
31
|
+
| **Бібліотека TypeScript** | Універсальний TypeScript монорепозиторій з валідаторами найкращих практик — tsconfig, межі імпортів, фантомні залежності, експорти пакетів, strict mode, безпека barrel-експортів | Внутрішній інструмент, спільна бібліотека, TypeScript монорепозиторій |
|
|
31
32
|
|
|
32
33
|
Кожен тип проєкту отримує власний каркас: правильну структуру папок, правильні залежності, правильні інструменти. Вам не потрібно знати, що це таке — Forge налаштує все за вас.
|
|
33
34
|
|
|
@@ -46,6 +47,7 @@ Forge — це **шар управління**: навички, RFC/ADR робо
|
|
|
46
47
|
| [`@warpgogol/werkstatt-phaser-game`](https://github.com/syrokomskyi/werkstatt-phaser-game) | Плагін Phaser-гри — валідатори phaser, збірка Vite, адаптери розгортання | Проєкти браузерних ігор (`phaser-turborepo`) |
|
|
47
48
|
| [`@warpgogol/werkstatt-godot-game`](https://github.com/syrokomskyi/werkstatt-godot-game) | Плагін Godot — валідатори сцен, збірка dotnet, розгортання itch.io, навички Godot | Проєкти ігор Godot (`godot-csharp`) |
|
|
48
49
|
| [`@warpgogol/werkstatt-knowledge`](https://github.com/syrokomskyi/werkstatt-knowledge) | Плагін системи знань — прив'язка джерел, канонічна верифікація, екстракція, матеріалізація, перевірки релізу | Проєкти систем знань (`knowledge-typescript-turborepo`) |
|
|
50
|
+
| [`@warpgogol/werkstatt-typescript`](https://github.com/syrokomskyi/werkstatt-typescript) | Плагін TypeScript — tsconfig, межі імпортів, фантомні залежності, експорти пакетів, strict mode, barrel-валідатори | Проєкти TypeScript TurboRepo (`typescript-turborepo`) |
|
|
49
51
|
|
|
50
52
|
### Коли потрібні ці пакети
|
|
51
53
|
|
|
@@ -63,6 +65,9 @@ pnpm add -D @warpgogol/werkstatt @warpgogol/werkstatt-godot-game
|
|
|
63
65
|
|
|
64
66
|
# Проєкт системи знань
|
|
65
67
|
pnpm add -D @warpgogol/werkstatt @warpgogol/werkstatt-knowledge
|
|
68
|
+
|
|
69
|
+
# Проєкт TypeScript TurboRepo
|
|
70
|
+
pnpm add -D @warpgogol/werkstatt @warpgogol/werkstatt-typescript
|
|
66
71
|
```
|
|
67
72
|
|
|
68
73
|
> **Примітка для агентів:** Після створення проєкту командою `forge create` завжди встановлюйте рушій та відповідний плагін стеку. Прив'язки в `forge.yaml` посилаються на команди з цих пакунків (напр. `pnpm exec werkstatt run rfc.validate`), і вони не працюватимуть, якщо пакунки не встановлені.
|
|
@@ -343,6 +348,7 @@ pnpm exec forge skill.list
|
|
|
343
348
|
| `phaser-turborepo` | Браузерна гра | Phaser + TypeScript + pnpm + Turborepo | `games/my-game` | Браузерні ігри, інтерактивні досвіди |
|
|
344
349
|
| `godot-csharp` | Гра Godot | Godot 4.x + C# + pnpm + Turborepo | `games/my-game` | Десктопні/мобільні ігри, інтерактивні проєкти на Godot |
|
|
345
350
|
| `knowledge-typescript-turborepo` | Система знань | TypeScript + pnpm + Turborepo | `knowledge/my-kb` | Бази знань з підтримкою доказів, структуровані набори даних з джерельною простежуваністю |
|
|
351
|
+
| `typescript-turborepo` | Бібліотека TypeScript | TypeScript + pnpm + Turborepo | — | Універсальний TypeScript TurboRepo монорепозиторій з валідаторами найкращих практик |
|
|
346
352
|
|
|
347
353
|
```sh
|
|
348
354
|
# Список доступних профілів (після встановлення)
|
package/os/adr/adr.module.ts
CHANGED
|
@@ -87,6 +87,8 @@ export const forgeAdrModule: ForgeModule = {
|
|
|
87
87
|
|
|
88
88
|
registry.registerCommand({
|
|
89
89
|
name: "adr.validate",
|
|
90
|
+
contract: "adr",
|
|
91
|
+
rules: [],
|
|
90
92
|
description:
|
|
91
93
|
"Validate ADR frontmatter schema, required markdown sections, " +
|
|
92
94
|
"referential integrity (supersedes/supersededBy), and id/filename consistency. " +
|
|
@@ -62,6 +62,8 @@ export const forgeCompassModule: ForgeModule = {
|
|
|
62
62
|
});
|
|
63
63
|
registry.registerCommand({
|
|
64
64
|
name: "compass.validate",
|
|
65
|
+
contract: "compass",
|
|
66
|
+
rules: [],
|
|
65
67
|
description:
|
|
66
68
|
"Validate authored source files against current Compass scaffolding requirements.",
|
|
67
69
|
scope: "workspace",
|
|
@@ -77,6 +79,8 @@ export const forgeCompassModule: ForgeModule = {
|
|
|
77
79
|
});
|
|
78
80
|
registry.registerCommand({
|
|
79
81
|
name: "compass.changesummary.validate",
|
|
82
|
+
contract: "compass",
|
|
83
|
+
rules: [],
|
|
80
84
|
description:
|
|
81
85
|
"Validate CHANGE_SUMMARY blocks for boilerplate items and over-cap unprotected items (RFC-0349).",
|
|
82
86
|
scope: "workspace",
|
|
@@ -171,6 +175,8 @@ export const forgeCompassModule: ForgeModule = {
|
|
|
171
175
|
});
|
|
172
176
|
registry.registerCommand({
|
|
173
177
|
name: "compass.audit.validate",
|
|
178
|
+
contract: "compass",
|
|
179
|
+
rules: [],
|
|
174
180
|
description:
|
|
175
181
|
"Validate that no authored file is audit-overdue per the revision threshold (RFC-0352). Warns by default, fails with --strict.",
|
|
176
182
|
scope: "workspace",
|
package/os/core/core.module.ts
CHANGED
|
@@ -190,6 +190,8 @@ export const forgeCoreModule: ForgeModule = {
|
|
|
190
190
|
});
|
|
191
191
|
registry.registerCommand({
|
|
192
192
|
name: "forge.skill.validate",
|
|
193
|
+
contract: "forge",
|
|
194
|
+
rules: [],
|
|
193
195
|
description:
|
|
194
196
|
"Validate all forge skills against frontmatter contract and invariants SKILL-01..SKILL-20.",
|
|
195
197
|
scope: "workspace",
|
|
@@ -209,6 +211,8 @@ export const forgeCoreModule: ForgeModule = {
|
|
|
209
211
|
});
|
|
210
212
|
registry.registerCommand({
|
|
211
213
|
name: "forge.port.validate",
|
|
214
|
+
contract: "forge",
|
|
215
|
+
rules: [],
|
|
212
216
|
description: "Validate a single ported skill or command for compliance with forge contracts.",
|
|
213
217
|
scope: "workspace",
|
|
214
218
|
supportsAllSites: false,
|
|
@@ -296,7 +300,7 @@ export const forgeCoreModule: ForgeModule = {
|
|
|
296
300
|
kind: "string",
|
|
297
301
|
required: true,
|
|
298
302
|
description:
|
|
299
|
-
"Stack profile id. Required. Available: forge-shell, phaser-turborepo, godot-csharp.",
|
|
303
|
+
"Stack profile id. Required. Available: forge-shell, phaser-turborepo, godot-csharp, knowledge-typescript-turborepo, typescript-turborepo.",
|
|
300
304
|
},
|
|
301
305
|
name: {
|
|
302
306
|
kind: "string",
|
|
@@ -374,6 +378,8 @@ export const forgeCoreModule: ForgeModule = {
|
|
|
374
378
|
};
|
|
375
379
|
registry.registerCommand({
|
|
376
380
|
name: "forge.profile.validate",
|
|
381
|
+
contract: "forge",
|
|
382
|
+
rules: [],
|
|
377
383
|
description:
|
|
378
384
|
"Validate profile YAML files under packages/forge/profiles/ against the stack-profile schema (RFC-0640).",
|
|
379
385
|
scope: "workspace",
|
|
@@ -437,6 +443,8 @@ export const forgeCoreModule: ForgeModule = {
|
|
|
437
443
|
// ── forge.validate (RFC-0674, RFC-0677) ───────────────────────────────────
|
|
438
444
|
registry.registerCommand({
|
|
439
445
|
name: "forge.validate",
|
|
446
|
+
contract: "forge",
|
|
447
|
+
rules: [],
|
|
440
448
|
description:
|
|
441
449
|
"Execute validate commands for all artifacts declared in the active stack profile. Use --dry-run to print resolved commands. Use --artifact to validate a single artifact.",
|
|
442
450
|
scope: "workspace",
|
|
@@ -464,6 +472,8 @@ export const forgeCoreModule: ForgeModule = {
|
|
|
464
472
|
const { runDeterminismCheck } = await import("./handlers/determinism-check.ts");
|
|
465
473
|
registry.registerCommand({
|
|
466
474
|
name: "forge.determinism.check",
|
|
475
|
+
contract: "forge",
|
|
476
|
+
rules: [],
|
|
467
477
|
description:
|
|
468
478
|
"Verify artifact determinism by building twice and comparing output hashes. Reads determinism.inputs glob patterns from the active stack profile. Use --dry-run to print resolved inputs, --artifact to check a single artifact.",
|
|
469
479
|
scope: "workspace",
|
|
@@ -519,6 +529,8 @@ export const forgeCoreModule: ForgeModule = {
|
|
|
519
529
|
const { runAssetsCheck } = await import("./handlers/assets-check.ts");
|
|
520
530
|
registry.registerCommand({
|
|
521
531
|
name: "forge.assets.check",
|
|
532
|
+
contract: "forge",
|
|
533
|
+
rules: [],
|
|
522
534
|
description:
|
|
523
535
|
"Check for missing, orphaned, and unreferenced assets. Use --strict to fail on orphaned assets, --dry-run to skip hashing.",
|
|
524
536
|
scope: "workspace",
|
|
@@ -641,6 +653,8 @@ export const forgeCoreModule: ForgeModule = {
|
|
|
641
653
|
// ── pinned.validate ─────────────────────────────────────────────────────
|
|
642
654
|
registry.registerCommand({
|
|
643
655
|
name: "pinned.validate",
|
|
656
|
+
contract: "pinned",
|
|
657
|
+
rules: [],
|
|
644
658
|
description:
|
|
645
659
|
"Validate working tree against .forge/pinned.yaml manifest. " +
|
|
646
660
|
"Checks staged changes (default) or last commit (--mode ci) for " +
|
|
@@ -726,6 +740,8 @@ export const forgeCoreModule: ForgeModule = {
|
|
|
726
740
|
const { runForgeAutonomyValidate } = await import("./handlers/forge-autonomy-validate.ts");
|
|
727
741
|
registry.registerCommand({
|
|
728
742
|
name: "forge.autonomy.validate",
|
|
743
|
+
contract: "forge",
|
|
744
|
+
rules: [],
|
|
729
745
|
description:
|
|
730
746
|
"Scan packages/forge/os/** for forbidden @warpgogol/werkstatt-engine imports outside os/werkstatt/. " +
|
|
731
747
|
"Enforces FORGE-AUTONOMY-01 (RFC-0940, DNA-64). @warpgogol/werkstatt-shared is exempt. " +
|
|
@@ -20,6 +20,8 @@ export const forgeNamingModule: ForgeModule = {
|
|
|
20
20
|
const { runNamingConventionLint } = await import("./naming-convention.ts");
|
|
21
21
|
registry.registerCommand({
|
|
22
22
|
name: "naming.convention.lint",
|
|
23
|
+
contract: "naming",
|
|
24
|
+
rules: [],
|
|
23
25
|
description:
|
|
24
26
|
"Validate all filenames use kebab-case (no underscores) across registered workspace roots.",
|
|
25
27
|
scope: "workspace",
|
package/os/notes/notes.module.ts
CHANGED
|
@@ -50,6 +50,8 @@ export const forgeNotesModule: ForgeModule = {
|
|
|
50
50
|
|
|
51
51
|
registry.registerCommand({
|
|
52
52
|
name: "note.link.validate",
|
|
53
|
+
contract: "note",
|
|
54
|
+
rules: [],
|
|
53
55
|
description:
|
|
54
56
|
"Validate wikilink integrity across a markdown note vault. Scans [[wikilinks]] and resolves each against the note graph.",
|
|
55
57
|
scope: "workspace",
|
|
@@ -71,6 +73,8 @@ export const forgeNotesModule: ForgeModule = {
|
|
|
71
73
|
|
|
72
74
|
registry.registerCommand({
|
|
73
75
|
name: "note.frontmatter.validate",
|
|
76
|
+
contract: "note",
|
|
77
|
+
rules: [],
|
|
74
78
|
description:
|
|
75
79
|
"Validate frontmatter consistency across a markdown note vault. Checks for required fields in YAML frontmatter.",
|
|
76
80
|
scope: "workspace",
|
|
@@ -236,6 +236,8 @@ export const forgePluginModule: ForgeModule = {
|
|
|
236
236
|
async register(registry) {
|
|
237
237
|
registry.registerCommand({
|
|
238
238
|
name: "forge.plugin.validate",
|
|
239
|
+
contract: "forge",
|
|
240
|
+
rules: [],
|
|
239
241
|
description:
|
|
240
242
|
"Validate forge.plugin.yaml manifests for all declared skill packs (RFC-0941). Checks manifest schema (id: kebab-case, version: semver) and reports missing or invalid manifests.",
|
|
241
243
|
scope: "workspace",
|
|
@@ -26,6 +26,8 @@ export const forgeProgramModule: ForgeModule = {
|
|
|
26
26
|
|
|
27
27
|
registry.registerCommand({
|
|
28
28
|
name: "program.packet.validate",
|
|
29
|
+
contract: "program",
|
|
30
|
+
rules: [],
|
|
29
31
|
description:
|
|
30
32
|
"Validate a program packet against schema, source hashes, branch/head, " +
|
|
31
33
|
"and state machine rules. Read-only. " +
|
package/os/rfc/acceptance.ts
CHANGED
|
@@ -158,7 +158,7 @@ async function spawnSiteKernel(
|
|
|
158
158
|
.trim()
|
|
159
159
|
.split(/\s+/)
|
|
160
160
|
.filter(Boolean);
|
|
161
|
-
const binPath = path.join(workspaceRoot, "packages", "werkstatt", "bin", "werkstatt.mjs");
|
|
161
|
+
const binPath = path.join(workspaceRoot, "packages", "werkstatt-engine", "bin", "werkstatt.mjs");
|
|
162
162
|
|
|
163
163
|
return new Promise((resolve) => {
|
|
164
164
|
const child = spawn(process.execPath, [binPath, ...args], {
|
package/os/rfc/rfc.module.ts
CHANGED
|
@@ -114,6 +114,8 @@ export const forgeRfcModule: ForgeModule = {
|
|
|
114
114
|
// ── rfc.validate ─────────────────────────────────────────────────────────
|
|
115
115
|
registry.registerCommand({
|
|
116
116
|
name: "rfc.validate",
|
|
117
|
+
contract: "rfc",
|
|
118
|
+
rules: [],
|
|
117
119
|
description:
|
|
118
120
|
"Validate RFC frontmatter schema, required markdown sections, " +
|
|
119
121
|
"referential integrity (supersedes/supersededBy), date consistency, " +
|
|
@@ -130,6 +132,8 @@ export const forgeRfcModule: ForgeModule = {
|
|
|
130
132
|
// ── rfc.command-lifecycle.validate ───────────────────────────────────────
|
|
131
133
|
registry.registerCommand({
|
|
132
134
|
name: "rfc.command-lifecycle.validate",
|
|
135
|
+
contract: "rfc",
|
|
136
|
+
rules: [],
|
|
133
137
|
description:
|
|
134
138
|
"Validate RFC commands.proposed/added/changed/removed lifecycle metadata " +
|
|
135
139
|
"against live registered commands. Emits RFC-CMD-* diagnostics.",
|
|
@@ -145,6 +149,8 @@ export const forgeRfcModule: ForgeModule = {
|
|
|
145
149
|
// ── rfc.check ────────────────────────────────────────────────────────────
|
|
146
150
|
registry.registerCommand({
|
|
147
151
|
name: "rfc.check",
|
|
152
|
+
contract: "rfc",
|
|
153
|
+
rules: [],
|
|
148
154
|
description:
|
|
149
155
|
"Validate that artifacts declared by accepted/implemented RFCs exist on disk. " +
|
|
150
156
|
"Checks files from 'File system responsibilities' tables and feature flag references. " +
|
|
@@ -184,6 +190,8 @@ export const forgeRfcModule: ForgeModule = {
|
|
|
184
190
|
// ── rfc.index.validate ───────────────────────────────────────────────────
|
|
185
191
|
registry.registerCommand({
|
|
186
192
|
name: "rfc.index.validate",
|
|
193
|
+
contract: "rfc",
|
|
194
|
+
rules: [],
|
|
187
195
|
description:
|
|
188
196
|
"Validate that docs/rfcs/index.yaml exists, is parseable, and its entry count " +
|
|
189
197
|
"matches the number of RFC files on disk. Reports RFC-IDX-01 (missing), " +
|
|
@@ -254,6 +262,8 @@ export const forgeRfcModule: ForgeModule = {
|
|
|
254
262
|
// ── rfc.dna.trace.validate ───────────────────────────────────────────────
|
|
255
263
|
registry.registerCommand({
|
|
256
264
|
name: "rfc.dna.trace.validate",
|
|
265
|
+
contract: "rfc",
|
|
266
|
+
rules: [],
|
|
257
267
|
description:
|
|
258
268
|
"RFC-0331: validate the bidirectional DNA-trace matrix — which RFCs satisfy each DNA " +
|
|
259
269
|
"invariant and which invariants each RFC claims to satisfy. Reports DNA-TRACE-01 " +
|
|
@@ -80,6 +80,8 @@ export const forgeSessionModule: ForgeModule = {
|
|
|
80
80
|
|
|
81
81
|
registry.registerCommand({
|
|
82
82
|
name: "session.validate",
|
|
83
|
+
contract: "session",
|
|
84
|
+
rules: [],
|
|
83
85
|
description:
|
|
84
86
|
"Validate session frontmatter schema (SES-01), id-filename match (SES-02), " +
|
|
85
87
|
"RFC-id existence (SES-03), raw file hygiene (SES-04), and non-markdown " +
|
|
@@ -157,6 +157,50 @@ nonGoals: []
|
|
|
157
157
|
Content.
|
|
158
158
|
`;
|
|
159
159
|
|
|
160
|
+
const SAMPLE_RFC_9004 = `---
|
|
161
|
+
id: RFC-9004
|
|
162
|
+
title: "Second RFC with same headings"
|
|
163
|
+
status: implemented
|
|
164
|
+
kind: architecture
|
|
165
|
+
scope: workspace
|
|
166
|
+
owners:
|
|
167
|
+
- architecture
|
|
168
|
+
reviewers:
|
|
169
|
+
- human:test
|
|
170
|
+
createdAt: 2026-08-06
|
|
171
|
+
updatedAt: 2026-08-06
|
|
172
|
+
implementedAt: 2026-08-06
|
|
173
|
+
versionBump: patch
|
|
174
|
+
liveSpec: true
|
|
175
|
+
packagesImpacted:
|
|
176
|
+
- packages/forge
|
|
177
|
+
commands:
|
|
178
|
+
proposed: []
|
|
179
|
+
added: []
|
|
180
|
+
changed: []
|
|
181
|
+
removed: []
|
|
182
|
+
appsImpacted: []
|
|
183
|
+
successSignals: []
|
|
184
|
+
nonGoals: []
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
# RFC-9004: Second RFC with same headings
|
|
188
|
+
|
|
189
|
+
## Design
|
|
190
|
+
|
|
191
|
+
### CLI surface
|
|
192
|
+
|
|
193
|
+
Different CLI content from RFC-9004.
|
|
194
|
+
|
|
195
|
+
### TypeScript contracts
|
|
196
|
+
|
|
197
|
+
Different types from RFC-9004.
|
|
198
|
+
|
|
199
|
+
## Rollout
|
|
200
|
+
|
|
201
|
+
Some rollout.
|
|
202
|
+
`;
|
|
203
|
+
|
|
160
204
|
async function setupWorkspace(): Promise<string> {
|
|
161
205
|
const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "spec-live-test-"));
|
|
162
206
|
const rfcDir = path.join(tmpDir, "docs/rfcs");
|
|
@@ -164,6 +208,7 @@ async function setupWorkspace(): Promise<string> {
|
|
|
164
208
|
await fs.writeFile(path.join(rfcDir, "rfc-9001-test-rfc-for-living-specs.md"), SAMPLE_RFC);
|
|
165
209
|
await fs.writeFile(path.join(rfcDir, "rfc-9002-test-rfc-without-livespec.md"), SAMPLE_RFC_NO_LIVE_SPEC);
|
|
166
210
|
await fs.writeFile(path.join(rfcDir, "rfc-9003-rejected-rfc-with-livespec.md"), SAMPLE_RFC_REJECTED);
|
|
211
|
+
await fs.writeFile(path.join(rfcDir, "rfc-9004-second-rfc-with-same-headings.md"), SAMPLE_RFC_9004);
|
|
167
212
|
return tmpDir;
|
|
168
213
|
}
|
|
169
214
|
|
|
@@ -258,4 +303,35 @@ describe("spec.live.merge", () => {
|
|
|
258
303
|
expect(result.exitCode).toBe(1);
|
|
259
304
|
expect(result.summary).toContain("not found");
|
|
260
305
|
});
|
|
306
|
+
|
|
307
|
+
it("namespaces headings by RFC ID and allows multiple RFCs with same heading names", async () => {
|
|
308
|
+
// First merge creates the spec with RFC-9001 headings
|
|
309
|
+
const input1: ForgeCommandInput = { argv: [], flags: { id: "RFC-9001" } };
|
|
310
|
+
await runSpecLiveMerge(input1, makeContext(tmpDir));
|
|
311
|
+
|
|
312
|
+
// Second merge with RFC-9004 (same heading names) should NOT conflict
|
|
313
|
+
const input2: ForgeCommandInput = { argv: [], flags: { id: "RFC-9004" } };
|
|
314
|
+
const result = await runSpecLiveMerge(input2, makeContext(tmpDir));
|
|
315
|
+
|
|
316
|
+
expect(result.exitCode).toBe(0);
|
|
317
|
+
expect(result.data?.conflicts.length).toBe(0);
|
|
318
|
+
expect(result.data?.deltas.length).toBeGreaterThan(0);
|
|
319
|
+
|
|
320
|
+
const specFile = path.join(tmpDir, "docs/specs/live/forge.md");
|
|
321
|
+
const content = await fs.readFile(specFile, "utf-8");
|
|
322
|
+
expect(content).toContain("CLI surface (RFC-9001)");
|
|
323
|
+
expect(content).toContain("CLI surface (RFC-9004)");
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
it("re-merges namespaced headings without conflicts on subsequent docs.archive runs", async () => {
|
|
327
|
+
// Initial merges
|
|
328
|
+
await runSpecLiveMerge({ argv: [], flags: { id: "RFC-9001" } }, makeContext(tmpDir));
|
|
329
|
+
await runSpecLiveMerge({ argv: [], flags: { id: "RFC-9004" } }, makeContext(tmpDir));
|
|
330
|
+
|
|
331
|
+
// Re-merge RFC-9001 (simulates docs.archive re-running all merges)
|
|
332
|
+
const result = await runSpecLiveMerge({ argv: [], flags: { id: "RFC-9001" } }, makeContext(tmpDir));
|
|
333
|
+
|
|
334
|
+
expect(result.exitCode).toBe(0);
|
|
335
|
+
expect(result.data?.conflicts.length).toBe(0);
|
|
336
|
+
});
|
|
261
337
|
});
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
/*
|
|
2
2
|
<MODULE_CONTRACT>
|
|
3
3
|
<purpose>spec.live.merge handler — extracts deltas from an RFC's ## Design section,
|
|
4
|
-
classifies them as ADDED/MODIFIED/REMOVED, applies to a living spec
|
|
5
|
-
|
|
4
|
+
classifies them as ADDED/MODIFIED/REMOVED, applies to a living spec with RFC-namespaced
|
|
5
|
+
headings, and writes atomically (RFC-0711).</purpose>
|
|
6
6
|
<non-goals>
|
|
7
7
|
<item>Do not handle docs.archive integration — that is in core.module.ts.</item>
|
|
8
8
|
<item>Do not validate living specs — that is spec.live.validate.</item>
|
|
9
9
|
</non-goals>
|
|
10
10
|
</MODULE_CONTRACT>
|
|
11
11
|
<CHANGE_SUMMARY>
|
|
12
|
-
<item>RFC-0711: initial spec.live.merge handler with delta extraction, classification,
|
|
12
|
+
<item>RFC-0711: initial spec.live.merge handler with delta extraction, classification, and atomic writes.</item>
|
|
13
|
+
<item>RFC-0957: namespace headings by RFC ID, remove conflict detection (structurally impossible with namespacing).</item>
|
|
13
14
|
</CHANGE_SUMMARY>
|
|
14
15
|
*/
|
|
15
16
|
|
|
@@ -29,7 +30,6 @@ import type {
|
|
|
29
30
|
LivingSpec,
|
|
30
31
|
LivingSpecHistoryEntry,
|
|
31
32
|
DeltaOperation,
|
|
32
|
-
DeltaConflict,
|
|
33
33
|
SpecLiveMergeResult,
|
|
34
34
|
} from "./live-spec-types.ts";
|
|
35
35
|
|
|
@@ -162,6 +162,13 @@ function escapeRegex(str: string): string {
|
|
|
162
162
|
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
163
163
|
}
|
|
164
164
|
|
|
165
|
+
function namespaceHeadings(content: string, rfcId: string): string {
|
|
166
|
+
return content.replace(/^(#{3,})\s+(.+)$/gm, (_match, hashes: string, text: string) => {
|
|
167
|
+
if (/\(RFC-\d{4}\)$/.test(text)) return `${hashes} ${text}`;
|
|
168
|
+
return `${hashes} ${text} (${rfcId})`;
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
|
|
165
172
|
function findRfcFile(rfcDir: string, rfcId: string): Promise<string | null> {
|
|
166
173
|
return (async () => {
|
|
167
174
|
const files = await listRfcFiles(rfcDir);
|
|
@@ -252,8 +259,8 @@ export async function runSpecLiveMerge(
|
|
|
252
259
|
};
|
|
253
260
|
}
|
|
254
261
|
|
|
255
|
-
const
|
|
256
|
-
if (!
|
|
262
|
+
const rawDesignSection = extractDesignSection(parsed.body);
|
|
263
|
+
if (!rawDesignSection) {
|
|
257
264
|
return {
|
|
258
265
|
data: {
|
|
259
266
|
command: "spec.live.merge",
|
|
@@ -268,6 +275,7 @@ export async function runSpecLiveMerge(
|
|
|
268
275
|
};
|
|
269
276
|
}
|
|
270
277
|
|
|
278
|
+
const designSection = namespaceHeadings(rawDesignSection, rfcId);
|
|
271
279
|
const rfcHeadings = parseHeadings(designSection);
|
|
272
280
|
const liveSpecsDir = path.join(workspaceRoot, LIVE_SPECS_DIR);
|
|
273
281
|
const specFilePath = path.join(liveSpecsDir, `${domain}.md`);
|
|
@@ -279,7 +287,6 @@ export async function runSpecLiveMerge(
|
|
|
279
287
|
}
|
|
280
288
|
|
|
281
289
|
const operations: DeltaOperation[] = [];
|
|
282
|
-
const conflicts: DeltaConflict[] = [];
|
|
283
290
|
const today = new Date().toISOString().slice(0, 10);
|
|
284
291
|
|
|
285
292
|
if (!existingSpec) {
|
|
@@ -329,54 +336,12 @@ export async function runSpecLiveMerge(
|
|
|
329
336
|
for (const heading of rfcHeadings) {
|
|
330
337
|
const existing = findHeadingInSpec(existingSpec, heading.text);
|
|
331
338
|
if (existing) {
|
|
332
|
-
let lastRfc: string | undefined;
|
|
333
|
-
for (let i = existingSpec.history.length - 1; i >= 0; i--) {
|
|
334
|
-
const entry = existingSpec.history[i]!;
|
|
335
|
-
if (entry.operation !== "removed") {
|
|
336
|
-
lastRfc = entry.rfc;
|
|
337
|
-
break;
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
if (lastRfc && lastRfc !== rfcId) {
|
|
341
|
-
conflicts.push({
|
|
342
|
-
heading: heading.text,
|
|
343
|
-
existingRfc: lastRfc,
|
|
344
|
-
newRfc: rfcId,
|
|
345
|
-
resolution: "pending",
|
|
346
|
-
});
|
|
347
|
-
}
|
|
348
339
|
operations.push({ type: "modified", heading: heading.text, rfc: rfcId });
|
|
349
340
|
} else {
|
|
350
341
|
operations.push({ type: "added", heading: heading.text, rfc: rfcId });
|
|
351
342
|
}
|
|
352
343
|
}
|
|
353
344
|
|
|
354
|
-
if (conflicts.length > 0) {
|
|
355
|
-
const result: SpecLiveMergeResult = {
|
|
356
|
-
command: "spec.live.merge",
|
|
357
|
-
domain,
|
|
358
|
-
operation: "modified",
|
|
359
|
-
deltas: operations,
|
|
360
|
-
conflicts,
|
|
361
|
-
dryRun,
|
|
362
|
-
};
|
|
363
|
-
|
|
364
|
-
if (outputFormat === "pretty") {
|
|
365
|
-
logger.error(
|
|
366
|
-
`spec.live.merge: ${conflicts.length} conflict(s) detected — merge aborted (all-or-nothing)`,
|
|
367
|
-
);
|
|
368
|
-
for (const c of conflicts) {
|
|
369
|
-
logger.error(` conflict: heading "${c.heading}" last modified by ${c.existingRfc}, now ${c.newRfc}`);
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
return {
|
|
374
|
-
data: result,
|
|
375
|
-
exitCode: 1,
|
|
376
|
-
summary: `spec.live.merge: ${conflicts.length} conflict(s) — merge aborted`,
|
|
377
|
-
};
|
|
378
|
-
}
|
|
379
|
-
|
|
380
345
|
const updatedBody = applyDeltasToSpecBody(existingSpec.body, rfcHeadings, operations);
|
|
381
346
|
|
|
382
347
|
const updatedSpec: LivingSpec = {
|
package/os/spec/spec.module.ts
CHANGED
|
@@ -29,6 +29,8 @@ export const forgeSpecModule: ForgeModule = {
|
|
|
29
29
|
|
|
30
30
|
registry.registerCommand({
|
|
31
31
|
name: "spec.validate",
|
|
32
|
+
contract: "spec",
|
|
33
|
+
rules: [],
|
|
32
34
|
description:
|
|
33
35
|
"Validate vendored spec packages under docs/specs/. " +
|
|
34
36
|
"Checks integrity (SHA-256), schema, dependency graph (acyclic), " +
|
|
@@ -123,6 +125,8 @@ export const forgeSpecModule: ForgeModule = {
|
|
|
123
125
|
|
|
124
126
|
registry.registerCommand({
|
|
125
127
|
name: "spec.live.validate",
|
|
128
|
+
contract: "spec",
|
|
129
|
+
rules: [],
|
|
126
130
|
description:
|
|
127
131
|
"Validate all living feature specs in docs/specs/live/. " +
|
|
128
132
|
"Checks V-LS-01 (frontmatter), V-LS-02 (domain/filename match), " +
|
|
@@ -51,6 +51,8 @@ export const forgeWerkstattModule: ForgeModule = {
|
|
|
51
51
|
});
|
|
52
52
|
registry.registerCommand({
|
|
53
53
|
name: "werkstatt.operation.validate",
|
|
54
|
+
contract: "werkstatt",
|
|
55
|
+
rules: [],
|
|
54
56
|
description:
|
|
55
57
|
"Validate that mutating Werkstatt commands use shared lock/idempotency/atomic-write helpers (RFC-0362).",
|
|
56
58
|
scope: "workspace",
|
|
@@ -22,6 +22,8 @@ export const forgeWorkflowModule: ForgeModule = {
|
|
|
22
22
|
await import("./handlers.ts");
|
|
23
23
|
registry.registerCommand({
|
|
24
24
|
name: "workflow.lint",
|
|
25
|
+
contract: "workflow",
|
|
26
|
+
rules: [],
|
|
25
27
|
description:
|
|
26
28
|
"Validate .agents/workflows AND .agents/workflows-amend markdown frontmatter, command references, " +
|
|
27
29
|
"and per-chain phase links (RFC-0075 + RFC-0136).",
|
package/package.json
CHANGED
|
@@ -81,7 +81,7 @@ prerequisites:
|
|
|
81
81
|
workspaceTypes:
|
|
82
82
|
- id: game
|
|
83
83
|
detect:
|
|
84
|
-
glob:
|
|
84
|
+
glob: project.godot
|
|
85
85
|
skills:
|
|
86
86
|
- godot-feature
|
|
87
87
|
- godot-scene-review
|
|
@@ -93,13 +93,13 @@ invariants:
|
|
|
93
93
|
check:
|
|
94
94
|
kind: filename-pattern
|
|
95
95
|
glob: "**/*.tscn"
|
|
96
|
-
pattern:
|
|
96
|
+
pattern: ^Scenes/
|
|
97
97
|
- id: GODOT-02
|
|
98
98
|
rule: The .godot/ directory must not be committed to git
|
|
99
99
|
severity: error
|
|
100
100
|
check:
|
|
101
101
|
kind: gitignore-entry
|
|
102
|
-
pattern:
|
|
102
|
+
pattern: .godot/
|
|
103
103
|
- id: GODOT-03
|
|
104
104
|
rule: No hardcoded API keys or secrets in C# source files
|
|
105
105
|
severity: error
|
|
@@ -111,7 +111,7 @@ invariants:
|
|
|
111
111
|
severity: warning
|
|
112
112
|
check:
|
|
113
113
|
kind: file-contains
|
|
114
|
-
glob:
|
|
114
|
+
glob: project.godot
|
|
115
115
|
pattern: ""
|
|
116
116
|
workspace:
|
|
117
117
|
dirs:
|