@warpgogol/forge 4.1.6 → 4.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -1
- package/CHANGELOG.md +33 -0
- package/CONTRIBUTING.md +36 -0
- package/README.md +129 -535
- package/README.uk.md +145 -554
- package/SECURITY.md +17 -0
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +296 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/os/adr/adr.module.d.ts +3 -0
- package/dist/os/adr/adr.module.d.ts.map +1 -0
- package/dist/os/adr/adr.module.js +153 -0
- package/dist/os/adr/adr.module.js.map +1 -0
- package/dist/os/adr/frontmatter-io.d.ts +12 -0
- package/dist/os/adr/frontmatter-io.d.ts.map +1 -0
- package/dist/os/adr/frontmatter-io.js +67 -0
- package/dist/os/adr/frontmatter-io.js.map +1 -0
- package/dist/os/adr/handlers/archive.d.ts +24 -0
- package/dist/os/adr/handlers/archive.d.ts.map +1 -0
- package/dist/os/adr/handlers/archive.js +194 -0
- package/dist/os/adr/handlers/archive.js.map +1 -0
- package/dist/os/adr/handlers/implement-stamp.d.ts +4 -0
- package/dist/os/adr/handlers/implement-stamp.d.ts.map +1 -0
- package/dist/os/adr/handlers/implement-stamp.js +264 -0
- package/dist/os/adr/handlers/implement-stamp.js.map +1 -0
- package/dist/os/adr/handlers/list-create.d.ts +5 -0
- package/dist/os/adr/handlers/list-create.d.ts.map +1 -0
- package/dist/os/adr/handlers/list-create.js +201 -0
- package/dist/os/adr/handlers/list-create.js.map +1 -0
- package/dist/os/adr/handlers/validate.d.ts +4 -0
- package/dist/os/adr/handlers/validate.d.ts.map +1 -0
- package/dist/os/adr/handlers/validate.js +304 -0
- package/dist/os/adr/handlers/validate.js.map +1 -0
- package/dist/os/adr/index.d.ts +8 -0
- package/dist/os/adr/index.d.ts.map +1 -0
- package/dist/os/adr/index.js +18 -0
- package/dist/os/adr/index.js.map +1 -0
- package/dist/os/adr/types.d.ts +81 -0
- package/dist/os/adr/types.d.ts.map +1 -0
- package/dist/os/adr/types.js +62 -0
- package/dist/os/adr/types.js.map +1 -0
- package/dist/os/audit/audit.module.d.ts +3 -0
- package/dist/os/audit/audit.module.d.ts.map +1 -0
- package/dist/os/audit/audit.module.js +50 -0
- package/dist/os/audit/audit.module.js.map +1 -0
- package/dist/os/audit/frontmatter-io.d.ts +12 -0
- package/dist/os/audit/frontmatter-io.d.ts.map +1 -0
- package/dist/os/audit/frontmatter-io.js +71 -0
- package/dist/os/audit/frontmatter-io.js.map +1 -0
- package/dist/os/audit/handlers/archive.d.ts +4 -0
- package/dist/os/audit/handlers/archive.d.ts.map +1 -0
- package/dist/os/audit/handlers/archive.js +207 -0
- package/dist/os/audit/handlers/archive.js.map +1 -0
- package/dist/os/audit/index.d.ts +6 -0
- package/dist/os/audit/index.d.ts.map +1 -0
- package/dist/os/audit/index.js +16 -0
- package/dist/os/audit/index.js.map +1 -0
- package/dist/os/audit/types.d.ts +12 -0
- package/dist/os/audit/types.d.ts.map +1 -0
- package/dist/os/audit/types.js +17 -0
- package/dist/os/audit/types.js.map +1 -0
- package/dist/os/compass/compass.module.d.ts +3 -0
- package/dist/os/compass/compass.module.d.ts.map +1 -0
- package/dist/os/compass/compass.module.js +191 -0
- package/dist/os/compass/compass.module.js.map +1 -0
- package/dist/os/compass/handlers/compass-audit-handler.d.ts +36 -0
- package/dist/os/compass/handlers/compass-audit-handler.d.ts.map +1 -0
- package/dist/os/compass/handlers/compass-audit-handler.js +260 -0
- package/dist/os/compass/handlers/compass-audit-handler.js.map +1 -0
- package/dist/os/compass/handlers/compass-change-summary-handler.d.ts +19 -0
- package/dist/os/compass/handlers/compass-change-summary-handler.d.ts.map +1 -0
- package/dist/os/compass/handlers/compass-change-summary-handler.js +222 -0
- package/dist/os/compass/handlers/compass-change-summary-handler.js.map +1 -0
- package/dist/os/compass/handlers/compass-inventory-handler.d.ts +28 -0
- package/dist/os/compass/handlers/compass-inventory-handler.d.ts.map +1 -0
- package/dist/os/compass/handlers/compass-inventory-handler.js +387 -0
- package/dist/os/compass/handlers/compass-inventory-handler.js.map +1 -0
- package/dist/os/compass/handlers/compass-inventory.d.ts +30 -0
- package/dist/os/compass/handlers/compass-inventory.d.ts.map +1 -0
- package/dist/os/compass/handlers/compass-inventory.js +472 -0
- package/dist/os/compass/handlers/compass-inventory.js.map +1 -0
- package/dist/os/compass/handlers/git-revision.d.ts +8 -0
- package/dist/os/compass/handlers/git-revision.d.ts.map +1 -0
- package/dist/os/compass/handlers/git-revision.js +99 -0
- package/dist/os/compass/handlers/git-revision.js.map +1 -0
- package/dist/os/compass/handlers/resolve-scan-root.d.ts +3 -0
- package/dist/os/compass/handlers/resolve-scan-root.d.ts.map +1 -0
- package/dist/os/compass/handlers/resolve-scan-root.js +57 -0
- package/dist/os/compass/handlers/resolve-scan-root.js.map +1 -0
- package/dist/os/compass/index.d.ts +8 -0
- package/dist/os/compass/index.d.ts.map +1 -0
- package/dist/os/compass/index.js +19 -0
- package/dist/os/compass/index.js.map +1 -0
- package/dist/os/core/core.module.d.ts +3 -0
- package/dist/os/core/core.module.d.ts.map +1 -0
- package/dist/os/core/core.module.js +855 -0
- package/dist/os/core/core.module.js.map +1 -0
- package/dist/os/core/handlers/assets-check.d.ts +19 -0
- package/dist/os/core/handlers/assets-check.d.ts.map +1 -0
- package/dist/os/core/handlers/assets-check.js +89 -0
- package/dist/os/core/handlers/assets-check.js.map +1 -0
- package/dist/os/core/handlers/assets-helpers.d.ts +28 -0
- package/dist/os/core/handlers/assets-helpers.d.ts.map +1 -0
- package/dist/os/core/handlers/assets-helpers.js +128 -0
- package/dist/os/core/handlers/assets-helpers.js.map +1 -0
- package/dist/os/core/handlers/assets-list.d.ts +9 -0
- package/dist/os/core/handlers/assets-list.d.ts.map +1 -0
- package/dist/os/core/handlers/assets-list.js +72 -0
- package/dist/os/core/handlers/assets-list.js.map +1 -0
- package/dist/os/core/handlers/build.d.ts +16 -0
- package/dist/os/core/handlers/build.d.ts.map +1 -0
- package/dist/os/core/handlers/build.js +123 -0
- package/dist/os/core/handlers/build.js.map +1 -0
- package/dist/os/core/handlers/determinism-check.d.ts +20 -0
- package/dist/os/core/handlers/determinism-check.d.ts.map +1 -0
- package/dist/os/core/handlers/determinism-check.js +289 -0
- package/dist/os/core/handlers/determinism-check.js.map +1 -0
- package/dist/os/core/handlers/dev.d.ts +10 -0
- package/dist/os/core/handlers/dev.d.ts.map +1 -0
- package/dist/os/core/handlers/dev.js +102 -0
- package/dist/os/core/handlers/dev.js.map +1 -0
- package/dist/os/core/handlers/forge-autonomy-validate.d.ts +18 -0
- package/dist/os/core/handlers/forge-autonomy-validate.d.ts.map +1 -0
- package/dist/os/core/handlers/forge-autonomy-validate.js +115 -0
- package/dist/os/core/handlers/forge-autonomy-validate.js.map +1 -0
- package/dist/os/core/handlers/knowledge-compact.d.ts +4 -0
- package/dist/os/core/handlers/knowledge-compact.d.ts.map +1 -0
- package/dist/os/core/handlers/knowledge-compact.js +204 -0
- package/dist/os/core/handlers/knowledge-compact.js.map +1 -0
- package/dist/os/core/handlers/package-health.d.ts +17 -0
- package/dist/os/core/handlers/package-health.d.ts.map +1 -0
- package/dist/os/core/handlers/package-health.js +217 -0
- package/dist/os/core/handlers/package-health.js.map +1 -0
- package/dist/os/core/handlers/pinned-check.d.ts +49 -0
- package/dist/os/core/handlers/pinned-check.d.ts.map +1 -0
- package/dist/os/core/handlers/pinned-check.js +159 -0
- package/dist/os/core/handlers/pinned-check.js.map +1 -0
- package/dist/os/core/handlers/pinned-init.d.ts +19 -0
- package/dist/os/core/handlers/pinned-init.d.ts.map +1 -0
- package/dist/os/core/handlers/pinned-init.js +283 -0
- package/dist/os/core/handlers/pinned-init.js.map +1 -0
- package/dist/os/core/handlers/pinned-types.d.ts +29 -0
- package/dist/os/core/handlers/pinned-types.d.ts.map +1 -0
- package/dist/os/core/handlers/pinned-types.js +16 -0
- package/dist/os/core/handlers/pinned-types.js.map +1 -0
- package/dist/os/core/handlers/pinned-validate.d.ts +4 -0
- package/dist/os/core/handlers/pinned-validate.d.ts.map +1 -0
- package/dist/os/core/handlers/pinned-validate.js +248 -0
- package/dist/os/core/handlers/pinned-validate.js.map +1 -0
- package/dist/os/core/handlers/profile-resolve.d.ts +13 -0
- package/dist/os/core/handlers/profile-resolve.d.ts.map +1 -0
- package/dist/os/core/handlers/profile-resolve.js +65 -0
- package/dist/os/core/handlers/profile-resolve.js.map +1 -0
- package/dist/os/core/handlers/public-surface.d.ts +13 -0
- package/dist/os/core/handlers/public-surface.d.ts.map +1 -0
- package/dist/os/core/handlers/public-surface.js +148 -0
- package/dist/os/core/handlers/public-surface.js.map +1 -0
- package/dist/os/core/handlers/release-prepare.d.ts +25 -0
- package/dist/os/core/handlers/release-prepare.d.ts.map +1 -0
- package/dist/os/core/handlers/release-prepare.js +228 -0
- package/dist/os/core/handlers/release-prepare.js.map +1 -0
- package/dist/os/core/handlers/release-publish.d.ts +13 -0
- package/dist/os/core/handlers/release-publish.d.ts.map +1 -0
- package/dist/os/core/handlers/release-publish.js +173 -0
- package/dist/os/core/handlers/release-publish.js.map +1 -0
- package/dist/os/core/handlers/validate.d.ts +39 -0
- package/dist/os/core/handlers/validate.d.ts.map +1 -0
- package/dist/os/core/handlers/validate.js +241 -0
- package/dist/os/core/handlers/validate.js.map +1 -0
- package/dist/os/core/index.d.ts +2 -0
- package/dist/os/core/index.d.ts.map +1 -0
- package/dist/os/core/index.js +13 -0
- package/dist/os/core/index.js.map +1 -0
- package/dist/os/exploration/exploration.module.d.ts +3 -0
- package/dist/os/exploration/exploration.module.d.ts.map +1 -0
- package/dist/os/exploration/exploration.module.js +88 -0
- package/dist/os/exploration/exploration.module.js.map +1 -0
- package/dist/os/exploration/frontmatter-io.d.ts +13 -0
- package/dist/os/exploration/frontmatter-io.d.ts.map +1 -0
- package/dist/os/exploration/frontmatter-io.js +61 -0
- package/dist/os/exploration/frontmatter-io.js.map +1 -0
- package/dist/os/exploration/handlers/archive.d.ts +4 -0
- package/dist/os/exploration/handlers/archive.d.ts.map +1 -0
- package/dist/os/exploration/handlers/archive.js +141 -0
- package/dist/os/exploration/handlers/archive.js.map +1 -0
- package/dist/os/exploration/handlers/list.d.ts +4 -0
- package/dist/os/exploration/handlers/list.d.ts.map +1 -0
- package/dist/os/exploration/handlers/list.js +64 -0
- package/dist/os/exploration/handlers/list.js.map +1 -0
- package/dist/os/exploration/handlers/show.d.ts +4 -0
- package/dist/os/exploration/handlers/show.d.ts.map +1 -0
- package/dist/os/exploration/handlers/show.js +97 -0
- package/dist/os/exploration/handlers/show.js.map +1 -0
- package/dist/os/exploration/index.d.ts +7 -0
- package/dist/os/exploration/index.d.ts.map +1 -0
- package/dist/os/exploration/index.js +17 -0
- package/dist/os/exploration/index.js.map +1 -0
- package/dist/os/exploration/types.d.ts +38 -0
- package/dist/os/exploration/types.d.ts.map +1 -0
- package/dist/os/exploration/types.js +23 -0
- package/dist/os/exploration/types.js.map +1 -0
- package/dist/os/mission/handlers/archive.d.ts +4 -0
- package/dist/os/mission/handlers/archive.d.ts.map +1 -0
- package/dist/os/mission/handlers/archive.js +454 -0
- package/dist/os/mission/handlers/archive.js.map +1 -0
- package/dist/os/mission/index.d.ts +2 -0
- package/dist/os/mission/index.d.ts.map +1 -0
- package/dist/os/mission/index.js +2 -0
- package/dist/os/mission/index.js.map +1 -0
- package/dist/os/mission/mission.module.d.ts +3 -0
- package/dist/os/mission/mission.module.d.ts.map +1 -0
- package/dist/os/mission/mission.module.js +55 -0
- package/dist/os/mission/mission.module.js.map +1 -0
- package/dist/os/mission/types.d.ts +23 -0
- package/dist/os/mission/types.d.ts.map +1 -0
- package/dist/os/mission/types.js +19 -0
- package/dist/os/mission/types.js.map +1 -0
- package/dist/os/naming/index.d.ts +3 -0
- package/dist/os/naming/index.d.ts.map +1 -0
- package/dist/os/naming/index.js +14 -0
- package/dist/os/naming/index.js.map +1 -0
- package/dist/os/naming/naming-convention.d.ts +25 -0
- package/dist/os/naming/naming-convention.d.ts.map +1 -0
- package/dist/os/naming/naming-convention.js +334 -0
- package/dist/os/naming/naming-convention.js.map +1 -0
- package/dist/os/naming/naming.module.d.ts +3 -0
- package/dist/os/naming/naming.module.d.ts.map +1 -0
- package/dist/os/naming/naming.module.js +41 -0
- package/dist/os/naming/naming.module.js.map +1 -0
- package/dist/os/notes/index.d.ts +2 -0
- package/dist/os/notes/index.d.ts.map +1 -0
- package/dist/os/notes/index.js +10 -0
- package/dist/os/notes/index.js.map +1 -0
- package/dist/os/notes/notes.module.d.ts +3 -0
- package/dist/os/notes/notes.module.d.ts.map +1 -0
- package/dist/os/notes/notes.module.js +93 -0
- package/dist/os/notes/notes.module.js.map +1 -0
- package/dist/os/plan/frontmatter-io.d.ts +12 -0
- package/dist/os/plan/frontmatter-io.d.ts.map +1 -0
- package/dist/os/plan/frontmatter-io.js +69 -0
- package/dist/os/plan/frontmatter-io.js.map +1 -0
- package/dist/os/plan/handlers/archive.d.ts +4 -0
- package/dist/os/plan/handlers/archive.d.ts.map +1 -0
- package/dist/os/plan/handlers/archive.js +206 -0
- package/dist/os/plan/handlers/archive.js.map +1 -0
- package/dist/os/plan/index.d.ts +6 -0
- package/dist/os/plan/index.d.ts.map +1 -0
- package/dist/os/plan/index.js +16 -0
- package/dist/os/plan/index.js.map +1 -0
- package/dist/os/plan/plan.module.d.ts +3 -0
- package/dist/os/plan/plan.module.d.ts.map +1 -0
- package/dist/os/plan/plan.module.js +50 -0
- package/dist/os/plan/plan.module.js.map +1 -0
- package/dist/os/plan/types.d.ts +12 -0
- package/dist/os/plan/types.d.ts.map +1 -0
- package/dist/os/plan/types.js +17 -0
- package/dist/os/plan/types.js.map +1 -0
- package/dist/os/plugin/plugin.module.d.ts +25 -0
- package/dist/os/plugin/plugin.module.d.ts.map +1 -0
- package/dist/os/plugin/plugin.module.js +212 -0
- package/dist/os/plugin/plugin.module.js.map +1 -0
- package/dist/os/program/discovery.d.ts +61 -0
- package/dist/os/program/discovery.d.ts.map +1 -0
- package/dist/os/program/discovery.js +236 -0
- package/dist/os/program/discovery.js.map +1 -0
- package/dist/os/program/handlers/complete.d.ts +12 -0
- package/dist/os/program/handlers/complete.d.ts.map +1 -0
- package/dist/os/program/handlers/complete.js +362 -0
- package/dist/os/program/handlers/complete.js.map +1 -0
- package/dist/os/program/handlers/lease.d.ts +13 -0
- package/dist/os/program/handlers/lease.d.ts.map +1 -0
- package/dist/os/program/handlers/lease.js +328 -0
- package/dist/os/program/handlers/lease.js.map +1 -0
- package/dist/os/program/handlers/seal.d.ts +12 -0
- package/dist/os/program/handlers/seal.d.ts.map +1 -0
- package/dist/os/program/handlers/seal.js +277 -0
- package/dist/os/program/handlers/seal.js.map +1 -0
- package/dist/os/program/handlers/validate.d.ts +14 -0
- package/dist/os/program/handlers/validate.d.ts.map +1 -0
- package/dist/os/program/handlers/validate.js +170 -0
- package/dist/os/program/handlers/validate.js.map +1 -0
- package/dist/os/program/lease.d.ts +39 -0
- package/dist/os/program/lease.d.ts.map +1 -0
- package/dist/os/program/lease.js +129 -0
- package/dist/os/program/lease.js.map +1 -0
- package/dist/os/program/program.module.d.ts +3 -0
- package/dist/os/program/program.module.d.ts.map +1 -0
- package/dist/os/program/program.module.js +209 -0
- package/dist/os/program/program.module.js.map +1 -0
- package/dist/os/program/schemas.d.ts +225 -0
- package/dist/os/program/schemas.d.ts.map +1 -0
- package/dist/os/program/schemas.js +174 -0
- package/dist/os/program/schemas.js.map +1 -0
- package/dist/os/program/state.d.ts +38 -0
- package/dist/os/program/state.d.ts.map +1 -0
- package/dist/os/program/state.js +189 -0
- package/dist/os/program/state.js.map +1 -0
- package/dist/os/rfc/acceptance.d.ts +15 -0
- package/dist/os/rfc/acceptance.d.ts.map +1 -0
- package/dist/os/rfc/acceptance.js +438 -0
- package/dist/os/rfc/acceptance.js.map +1 -0
- package/dist/os/rfc/decision-log.d.ts +6 -0
- package/dist/os/rfc/decision-log.d.ts.map +1 -0
- package/dist/os/rfc/decision-log.js +269 -0
- package/dist/os/rfc/decision-log.js.map +1 -0
- package/dist/os/rfc/dna-trace.d.ts +27 -0
- package/dist/os/rfc/dna-trace.d.ts.map +1 -0
- package/dist/os/rfc/dna-trace.js +214 -0
- package/dist/os/rfc/dna-trace.js.map +1 -0
- package/dist/os/rfc/frontmatter-io.d.ts +18 -0
- package/dist/os/rfc/frontmatter-io.d.ts.map +1 -0
- package/dist/os/rfc/frontmatter-io.js +110 -0
- package/dist/os/rfc/frontmatter-io.js.map +1 -0
- package/dist/os/rfc/handlers/archive.d.ts +25 -0
- package/dist/os/rfc/handlers/archive.d.ts.map +1 -0
- package/dist/os/rfc/handlers/archive.js +247 -0
- package/dist/os/rfc/handlers/archive.js.map +1 -0
- package/dist/os/rfc/handlers/check.d.ts +4 -0
- package/dist/os/rfc/handlers/check.d.ts.map +1 -0
- package/dist/os/rfc/handlers/check.js +203 -0
- package/dist/os/rfc/handlers/check.js.map +1 -0
- package/dist/os/rfc/handlers/implement-stamp.d.ts +4 -0
- package/dist/os/rfc/handlers/implement-stamp.d.ts.map +1 -0
- package/dist/os/rfc/handlers/implement-stamp.js +452 -0
- package/dist/os/rfc/handlers/implement-stamp.js.map +1 -0
- package/dist/os/rfc/handlers/index-graph.d.ts +13 -0
- package/dist/os/rfc/handlers/index-graph.d.ts.map +1 -0
- package/dist/os/rfc/handlers/index-graph.js +192 -0
- package/dist/os/rfc/handlers/index-graph.js.map +1 -0
- package/dist/os/rfc/handlers/lifecycle.d.ts +13 -0
- package/dist/os/rfc/handlers/lifecycle.d.ts.map +1 -0
- package/dist/os/rfc/handlers/lifecycle.js +155 -0
- package/dist/os/rfc/handlers/lifecycle.js.map +1 -0
- package/dist/os/rfc/handlers/list-create.d.ts +6 -0
- package/dist/os/rfc/handlers/list-create.d.ts.map +1 -0
- package/dist/os/rfc/handlers/list-create.js +260 -0
- package/dist/os/rfc/handlers/list-create.js.map +1 -0
- package/dist/os/rfc/handlers/pipeline-status.d.ts +26 -0
- package/dist/os/rfc/handlers/pipeline-status.d.ts.map +1 -0
- package/dist/os/rfc/handlers/pipeline-status.js +124 -0
- package/dist/os/rfc/handlers/pipeline-status.js.map +1 -0
- package/dist/os/rfc/handlers/shared.d.ts +22 -0
- package/dist/os/rfc/handlers/shared.d.ts.map +1 -0
- package/dist/os/rfc/handlers/shared.js +105 -0
- package/dist/os/rfc/handlers/shared.js.map +1 -0
- package/dist/os/rfc/handlers/supersede-propose.d.ts +4 -0
- package/dist/os/rfc/handlers/supersede-propose.d.ts.map +1 -0
- package/dist/os/rfc/handlers/supersede-propose.js +203 -0
- package/dist/os/rfc/handlers/supersede-propose.js.map +1 -0
- package/dist/os/rfc/handlers/validate-rules.d.ts +80 -0
- package/dist/os/rfc/handlers/validate-rules.d.ts.map +1 -0
- package/dist/os/rfc/handlers/validate-rules.js +907 -0
- package/dist/os/rfc/handlers/validate-rules.js.map +1 -0
- package/dist/os/rfc/handlers/validate.d.ts +4 -0
- package/dist/os/rfc/handlers/validate.d.ts.map +1 -0
- package/dist/os/rfc/handlers/validate.js +134 -0
- package/dist/os/rfc/handlers/validate.js.map +1 -0
- package/dist/os/rfc/handlers.d.ts +7 -0
- package/dist/os/rfc/handlers.d.ts.map +1 -0
- package/dist/os/rfc/handlers.js +19 -0
- package/dist/os/rfc/handlers.js.map +1 -0
- package/dist/os/rfc/index.d.ts +18 -0
- package/dist/os/rfc/index.d.ts.map +1 -0
- package/dist/os/rfc/index.js +24 -0
- package/dist/os/rfc/index.js.map +1 -0
- package/dist/os/rfc/rfc.module.d.ts +3 -0
- package/dist/os/rfc/rfc.module.d.ts.map +1 -0
- package/dist/os/rfc/rfc.module.js +390 -0
- package/dist/os/rfc/rfc.module.js.map +1 -0
- package/dist/os/rfc/types.d.ts +559 -0
- package/dist/os/rfc/types.d.ts.map +1 -0
- package/dist/os/rfc/types.js +118 -0
- package/dist/os/rfc/types.js.map +1 -0
- package/dist/os/rfc/verification-evidence.d.ts +15 -0
- package/dist/os/rfc/verification-evidence.d.ts.map +1 -0
- package/dist/os/rfc/verification-evidence.js +185 -0
- package/dist/os/rfc/verification-evidence.js.map +1 -0
- package/dist/os/rfc/verification-refresh.d.ts +4 -0
- package/dist/os/rfc/verification-refresh.d.ts.map +1 -0
- package/dist/os/rfc/verification-refresh.js +160 -0
- package/dist/os/rfc/verification-refresh.js.map +1 -0
- package/dist/os/session/atif-parser.d.ts +29 -0
- package/dist/os/session/atif-parser.d.ts.map +1 -0
- package/dist/os/session/atif-parser.js +140 -0
- package/dist/os/session/atif-parser.js.map +1 -0
- package/dist/os/session/frontmatter-io.d.ts +31 -0
- package/dist/os/session/frontmatter-io.d.ts.map +1 -0
- package/dist/os/session/frontmatter-io.js +146 -0
- package/dist/os/session/frontmatter-io.js.map +1 -0
- package/dist/os/session/handlers/archive.d.ts +4 -0
- package/dist/os/session/handlers/archive.d.ts.map +1 -0
- package/dist/os/session/handlers/archive.js +241 -0
- package/dist/os/session/handlers/archive.js.map +1 -0
- package/dist/os/session/handlers/list.d.ts +4 -0
- package/dist/os/session/handlers/list.d.ts.map +1 -0
- package/dist/os/session/handlers/list.js +147 -0
- package/dist/os/session/handlers/list.js.map +1 -0
- package/dist/os/session/handlers/metrics-aggregate.d.ts +4 -0
- package/dist/os/session/handlers/metrics-aggregate.d.ts.map +1 -0
- package/dist/os/session/handlers/metrics-aggregate.js +183 -0
- package/dist/os/session/handlers/metrics-aggregate.js.map +1 -0
- package/dist/os/session/handlers/metrics-rfc.d.ts +4 -0
- package/dist/os/session/handlers/metrics-rfc.d.ts.map +1 -0
- package/dist/os/session/handlers/metrics-rfc.js +272 -0
- package/dist/os/session/handlers/metrics-rfc.js.map +1 -0
- package/dist/os/session/handlers/metrics-session.d.ts +9 -0
- package/dist/os/session/handlers/metrics-session.d.ts.map +1 -0
- package/dist/os/session/handlers/metrics-session.js +167 -0
- package/dist/os/session/handlers/metrics-session.js.map +1 -0
- package/dist/os/session/handlers/save.d.ts +6 -0
- package/dist/os/session/handlers/save.d.ts.map +1 -0
- package/dist/os/session/handlers/save.js +319 -0
- package/dist/os/session/handlers/save.js.map +1 -0
- package/dist/os/session/handlers/validate.d.ts +4 -0
- package/dist/os/session/handlers/validate.d.ts.map +1 -0
- package/dist/os/session/handlers/validate.js +224 -0
- package/dist/os/session/handlers/validate.js.map +1 -0
- package/dist/os/session/index.d.ts +9 -0
- package/dist/os/session/index.d.ts.map +1 -0
- package/dist/os/session/index.js +21 -0
- package/dist/os/session/index.js.map +1 -0
- package/dist/os/session/session.module.d.ts +3 -0
- package/dist/os/session/session.module.d.ts.map +1 -0
- package/dist/os/session/session.module.js +147 -0
- package/dist/os/session/session.module.js.map +1 -0
- package/dist/os/session/types.d.ts +214 -0
- package/dist/os/session/types.d.ts.map +1 -0
- package/dist/os/session/types.js +61 -0
- package/dist/os/session/types.js.map +1 -0
- package/dist/os/spec/live-spec-list.d.ts +4 -0
- package/dist/os/spec/live-spec-list.d.ts.map +1 -0
- package/dist/os/spec/live-spec-list.js +72 -0
- package/dist/os/spec/live-spec-list.js.map +1 -0
- package/dist/os/spec/live-spec-merge.d.ts +4 -0
- package/dist/os/spec/live-spec-merge.d.ts.map +1 -0
- package/dist/os/spec/live-spec-merge.js +316 -0
- package/dist/os/spec/live-spec-merge.js.map +1 -0
- package/dist/os/spec/live-spec-show.d.ts +4 -0
- package/dist/os/spec/live-spec-show.d.ts.map +1 -0
- package/dist/os/spec/live-spec-show.js +105 -0
- package/dist/os/spec/live-spec-show.js.map +1 -0
- package/dist/os/spec/live-spec-types.d.ts +71 -0
- package/dist/os/spec/live-spec-types.d.ts.map +1 -0
- package/dist/os/spec/live-spec-types.js +14 -0
- package/dist/os/spec/live-spec-types.js.map +1 -0
- package/dist/os/spec/live-spec-validate.d.ts +4 -0
- package/dist/os/spec/live-spec-validate.d.ts.map +1 -0
- package/dist/os/spec/live-spec-validate.js +140 -0
- package/dist/os/spec/live-spec-validate.js.map +1 -0
- package/dist/os/spec/spec-materialize.d.ts +21 -0
- package/dist/os/spec/spec-materialize.d.ts.map +1 -0
- package/dist/os/spec/spec-materialize.js +342 -0
- package/dist/os/spec/spec-materialize.js.map +1 -0
- package/dist/os/spec/spec-schema.d.ts +126 -0
- package/dist/os/spec/spec-schema.d.ts.map +1 -0
- package/dist/os/spec/spec-schema.js +118 -0
- package/dist/os/spec/spec-schema.js.map +1 -0
- package/dist/os/spec/spec-status.d.ts +33 -0
- package/dist/os/spec/spec-status.d.ts.map +1 -0
- package/dist/os/spec/spec-status.js +228 -0
- package/dist/os/spec/spec-status.js.map +1 -0
- package/dist/os/spec/spec-validate.d.ts +4 -0
- package/dist/os/spec/spec-validate.d.ts.map +1 -0
- package/dist/os/spec/spec-validate.js +438 -0
- package/dist/os/spec/spec-validate.js.map +1 -0
- package/dist/os/spec/spec.module.d.ts +3 -0
- package/dist/os/spec/spec.module.d.ts.map +1 -0
- package/dist/os/spec/spec.module.js +129 -0
- package/dist/os/spec/spec.module.js.map +1 -0
- package/dist/os/werkstatt/handlers/lock.d.ts +10 -0
- package/dist/os/werkstatt/handlers/lock.d.ts.map +1 -0
- package/dist/os/werkstatt/handlers/lock.js +153 -0
- package/dist/os/werkstatt/handlers/lock.js.map +1 -0
- package/dist/os/werkstatt/handlers/schema.d.ts +33 -0
- package/dist/os/werkstatt/handlers/schema.d.ts.map +1 -0
- package/dist/os/werkstatt/handlers/schema.js +42 -0
- package/dist/os/werkstatt/handlers/schema.js.map +1 -0
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.d.ts +15 -0
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.d.ts.map +1 -0
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js +152 -0
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js.map +1 -0
- package/dist/os/werkstatt/handlers/werkstatt-lock-status.d.ts +18 -0
- package/dist/os/werkstatt/handlers/werkstatt-lock-status.d.ts.map +1 -0
- package/dist/os/werkstatt/handlers/werkstatt-lock-status.js +51 -0
- package/dist/os/werkstatt/handlers/werkstatt-lock-status.js.map +1 -0
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.d.ts +11 -0
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.d.ts.map +1 -0
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.js +79 -0
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.js.map +1 -0
- package/dist/os/werkstatt/handlers/workspace-deps.d.ts +12 -0
- package/dist/os/werkstatt/handlers/workspace-deps.d.ts.map +1 -0
- package/dist/os/werkstatt/handlers/workspace-deps.js +42 -0
- package/dist/os/werkstatt/handlers/workspace-deps.js.map +1 -0
- package/dist/os/werkstatt/index.d.ts +7 -0
- package/dist/os/werkstatt/index.d.ts.map +1 -0
- package/dist/os/werkstatt/index.js +18 -0
- package/dist/os/werkstatt/index.js.map +1 -0
- package/dist/os/werkstatt/werkstatt.module.d.ts +3 -0
- package/dist/os/werkstatt/werkstatt.module.d.ts.map +1 -0
- package/dist/os/werkstatt/werkstatt.module.js +63 -0
- package/dist/os/werkstatt/werkstatt.module.js.map +1 -0
- package/dist/os/workflow/handlers.d.ts +12 -0
- package/dist/os/workflow/handlers.d.ts.map +1 -0
- package/dist/os/workflow/handlers.js +262 -0
- package/dist/os/workflow/handlers.js.map +1 -0
- package/dist/os/workflow/index.d.ts +4 -0
- package/dist/os/workflow/index.d.ts.map +1 -0
- package/dist/os/workflow/index.js +18 -0
- package/dist/os/workflow/index.js.map +1 -0
- package/dist/os/workflow/types.d.ts +69 -0
- package/dist/os/workflow/types.d.ts.map +1 -0
- package/dist/os/workflow/types.js +23 -0
- package/dist/os/workflow/types.js.map +1 -0
- package/dist/os/workflow/workflow.module.d.ts +3 -0
- package/dist/os/workflow/workflow.module.d.ts.map +1 -0
- package/dist/os/workflow/workflow.module.js +56 -0
- package/dist/os/workflow/workflow.module.js.map +1 -0
- package/dist/src/cli-output.d.ts +5 -0
- package/dist/src/cli-output.d.ts.map +1 -0
- package/dist/src/cli-output.js +53 -0
- package/dist/src/cli-output.js.map +1 -0
- package/dist/src/compass/contract-registry.d.ts +7 -0
- package/dist/src/compass/contract-registry.d.ts.map +1 -0
- package/dist/src/compass/contract-registry.js +112 -0
- package/dist/src/compass/contract-registry.js.map +1 -0
- package/dist/src/compass/types.d.ts +28 -0
- package/dist/src/compass/types.d.ts.map +1 -0
- package/dist/src/compass/types.js +14 -0
- package/dist/src/compass/types.js.map +1 -0
- package/dist/src/config/forge-config.d.ts +242 -0
- package/dist/src/config/forge-config.d.ts.map +1 -0
- package/dist/src/config/forge-config.js +363 -0
- package/dist/src/config/forge-config.js.map +1 -0
- package/dist/src/forge-module.d.ts +29 -0
- package/dist/src/forge-module.d.ts.map +1 -0
- package/dist/src/forge-module.js +16 -0
- package/dist/src/forge-module.js.map +1 -0
- package/dist/src/index.d.ts +39 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +59 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/knowledge/budgets.d.ts +38 -0
- package/dist/src/knowledge/budgets.d.ts.map +1 -0
- package/dist/src/knowledge/budgets.js +157 -0
- package/dist/src/knowledge/budgets.js.map +1 -0
- package/dist/src/knowledge/compact.d.ts +47 -0
- package/dist/src/knowledge/compact.d.ts.map +1 -0
- package/dist/src/knowledge/compact.js +320 -0
- package/dist/src/knowledge/compact.js.map +1 -0
- package/dist/src/knowledge/index.d.ts +7 -0
- package/dist/src/knowledge/index.d.ts.map +1 -0
- package/dist/src/knowledge/index.js +19 -0
- package/dist/src/knowledge/index.js.map +1 -0
- package/dist/src/knowledge/parse.d.ts +3 -0
- package/dist/src/knowledge/parse.d.ts.map +1 -0
- package/dist/src/knowledge/parse.js +205 -0
- package/dist/src/knowledge/parse.js.map +1 -0
- package/dist/src/knowledge/promote.d.ts +37 -0
- package/dist/src/knowledge/promote.d.ts.map +1 -0
- package/dist/src/knowledge/promote.js +120 -0
- package/dist/src/knowledge/promote.js.map +1 -0
- package/dist/src/knowledge/schema.d.ts +61 -0
- package/dist/src/knowledge/schema.d.ts.map +1 -0
- package/dist/src/knowledge/schema.js +64 -0
- package/dist/src/knowledge/schema.js.map +1 -0
- package/dist/src/knowledge/serialize.d.ts +3 -0
- package/dist/src/knowledge/serialize.d.ts.map +1 -0
- package/dist/src/knowledge/serialize.js +67 -0
- package/dist/src/knowledge/serialize.js.map +1 -0
- package/dist/src/migration-adapters/git-utils.d.ts +3 -0
- package/dist/src/migration-adapters/git-utils.d.ts.map +1 -0
- package/dist/src/migration-adapters/git-utils.js +65 -0
- package/dist/src/migration-adapters/git-utils.js.map +1 -0
- package/dist/src/migration-adapters/ignored-files.d.ts +12 -0
- package/dist/src/migration-adapters/ignored-files.d.ts.map +1 -0
- package/dist/src/migration-adapters/ignored-files.js +190 -0
- package/dist/src/migration-adapters/ignored-files.js.map +1 -0
- package/dist/src/migration-adapters/index.d.ts +8 -0
- package/dist/src/migration-adapters/index.d.ts.map +1 -0
- package/dist/src/migration-adapters/index.js +17 -0
- package/dist/src/migration-adapters/index.js.map +1 -0
- package/dist/src/migration-adapters/node-typescript-pnpm/index.d.ts +3 -0
- package/dist/src/migration-adapters/node-typescript-pnpm/index.d.ts.map +1 -0
- package/dist/src/migration-adapters/node-typescript-pnpm/index.js +141 -0
- package/dist/src/migration-adapters/node-typescript-pnpm/index.js.map +1 -0
- package/dist/src/migration-adapters/phaser-pnpm/index.d.ts +3 -0
- package/dist/src/migration-adapters/phaser-pnpm/index.d.ts.map +1 -0
- package/dist/src/migration-adapters/phaser-pnpm/index.js +142 -0
- package/dist/src/migration-adapters/phaser-pnpm/index.js.map +1 -0
- package/dist/src/migration-adapters/registry.d.ts +6 -0
- package/dist/src/migration-adapters/registry.d.ts.map +1 -0
- package/dist/src/migration-adapters/registry.js +55 -0
- package/dist/src/migration-adapters/registry.js.map +1 -0
- package/dist/src/migration-adapters/types.d.ts +35 -0
- package/dist/src/migration-adapters/types.d.ts.map +1 -0
- package/dist/src/migration-adapters/types.js +31 -0
- package/dist/src/migration-adapters/types.js.map +1 -0
- package/dist/src/onboarding/agents-generate.d.ts +31 -0
- package/dist/src/onboarding/agents-generate.d.ts.map +1 -0
- package/dist/src/onboarding/agents-generate.js +373 -0
- package/dist/src/onboarding/agents-generate.js.map +1 -0
- package/dist/src/onboarding/create.d.ts +12 -0
- package/dist/src/onboarding/create.d.ts.map +1 -0
- package/dist/src/onboarding/create.js +408 -0
- package/dist/src/onboarding/create.js.map +1 -0
- package/dist/src/onboarding/doctor.d.ts +45 -0
- package/dist/src/onboarding/doctor.d.ts.map +1 -0
- package/dist/src/onboarding/doctor.js +1222 -0
- package/dist/src/onboarding/doctor.js.map +1 -0
- package/dist/src/onboarding/init.d.ts +36 -0
- package/dist/src/onboarding/init.d.ts.map +1 -0
- package/dist/src/onboarding/init.js +412 -0
- package/dist/src/onboarding/init.js.map +1 -0
- package/dist/src/onboarding/invariant-engine.d.ts +17 -0
- package/dist/src/onboarding/invariant-engine.d.ts.map +1 -0
- package/dist/src/onboarding/invariant-engine.js +416 -0
- package/dist/src/onboarding/invariant-engine.js.map +1 -0
- package/dist/src/onboarding/memory-scaffold.d.ts +18 -0
- package/dist/src/onboarding/memory-scaffold.d.ts.map +1 -0
- package/dist/src/onboarding/memory-scaffold.js +151 -0
- package/dist/src/onboarding/memory-scaffold.js.map +1 -0
- package/dist/src/onboarding/nested-agents-generate.d.ts +18 -0
- package/dist/src/onboarding/nested-agents-generate.d.ts.map +1 -0
- package/dist/src/onboarding/nested-agents-generate.js +69 -0
- package/dist/src/onboarding/nested-agents-generate.js.map +1 -0
- package/dist/src/onboarding/nested-agents-templates.d.ts +26 -0
- package/dist/src/onboarding/nested-agents-templates.d.ts.map +1 -0
- package/dist/src/onboarding/nested-agents-templates.js +179 -0
- package/dist/src/onboarding/nested-agents-templates.js.map +1 -0
- package/dist/src/onboarding/profile-validate.d.ts +13 -0
- package/dist/src/onboarding/profile-validate.d.ts.map +1 -0
- package/dist/src/onboarding/profile-validate.js +109 -0
- package/dist/src/onboarding/profile-validate.js.map +1 -0
- package/dist/src/onboarding/scaffold-project.d.ts +12 -0
- package/dist/src/onboarding/scaffold-project.d.ts.map +1 -0
- package/dist/src/onboarding/scaffold-project.js +264 -0
- package/dist/src/onboarding/scaffold-project.js.map +1 -0
- package/dist/src/onboarding/scaffold.d.ts +15 -0
- package/dist/src/onboarding/scaffold.d.ts.map +1 -0
- package/dist/src/onboarding/scaffold.js +123 -0
- package/dist/src/onboarding/scaffold.js.map +1 -0
- package/dist/src/onboarding/upgrade.d.ts +27 -0
- package/dist/src/onboarding/upgrade.d.ts.map +1 -0
- package/dist/src/onboarding/upgrade.js +453 -0
- package/dist/src/onboarding/upgrade.js.map +1 -0
- package/dist/src/onboarding/workspace-discovery.d.ts +11 -0
- package/dist/src/onboarding/workspace-discovery.d.ts.map +1 -0
- package/dist/src/onboarding/workspace-discovery.js +138 -0
- package/dist/src/onboarding/workspace-discovery.js.map +1 -0
- package/dist/src/plugin/forge-plugin-manifest.d.ts +38 -0
- package/dist/src/plugin/forge-plugin-manifest.d.ts.map +1 -0
- package/dist/src/plugin/forge-plugin-manifest.js +52 -0
- package/dist/src/plugin/forge-plugin-manifest.js.map +1 -0
- package/dist/src/profiles/profile-schema.d.ts +361 -0
- package/dist/src/profiles/profile-schema.d.ts.map +1 -0
- package/dist/src/profiles/profile-schema.js +208 -0
- package/dist/src/profiles/profile-schema.js.map +1 -0
- package/dist/src/profiles/stack-profile.d.ts +173 -0
- package/dist/src/profiles/stack-profile.d.ts.map +1 -0
- package/dist/src/profiles/stack-profile.js +148 -0
- package/dist/src/profiles/stack-profile.js.map +1 -0
- package/dist/src/profiles/terminology-utils.d.ts +8 -0
- package/dist/src/profiles/terminology-utils.d.ts.map +1 -0
- package/dist/src/profiles/terminology-utils.js +31 -0
- package/dist/src/profiles/terminology-utils.js.map +1 -0
- package/dist/src/registry.d.ts +38 -0
- package/dist/src/registry.d.ts.map +1 -0
- package/dist/src/registry.js +174 -0
- package/dist/src/registry.js.map +1 -0
- package/dist/src/skill-schema.d.ts +30 -0
- package/dist/src/skill-schema.d.ts.map +1 -0
- package/dist/src/skill-schema.js +34 -0
- package/dist/src/skill-schema.js.map +1 -0
- package/dist/src/types.d.ts +158 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +17 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/fs-atomic.d.ts +7 -0
- package/dist/src/utils/fs-atomic.d.ts.map +1 -0
- package/dist/src/utils/fs-atomic.js +81 -0
- package/dist/src/utils/fs-atomic.js.map +1 -0
- package/dist/src/utils/fs-idempotent.d.ts +2 -0
- package/dist/src/utils/fs-idempotent.d.ts.map +1 -0
- package/dist/src/utils/fs-idempotent.js +39 -0
- package/dist/src/utils/fs-idempotent.js.map +1 -0
- package/dist/src/utils/fs-trash-sync.d.ts +2 -0
- package/dist/src/utils/fs-trash-sync.d.ts.map +1 -0
- package/dist/src/utils/fs-trash-sync.js +34 -0
- package/dist/src/utils/fs-trash-sync.js.map +1 -0
- package/dist/src/utils/fs-trash.d.ts +2 -0
- package/dist/src/utils/fs-trash.d.ts.map +1 -0
- package/dist/src/utils/fs-trash.js +24 -0
- package/dist/src/utils/fs-trash.js.map +1 -0
- package/dist/src/utils/fs.d.ts +8 -0
- package/dist/src/utils/fs.d.ts.map +1 -0
- package/dist/src/utils/fs.js +60 -0
- package/dist/src/utils/fs.js.map +1 -0
- package/dist/src/utils/generated-marker.d.ts +28 -0
- package/dist/src/utils/generated-marker.d.ts.map +1 -0
- package/dist/src/utils/generated-marker.js +138 -0
- package/dist/src/utils/generated-marker.js.map +1 -0
- package/dist/src/utils/hash.d.ts +2 -0
- package/dist/src/utils/hash.d.ts.map +1 -0
- package/dist/src/utils/hash.js +18 -0
- package/dist/src/utils/hash.js.map +1 -0
- package/dist/src/utils/index.d.ts +9 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +21 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/string-utils.d.ts +2 -0
- package/dist/src/utils/string-utils.d.ts.map +1 -0
- package/dist/src/utils/string-utils.js +19 -0
- package/dist/src/utils/string-utils.js.map +1 -0
- package/dist/src/validators/note-frontmatter-validate.d.ts +20 -0
- package/dist/src/validators/note-frontmatter-validate.d.ts.map +1 -0
- package/dist/src/validators/note-frontmatter-validate.js +117 -0
- package/dist/src/validators/note-frontmatter-validate.js.map +1 -0
- package/dist/src/validators/note-link-validate.d.ts +21 -0
- package/dist/src/validators/note-link-validate.d.ts.map +1 -0
- package/dist/src/validators/note-link-validate.js +121 -0
- package/dist/src/validators/note-link-validate.js.map +1 -0
- package/dist/src/validators/note-orphan-detect.d.ts +19 -0
- package/dist/src/validators/note-orphan-detect.d.ts.map +1 -0
- package/dist/src/validators/note-orphan-detect.js +123 -0
- package/dist/src/validators/note-orphan-detect.js.map +1 -0
- package/dist/src/validators/port-validate.d.ts +12 -0
- package/dist/src/validators/port-validate.d.ts.map +1 -0
- package/dist/src/validators/port-validate.js +78 -0
- package/dist/src/validators/port-validate.js.map +1 -0
- package/dist/src/validators/skill-validate.d.ts +29 -0
- package/dist/src/validators/skill-validate.d.ts.map +1 -0
- package/dist/src/validators/skill-validate.js +689 -0
- package/dist/src/validators/skill-validate.js.map +1 -0
- package/docs/concepts/governance-model.md +33 -0
- package/docs/concepts/project-contract.md +61 -0
- package/docs/concepts/why-forge.md +46 -0
- package/docs/getting-started.md +44 -0
- package/docs/guides/existing-project.md +38 -0
- package/docs/guides/rfc-adr.md +61 -0
- package/docs/guides/skills.md +60 -0
- package/docs/guides/upgrading.md +35 -0
- package/docs/maintainers/publishing.md +34 -0
- package/docs/reference/cli.md +140 -0
- package/docs/reference/forge-yaml.md +114 -0
- package/docs/reference/profiles.md +37 -0
- package/docs/reference/programmatic-api.md +79 -0
- package/os/core/core.module.ts +15 -0
- package/os/core/handlers/public-surface.ts +189 -0
- package/os/rfc/handlers/validate-rules.ts +0 -1
- package/os/rfc/verification-refresh.test.ts +15 -14
- package/os/rfc/verification-refresh.ts +1 -7
- package/os/session/handlers/metrics-session.ts +10 -9
- package/package.json +15 -7
- package/src/tests/metrics-rfc-1053.test.ts +14 -4
- package/src/tests/public-surface.test.ts +247 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# forge.yaml reference
|
|
2
|
+
|
|
3
|
+
## Full schema
|
|
4
|
+
|
|
5
|
+
```yaml
|
|
6
|
+
schema: forge/config@1
|
|
7
|
+
project:
|
|
8
|
+
name: my-project # Required. Project name.
|
|
9
|
+
stack: [typescript] # Required. List of stack identifiers.
|
|
10
|
+
packageManager: pnpm # Required. Currently only "pnpm" is supported.
|
|
11
|
+
paths:
|
|
12
|
+
rfcsDir: docs/rfcs # Default: docs/rfcs
|
|
13
|
+
adrsDir: docs/adrs # Default: docs/adrs
|
|
14
|
+
skillsDir: .agents/skills # Default: .agents/skills
|
|
15
|
+
bindings:
|
|
16
|
+
schema: forge/bindings@1
|
|
17
|
+
commands:
|
|
18
|
+
validateRfc: "forge rfc.validate {id} --json"
|
|
19
|
+
typecheck: "pnpm run build:check"
|
|
20
|
+
test: "pnpm test"
|
|
21
|
+
paths:
|
|
22
|
+
invariantsFile: docs/architecture-dna.md
|
|
23
|
+
terminology:
|
|
24
|
+
invariants: DNA
|
|
25
|
+
skillPacks:
|
|
26
|
+
- prefix: wg
|
|
27
|
+
dir: packages/my-skills/skills
|
|
28
|
+
plugins: []
|
|
29
|
+
syncedVersion: 4.1.6
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## project
|
|
33
|
+
|
|
34
|
+
| Field | Type | Required | Description |
|
|
35
|
+
| --- | --- | --- | --- |
|
|
36
|
+
| `name` | string | yes | Project name, used in generated AGENTS.md and CI |
|
|
37
|
+
| `stack` | string[] | yes | Stack identifiers (e.g. `[typescript]`, `[phaser]`) |
|
|
38
|
+
| `packageManager` | string | yes | Package manager (`pnpm` only) |
|
|
39
|
+
|
|
40
|
+
## paths
|
|
41
|
+
|
|
42
|
+
| Field | Default | Description |
|
|
43
|
+
| --- | --- | --- |
|
|
44
|
+
| `rfcsDir` | `docs/rfcs` | Directory for RFC files |
|
|
45
|
+
| `adrsDir` | `docs/adrs` | Directory for ADR files |
|
|
46
|
+
| `skillsDir` | `.agents/skills` | Directory for deployed skills |
|
|
47
|
+
|
|
48
|
+
## bindings.commands
|
|
49
|
+
|
|
50
|
+
A map of named commands to shell strings. The agent uses these to run project-specific operations. Placeholders like `{id}` are substituted at resolve time.
|
|
51
|
+
|
|
52
|
+
```yaml
|
|
53
|
+
bindings:
|
|
54
|
+
commands:
|
|
55
|
+
validateRfc: "forge rfc.validate {id} --json"
|
|
56
|
+
typecheck: "pnpm run build:check"
|
|
57
|
+
test: "pnpm test"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## bindings.paths
|
|
61
|
+
|
|
62
|
+
Additional path bindings that the agent can reference:
|
|
63
|
+
|
|
64
|
+
```yaml
|
|
65
|
+
bindings:
|
|
66
|
+
paths:
|
|
67
|
+
invariantsFile: docs/architecture-dna.md
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## bindings.terminology
|
|
71
|
+
|
|
72
|
+
Maps generic terms to project-specific names:
|
|
73
|
+
|
|
74
|
+
```yaml
|
|
75
|
+
bindings:
|
|
76
|
+
terminology:
|
|
77
|
+
invariants: DNA
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## skillPacks
|
|
81
|
+
|
|
82
|
+
Optional. Declares project-local skill packs:
|
|
83
|
+
|
|
84
|
+
```yaml
|
|
85
|
+
skillPacks:
|
|
86
|
+
- prefix: wg # Cannot be "fo" (reserved)
|
|
87
|
+
dir: packages/my-skills/skills
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Each pack directory must contain a `forge.plugin.yaml` manifest with `id` and `version` fields.
|
|
91
|
+
|
|
92
|
+
## Extension points
|
|
93
|
+
|
|
94
|
+
Packs can declare custom Compass contract blocks:
|
|
95
|
+
|
|
96
|
+
```yaml
|
|
97
|
+
# In forge.plugin.yaml
|
|
98
|
+
extensionPoints:
|
|
99
|
+
compass:
|
|
100
|
+
contract:
|
|
101
|
+
blocks:
|
|
102
|
+
- blockId: api-contract
|
|
103
|
+
requiredFor:
|
|
104
|
+
- "packages/my-pack/**/*.ts"
|
|
105
|
+
requiredTags:
|
|
106
|
+
- name: purpose
|
|
107
|
+
minWords: 3
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
`compass.validate` enforces these blocks with `COMPASS-PLUGIN-01` (missing block), `COMPASS-PLUGIN-02` (missing tag), and `COMPASS-PLUGIN-03` (below minWords) diagnostics.
|
|
111
|
+
|
|
112
|
+
## syncedVersion
|
|
113
|
+
|
|
114
|
+
Set by `forge upgrade`. Tracks the last synced Forge version. Do not edit manually.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Stack profiles
|
|
2
|
+
|
|
3
|
+
A stack profile defines the project scaffold: directory structure, dependencies, CI config, and first workspace.
|
|
4
|
+
|
|
5
|
+
## Available profiles
|
|
6
|
+
|
|
7
|
+
| Profile | Project type | First workspace | Use case |
|
|
8
|
+
| --- | --- | --- | --- |
|
|
9
|
+
| `forge-shell` | Governance / library | — | Governance-only projects, libraries, non-web projects |
|
|
10
|
+
| `typescript-turborepo` | TypeScript library | — | Generic TypeScript Turborepo monorepo with validators |
|
|
11
|
+
| `phaser-turborepo` | Browser game | `games/my-game` | Browser games, interactive experiences |
|
|
12
|
+
| `godot-csharp` | Godot game | `games/my-game` | Desktop/mobile games, Godot-based projects |
|
|
13
|
+
| `knowledge-typescript-turborepo` | Knowledge system | `knowledge/my-kb` | Evidence-backed knowledge bases |
|
|
14
|
+
|
|
15
|
+
## Using a profile
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
pnpm dlx @warpgogol/forge@latest create --in-place --profile phaser-turborepo
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Listing profiles
|
|
22
|
+
|
|
23
|
+
```sh
|
|
24
|
+
pnpm exec forge profile.validate
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Auto-detection during transplant
|
|
28
|
+
|
|
29
|
+
When bringing an existing project through the `/forge-bootstrap` transplant mode, Forge detects the matching profile by checking for marker files:
|
|
30
|
+
|
|
31
|
+
- `phaser.config.*` → `phaser-turborepo`
|
|
32
|
+
- `project.godot` → `godot-csharp`
|
|
33
|
+
- `tsconfig.json` + `pnpm-workspace.yaml` → `typescript-turborepo`
|
|
34
|
+
|
|
35
|
+
## Project-agnostic
|
|
36
|
+
|
|
37
|
+
Forge is project-agnostic. Stack profiles provide ready-made starting points, but the governance layer (RFCs, ADRs, skills, validators) works the same regardless of the profile.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Programmatic API
|
|
2
|
+
|
|
3
|
+
## Importing
|
|
4
|
+
|
|
5
|
+
```ts
|
|
6
|
+
import {
|
|
7
|
+
forgeCoreModule,
|
|
8
|
+
forgeRfcModule,
|
|
9
|
+
forgeAdrModule,
|
|
10
|
+
forgeNamingModule,
|
|
11
|
+
forgeCompassModule,
|
|
12
|
+
forgeWorkflowModule,
|
|
13
|
+
forgeSpecModule,
|
|
14
|
+
forgeSessionModule,
|
|
15
|
+
forgePluginModule,
|
|
16
|
+
forgeProgramModule,
|
|
17
|
+
loadForgeConfig,
|
|
18
|
+
resolveBinding,
|
|
19
|
+
FORGE_SKILLS,
|
|
20
|
+
} from "@warpgogol/forge";
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Loading config
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
const config = loadForgeConfig(process.cwd());
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Returns a typed `ForgeConfig` object, or throws if `forge.yaml` is missing or invalid.
|
|
30
|
+
|
|
31
|
+
## Resolving bindings
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
const cmd = resolveBinding(config, "commands.validateRfc", { id: "RFC-0001" });
|
|
35
|
+
// → "forge rfc.validate RFC-0001 --json"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Placeholders in binding strings are substituted with the provided values.
|
|
39
|
+
|
|
40
|
+
## Registering modules
|
|
41
|
+
|
|
42
|
+
```ts
|
|
43
|
+
const registry = /* your ForgeModuleRegistry */;
|
|
44
|
+
|
|
45
|
+
await forgeCoreModule.register(registry);
|
|
46
|
+
await forgeRfcModule.register(registry);
|
|
47
|
+
await forgeAdrModule.register(registry);
|
|
48
|
+
await forgeNamingModule.register(registry);
|
|
49
|
+
await forgeCompassModule.register(registry);
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Each module registers its commands with the registry. Modules are independent — register only what you need.
|
|
53
|
+
|
|
54
|
+
## Available modules
|
|
55
|
+
|
|
56
|
+
| Module | Commands |
|
|
57
|
+
| --- | --- |
|
|
58
|
+
| `forgeCoreModule` | `create`, `doctor`, `upgrade`, `scaffold`, `skill.validate`, `skill.list`, `profile.validate`, `agents.generate`, `docs.archive`, `public-surface.validate` |
|
|
59
|
+
| `forgeRfcModule` | `rfc.list`, `rfc.validate`, `rfc.create`, `rfc.verification.emit`, `rfc.implement.stamp` |
|
|
60
|
+
| `forgeAdrModule` | `adr.list`, `adr.create`, `adr.validate`, `adr.archive`, `adr.implement.stamp` |
|
|
61
|
+
| `forgeNamingModule` | `naming.convention.lint` |
|
|
62
|
+
| `forgeCompassModule` | `compass.inventory`, `compass.validate`, `compass.summary.trim` |
|
|
63
|
+
| `forgeWorkflowModule` | `workflow.lint`, `workflow.list`, `workflow.amend.list` |
|
|
64
|
+
| `forgeSpecModule` | `spec.validate`, `spec.status`, `spec.materialize`, `spec.live.merge` |
|
|
65
|
+
| `forgeSessionModule` | `session.save`, `session.archive`, `session.validate`, `session.list`, `metrics.aggregate` |
|
|
66
|
+
| `forgePluginModule` | `forge.plugin.validate`, `forge.plugin.discover` |
|
|
67
|
+
| `forgeProgramModule` | `program.packet.validate`, `program.packet.seal`, `program.packet.lease`, `program.packet.complete` |
|
|
68
|
+
|
|
69
|
+
## FORGE_SKILLS
|
|
70
|
+
|
|
71
|
+
The `FORGE_SKILLS` export contains the full skill registry — all 37 skill definitions with their frontmatter.
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
import { FORGE_SKILLS } from "@warpgogol/forge";
|
|
75
|
+
|
|
76
|
+
for (const skill of FORGE_SKILLS) {
|
|
77
|
+
console.log(skill.name, skill.description);
|
|
78
|
+
}
|
|
79
|
+
```
|
package/os/core/core.module.ts
CHANGED
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
<item>Lockfile safety net: docs.archive post-loop refreshes pnpm-lock.yaml after mission workpiece moves.</item>
|
|
27
27
|
<item>RFC-0877: forge.create --in-place required, --profile required, --name optional (derived from folder), strict empty-directory check (only .git/ tolerated).</item>
|
|
28
28
|
<item>RFC-0940: register forge.autonomy.validate command enforcing FORGE-AUTONOMY-01 (no @warpgogol/werkstatt-engine imports outside os/werkstatt/).</item>
|
|
29
|
+
<item>RFC-1080: register forge.public-surface.validate command for README/package.json consistency checks (SURFACE-01..05).</item>
|
|
29
30
|
</CHANGE_SUMMARY>
|
|
30
31
|
*/
|
|
31
32
|
|
|
@@ -67,6 +68,7 @@ export async function createForgeCoreModule(): Promise<ForgeModule> {
|
|
|
67
68
|
const { runKnowledgeCompact } = await import("./handlers/knowledge-compact.ts");
|
|
68
69
|
const { runPackageHealth } = await import("./handlers/package-health.ts");
|
|
69
70
|
const { runForgeAutonomyValidate } = await import("./handlers/forge-autonomy-validate.ts");
|
|
71
|
+
const { runPublicSurfaceValidate } = await import("./handlers/public-surface.ts");
|
|
70
72
|
|
|
71
73
|
const scaffoldWrapper = async (
|
|
72
74
|
input: ForgeCommandInput,
|
|
@@ -731,6 +733,19 @@ export async function createForgeCoreModule(): Promise<ForgeModule> {
|
|
|
731
733
|
flags: {},
|
|
732
734
|
execute: runForgeAutonomyValidate,
|
|
733
735
|
},
|
|
736
|
+
{
|
|
737
|
+
name: "forge.public-surface.validate",
|
|
738
|
+
description:
|
|
739
|
+
"Check consistency between README.md, package.json, and docs/ structure. " +
|
|
740
|
+
"Enforces SURFACE-01..05 rules: README length, Node version match, " +
|
|
741
|
+
"no .tgz in root, docs/ structure, required root files (RFC-1080).",
|
|
742
|
+
scope: "workspace",
|
|
743
|
+
supportsAllSites: false,
|
|
744
|
+
reads: ["README.md", "package.json", "docs/**"],
|
|
745
|
+
cacheable: false,
|
|
746
|
+
flags: {},
|
|
747
|
+
execute: runPublicSurfaceValidate,
|
|
748
|
+
},
|
|
734
749
|
{
|
|
735
750
|
name: "docs.archive",
|
|
736
751
|
description:
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<MODULE_CONTRACT>
|
|
3
|
+
<purpose>forge.public-surface.validate — check consistency between README.md, package.json, and docs/ structure. Enforces SURFACE-01..05 rules from RFC-1080.</purpose>
|
|
4
|
+
<non-goals>
|
|
5
|
+
<item>Do not import from @warpgogol/* — this module is portable.</item>
|
|
6
|
+
<item>Do not modify files — read-only validation.</item>
|
|
7
|
+
</non-goals>
|
|
8
|
+
</MODULE_CONTRACT>
|
|
9
|
+
<CHANGE_SUMMARY>
|
|
10
|
+
<item>RFC-1080: initial public-surface consistency validator — README length, Node version match, .tgz absence, docs/ structure, required root files.</item>
|
|
11
|
+
<item>RFC-1080: add monorepo auto-detection — resolve packages/forge/ when run from monorepo root.</item>
|
|
12
|
+
</CHANGE_SUMMARY>
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import fs from "node:fs";
|
|
16
|
+
import path from "node:path";
|
|
17
|
+
import type {
|
|
18
|
+
ForgeCommandInput,
|
|
19
|
+
ForgeCommandResult,
|
|
20
|
+
ForgeRuntimeContext,
|
|
21
|
+
} from "../../../src/types.ts";
|
|
22
|
+
|
|
23
|
+
export interface SurfaceCheck {
|
|
24
|
+
rule: string;
|
|
25
|
+
message: string;
|
|
26
|
+
status: "pass" | "warn" | "fail";
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface PublicSurfaceResult {
|
|
30
|
+
command: "forge.public-surface.validate";
|
|
31
|
+
status: "pass" | "fail";
|
|
32
|
+
checks: SurfaceCheck[];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const REQUIRED_DOCS_FILES = [
|
|
36
|
+
"docs/getting-started.md",
|
|
37
|
+
"docs/concepts/why-forge.md",
|
|
38
|
+
"docs/reference/cli.md",
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
const REQUIRED_ROOT_FILES = ["CONTRIBUTING.md", "SECURITY.md", "CHANGELOG.md"];
|
|
42
|
+
|
|
43
|
+
function readJsonFile(filePath: string): Record<string, unknown> | null {
|
|
44
|
+
try {
|
|
45
|
+
const raw = fs.readFileSync(filePath, "utf8");
|
|
46
|
+
return JSON.parse(raw) as Record<string, unknown>;
|
|
47
|
+
} catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function extractNodeMajorVersion(range: string): number | null {
|
|
53
|
+
const match = range.match(/(\d+)/);
|
|
54
|
+
return match ? parseInt(match[1], 10) : null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export async function runPublicSurfaceValidate(
|
|
58
|
+
_input: ForgeCommandInput,
|
|
59
|
+
context: ForgeRuntimeContext,
|
|
60
|
+
): Promise<ForgeCommandResult<PublicSurfaceResult>> {
|
|
61
|
+
const { workspaceRoot, logger, outputFormat } = context;
|
|
62
|
+
const checks: SurfaceCheck[] = [];
|
|
63
|
+
|
|
64
|
+
// Monorepo vs standalone resolution (RFC-1080):
|
|
65
|
+
// If packages/forge/ exists relative to workspaceRoot, use it (monorepo mode).
|
|
66
|
+
// Otherwise, use workspaceRoot directly (standalone extracted repo mode).
|
|
67
|
+
const forgePkgRoot = fs.existsSync(path.join(workspaceRoot, "packages", "forge"))
|
|
68
|
+
? path.join(workspaceRoot, "packages", "forge")
|
|
69
|
+
: workspaceRoot;
|
|
70
|
+
|
|
71
|
+
const readmePath = path.join(forgePkgRoot, "README.md");
|
|
72
|
+
const packageJsonPath = path.join(forgePkgRoot, "package.json");
|
|
73
|
+
|
|
74
|
+
const readmeContent = fs.existsSync(readmePath) ? fs.readFileSync(readmePath, "utf8") : "";
|
|
75
|
+
const readmeLines = readmeContent.split("\n").length;
|
|
76
|
+
|
|
77
|
+
const pkg = readJsonFile(packageJsonPath);
|
|
78
|
+
|
|
79
|
+
// SURFACE-01: README length (warning)
|
|
80
|
+
checks.push({
|
|
81
|
+
rule: "SURFACE-01",
|
|
82
|
+
message: `README.md is ${readmeLines} lines (${readmeLines <= 300 ? "under 300" : "over 300"})`,
|
|
83
|
+
status: readmeLines <= 300 ? "pass" : "warn",
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
// SURFACE-02: Node version consistency (error)
|
|
87
|
+
if (pkg) {
|
|
88
|
+
const engines = pkg["engines"] as Record<string, string> | undefined;
|
|
89
|
+
const nodeRange = engines?.["node"];
|
|
90
|
+
const pkgMajor = nodeRange ? extractNodeMajorVersion(nodeRange) : null;
|
|
91
|
+
|
|
92
|
+
if (pkgMajor !== null) {
|
|
93
|
+
const readmeNodeMatch = readmeContent.match(/Node(?:\.js)?\s+v?(\d+)/gi);
|
|
94
|
+
const readmeNodeVersions = readmeNodeMatch
|
|
95
|
+
? readmeNodeMatch.map((m) => parseInt(m.match(/(\d+)/)![1], 10))
|
|
96
|
+
: [];
|
|
97
|
+
|
|
98
|
+
const mismatched = readmeNodeVersions.filter((v) => v !== pkgMajor);
|
|
99
|
+
checks.push({
|
|
100
|
+
rule: "SURFACE-02",
|
|
101
|
+
message:
|
|
102
|
+
mismatched.length === 0
|
|
103
|
+
? `Node version consistent: ${nodeRange}`
|
|
104
|
+
: `README references Node ${mismatched.join(", ")} but package.json requires ${nodeRange}`,
|
|
105
|
+
status: mismatched.length === 0 ? "pass" : "fail",
|
|
106
|
+
});
|
|
107
|
+
} else {
|
|
108
|
+
checks.push({
|
|
109
|
+
rule: "SURFACE-02",
|
|
110
|
+
message: "package.json missing engines.node",
|
|
111
|
+
status: "fail",
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
} else {
|
|
115
|
+
checks.push({
|
|
116
|
+
rule: "SURFACE-02",
|
|
117
|
+
message: "package.json not found",
|
|
118
|
+
status: "fail",
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// SURFACE-03: No .tgz files in root (error)
|
|
123
|
+
const tgzFiles = fs.readdirSync(forgePkgRoot).filter((f) => f.endsWith(".tgz"));
|
|
124
|
+
checks.push({
|
|
125
|
+
rule: "SURFACE-03",
|
|
126
|
+
message:
|
|
127
|
+
tgzFiles.length === 0
|
|
128
|
+
? "No .tgz files in root"
|
|
129
|
+
: `Found ${tgzFiles.length} .tgz file(s): ${tgzFiles.join(", ")}`,
|
|
130
|
+
status: tgzFiles.length === 0 ? "pass" : "fail",
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
// SURFACE-04: docs/ directory with required files (error)
|
|
134
|
+
const missingDocs = REQUIRED_DOCS_FILES.filter((f) => !fs.existsSync(path.join(forgePkgRoot, f)));
|
|
135
|
+
checks.push({
|
|
136
|
+
rule: "SURFACE-04",
|
|
137
|
+
message:
|
|
138
|
+
missingDocs.length === 0
|
|
139
|
+
? "docs/ directory exists with required files"
|
|
140
|
+
: `Missing docs files: ${missingDocs.join(", ")}`,
|
|
141
|
+
status: missingDocs.length === 0 ? "pass" : "fail",
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
// SURFACE-05: Required root files (warning)
|
|
145
|
+
const missingRoot = REQUIRED_ROOT_FILES.filter((f) => !fs.existsSync(path.join(forgePkgRoot, f)));
|
|
146
|
+
checks.push({
|
|
147
|
+
rule: "SURFACE-05",
|
|
148
|
+
message:
|
|
149
|
+
missingRoot.length === 0
|
|
150
|
+
? "Required root files present (CONTRIBUTING.md, SECURITY.md, CHANGELOG.md)"
|
|
151
|
+
: `Missing root files: ${missingRoot.join(", ")}`,
|
|
152
|
+
status: missingRoot.length === 0 ? "pass" : "warn",
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
const hasFails = checks.some((c) => c.status === "fail");
|
|
156
|
+
const status: "pass" | "fail" = hasFails ? "fail" : "pass";
|
|
157
|
+
|
|
158
|
+
if (outputFormat === "pretty") {
|
|
159
|
+
logger.section("Forge Public Surface Validate");
|
|
160
|
+
for (const check of checks) {
|
|
161
|
+
const icon = check.status === "pass" ? "✓" : check.status === "warn" ? "⚠" : "✖";
|
|
162
|
+
const fn =
|
|
163
|
+
check.status === "pass"
|
|
164
|
+
? logger.success
|
|
165
|
+
: check.status === "warn"
|
|
166
|
+
? logger.warn
|
|
167
|
+
: logger.error;
|
|
168
|
+
fn(`${icon} [${check.rule}] ${check.message}`);
|
|
169
|
+
}
|
|
170
|
+
if (status === "pass") {
|
|
171
|
+
logger.success("All public surface checks passed.");
|
|
172
|
+
} else {
|
|
173
|
+
logger.error("Some public surface checks failed.");
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return {
|
|
178
|
+
data: {
|
|
179
|
+
command: "forge.public-surface.validate",
|
|
180
|
+
status,
|
|
181
|
+
checks,
|
|
182
|
+
},
|
|
183
|
+
exitCode: hasFails ? 1 : 0,
|
|
184
|
+
summary:
|
|
185
|
+
status === "pass"
|
|
186
|
+
? "forge.public-surface.validate: all checks passed"
|
|
187
|
+
: `forge.public-surface.validate: ${checks.filter((c) => c.status === "fail").length} fail(s), ${checks.filter((c) => c.status === "warn").length} warn(s)`,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
@@ -225,7 +225,6 @@ export function evaluateAcceptanceCriteria(body: string): AcceptanceCriteriaEval
|
|
|
225
225
|
.split("\n")
|
|
226
226
|
.filter((line) => /^- \[ \]/.test(line))
|
|
227
227
|
.map((line) => line.trim());
|
|
228
|
-
const totalUnchecked = uncheckedLines.length;
|
|
229
228
|
|
|
230
229
|
const checkedLines = section.split("\n").filter((line) => /^- \[x\]/.test(line));
|
|
231
230
|
const checkedWithoutEvidence: string[] = [];
|
|
@@ -6,6 +6,7 @@ import os from "node:os";
|
|
|
6
6
|
import { stringify as yamlStringify } from "yaml";
|
|
7
7
|
|
|
8
8
|
import { runRfcVerificationRefresh } from "./verification-refresh.ts";
|
|
9
|
+
import type { ForgeCommandInput, ForgeRuntimeContext } from "../../src/types.ts";
|
|
9
10
|
|
|
10
11
|
const { mockRunProbe, mockCaptureGitContext, mockGetKernelVersion } = vi.hoisted(() => ({
|
|
11
12
|
mockRunProbe: vi.fn(),
|
|
@@ -26,11 +27,11 @@ vi.mock("./verification-evidence.ts", async (importOriginal) => {
|
|
|
26
27
|
};
|
|
27
28
|
});
|
|
28
29
|
|
|
29
|
-
const RFC_FRONTMATTER = (id: string, status: string, probes: unknown[] = []) => {
|
|
30
|
+
const RFC_FRONTMATTER = (id: string, status: string, probes: Record<string, unknown>[] = []) => {
|
|
30
31
|
const probeYaml = probes
|
|
31
32
|
.map(
|
|
32
33
|
(p) =>
|
|
33
|
-
` - probe: ${
|
|
34
|
+
` - probe: ${p.probe}\n path: ${p.path ?? ""}\n criterion: ${p.criterion ?? ""}`,
|
|
34
35
|
)
|
|
35
36
|
.join("\n");
|
|
36
37
|
return `---\nid: ${id}\ntitle: "Test ${id}"\nstatus: ${status}\nkind: command\nscope: workspace\nowners:\n - architecture\ncreatedAt: 2026-01-01\nupdatedAt: 2026-01-01\nacceptance:\n${probeYaml}\n---\n\n# ${id}\n## Context\nTest.\n`;
|
|
@@ -134,8 +135,8 @@ describe("rfc.verification.refresh — AC-1: single-RFC refresh", () => {
|
|
|
134
135
|
mockRunProbe.mockResolvedValue({ probe: PROBE, ok: true, detail: "exists" });
|
|
135
136
|
|
|
136
137
|
const result = await runRfcVerificationRefresh(
|
|
137
|
-
{ flags: { id: "RFC-0100" } } as
|
|
138
|
-
makeContext(workspaceRoot) as
|
|
138
|
+
{ flags: { id: "RFC-0100" } } as unknown as ForgeCommandInput,
|
|
139
|
+
makeContext(workspaceRoot) as unknown as ForgeRuntimeContext,
|
|
139
140
|
);
|
|
140
141
|
|
|
141
142
|
expect(result.data!.refreshed).toHaveLength(1);
|
|
@@ -175,8 +176,8 @@ describe("rfc.verification.refresh — AC-2: --all mode", () => {
|
|
|
175
176
|
mockRunProbe.mockResolvedValue({ probe: PROBE, ok: true, detail: "exists" });
|
|
176
177
|
|
|
177
178
|
const result = await runRfcVerificationRefresh(
|
|
178
|
-
{ flags: { all: true } } as
|
|
179
|
-
makeContext(workspaceRoot) as
|
|
179
|
+
{ flags: { all: true } } as unknown as ForgeCommandInput,
|
|
180
|
+
makeContext(workspaceRoot) as unknown as ForgeRuntimeContext,
|
|
180
181
|
);
|
|
181
182
|
|
|
182
183
|
expect(result.data!.refreshed).toHaveLength(2);
|
|
@@ -200,8 +201,8 @@ describe("rfc.verification.refresh — AC-3: probe failure still writes envelope
|
|
|
200
201
|
mockRunProbe.mockResolvedValue({ probe: PROBE, ok: false, detail: "does not exist" });
|
|
201
202
|
|
|
202
203
|
const result = await runRfcVerificationRefresh(
|
|
203
|
-
{ flags: { id: "RFC-0100" } } as
|
|
204
|
-
makeContext(workspaceRoot) as
|
|
204
|
+
{ flags: { id: "RFC-0100" } } as unknown as ForgeCommandInput,
|
|
205
|
+
makeContext(workspaceRoot) as unknown as ForgeRuntimeContext,
|
|
205
206
|
);
|
|
206
207
|
|
|
207
208
|
expect(result.data!.refreshed).toHaveLength(1);
|
|
@@ -236,8 +237,8 @@ describe("rfc.verification.refresh — AC-4: --dry-run does not write files", ()
|
|
|
236
237
|
mockRunProbe.mockResolvedValue({ probe: PROBE, ok: true, detail: "exists" });
|
|
237
238
|
|
|
238
239
|
const result = await runRfcVerificationRefresh(
|
|
239
|
-
{ flags: { id: "RFC-0100", "dry-run": true } } as
|
|
240
|
-
makeContext(workspaceRoot) as
|
|
240
|
+
{ flags: { id: "RFC-0100", "dry-run": true } } as unknown as ForgeCommandInput,
|
|
241
|
+
makeContext(workspaceRoot) as unknown as ForgeRuntimeContext,
|
|
241
242
|
);
|
|
242
243
|
|
|
243
244
|
expect(result.data!.refreshed).toHaveLength(1);
|
|
@@ -270,8 +271,8 @@ describe("rfc.verification.refresh — AC-5: no evidence envelope", () => {
|
|
|
270
271
|
mockRunProbe.mockResolvedValue({ probe: PROBE, ok: true, detail: "exists" });
|
|
271
272
|
|
|
272
273
|
const result = await runRfcVerificationRefresh(
|
|
273
|
-
{ flags: { id: "RFC-0100" } } as
|
|
274
|
-
makeContext(workspaceRoot) as
|
|
274
|
+
{ flags: { id: "RFC-0100" } } as unknown as ForgeCommandInput,
|
|
275
|
+
makeContext(workspaceRoot) as unknown as ForgeRuntimeContext,
|
|
275
276
|
);
|
|
276
277
|
|
|
277
278
|
expect(result.data!.refreshed).toHaveLength(0);
|
|
@@ -296,8 +297,8 @@ describe("rfc.verification.refresh — AC-6: emittedAt preservation", () => {
|
|
|
296
297
|
mockRunProbe.mockResolvedValue({ probe: PROBE, ok: true, detail: "exists" });
|
|
297
298
|
|
|
298
299
|
await runRfcVerificationRefresh(
|
|
299
|
-
{ flags: { id: "RFC-0100" } } as
|
|
300
|
-
makeContext(workspaceRoot) as
|
|
300
|
+
{ flags: { id: "RFC-0100" } } as unknown as ForgeCommandInput,
|
|
301
|
+
makeContext(workspaceRoot) as unknown as ForgeRuntimeContext,
|
|
301
302
|
);
|
|
302
303
|
|
|
303
304
|
const envelopePath = path.join(
|
|
@@ -30,7 +30,6 @@ import { stringify as yamlStringify } from "yaml";
|
|
|
30
30
|
import {
|
|
31
31
|
captureGitContext,
|
|
32
32
|
getKernelVersion,
|
|
33
|
-
byteHashHex,
|
|
34
33
|
VERIFICATION_DIR,
|
|
35
34
|
buildEvidenceEnvelope,
|
|
36
35
|
} from "./verification-evidence.ts";
|
|
@@ -49,10 +48,6 @@ import type {
|
|
|
49
48
|
ForgeRuntimeContext,
|
|
50
49
|
} from "../../src/types.ts";
|
|
51
50
|
|
|
52
|
-
function normalizeProbes(probes: AcceptanceProbe[]): string {
|
|
53
|
-
return JSON.stringify(probes, Object.keys(probes[0] ?? {}).sort());
|
|
54
|
-
}
|
|
55
|
-
|
|
56
51
|
export async function runRfcVerificationRefresh(
|
|
57
52
|
input: ForgeCommandInput,
|
|
58
53
|
context: ForgeRuntimeContext,
|
|
@@ -74,8 +69,7 @@ export async function runRfcVerificationRefresh(
|
|
|
74
69
|
summary: { total: 0, passed: 0, failed: 0, skipped: 0 },
|
|
75
70
|
},
|
|
76
71
|
exitCode: 0,
|
|
77
|
-
summary:
|
|
78
|
-
"rfc.verification.refresh: pass --id <rfc-id> or --all to select target RFC(s)",
|
|
72
|
+
summary: "rfc.verification.refresh: pass --id <rfc-id> or --all to select target RFC(s)",
|
|
79
73
|
};
|
|
80
74
|
}
|
|
81
75
|
|
|
@@ -17,13 +17,19 @@ docs/metrics/sessions/<session-id>.metrics.yaml via writeFileAtomic.
|
|
|
17
17
|
</CHANGE_SUMMARY>
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
import {
|
|
20
|
+
import { readdir, mkdir } from "node:fs/promises";
|
|
21
21
|
import { join, dirname } from "node:path";
|
|
22
22
|
|
|
23
23
|
import { writeFileAtomic } from "../../../src/utils/fs-atomic.ts";
|
|
24
24
|
import { stringify as yamlStringify } from "yaml";
|
|
25
25
|
|
|
26
|
-
import {
|
|
26
|
+
import {
|
|
27
|
+
METRICS_DIR,
|
|
28
|
+
type SessionMetrics,
|
|
29
|
+
type SessionSkillInvocation,
|
|
30
|
+
type SessionDocumentRef,
|
|
31
|
+
type InsightSummary,
|
|
32
|
+
} from "../types.ts";
|
|
27
33
|
import type { AtifMessage } from "../atif-parser.ts";
|
|
28
34
|
|
|
29
35
|
// ─── Skill name extraction ───────────────────────────────────────────────────
|
|
@@ -176,7 +182,7 @@ export async function generateSessionMetrics(
|
|
|
176
182
|
relatedRfcs?: string[];
|
|
177
183
|
commits?: string[];
|
|
178
184
|
},
|
|
179
|
-
|
|
185
|
+
_logger: { warn: (msg: string) => void },
|
|
180
186
|
): Promise<string> {
|
|
181
187
|
const skills = extractSkillInvocations(messages);
|
|
182
188
|
const documents = await extractDocumentRefs(workspaceRoot, sessionFrontmatter.relatedRfcs ?? []);
|
|
@@ -196,12 +202,7 @@ export async function generateSessionMetrics(
|
|
|
196
202
|
};
|
|
197
203
|
|
|
198
204
|
const yamlContent = yamlStringify(metrics, { lineWidth: 120 });
|
|
199
|
-
const metricsFilePath = join(
|
|
200
|
-
workspaceRoot,
|
|
201
|
-
METRICS_DIR,
|
|
202
|
-
"sessions",
|
|
203
|
-
`${sessionId}.metrics.yaml`,
|
|
204
|
-
);
|
|
205
|
+
const metricsFilePath = join(workspaceRoot, METRICS_DIR, "sessions", `${sessionId}.metrics.yaml`);
|
|
205
206
|
await mkdir(dirname(metricsFilePath), { recursive: true });
|
|
206
207
|
await writeFileAtomic(metricsFilePath, yamlContent);
|
|
207
208
|
|
package/package.json
CHANGED
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@warpgogol/forge",
|
|
3
|
-
"version": "4.1
|
|
3
|
+
"version": "4.2.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
|
-
"description": "
|
|
7
|
+
"description": "Repository-native governance for AI-assisted software development — project contracts, RFCs, ADRs, agent skills and deterministic validation.",
|
|
8
8
|
"keywords": [
|
|
9
|
+
"ai",
|
|
10
|
+
"agent",
|
|
9
11
|
"rfc",
|
|
10
12
|
"adr",
|
|
11
13
|
"governance",
|
|
12
14
|
"skills",
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
15
|
+
"validation",
|
|
16
|
+
"project-contract",
|
|
17
|
+
"ai-assisted",
|
|
18
|
+
"documentation"
|
|
16
19
|
],
|
|
17
|
-
"homepage": "https://warpgogol.com",
|
|
20
|
+
"homepage": "https://forge.warpgogol.com",
|
|
18
21
|
"repository": {
|
|
19
22
|
"type": "git",
|
|
20
23
|
"url": "git+https://github.com/syrokomskyi/forge.git"
|
|
@@ -154,9 +157,14 @@
|
|
|
154
157
|
"src/",
|
|
155
158
|
"src/onboarding/templates/",
|
|
156
159
|
"os/",
|
|
160
|
+
"docs/",
|
|
157
161
|
"AGENTS.md",
|
|
158
162
|
"README.md",
|
|
159
|
-
"
|
|
163
|
+
"README.uk.md",
|
|
164
|
+
"LICENSE",
|
|
165
|
+
"CONTRIBUTING.md",
|
|
166
|
+
"SECURITY.md",
|
|
167
|
+
"CHANGELOG.md"
|
|
160
168
|
],
|
|
161
169
|
"scripts": {
|
|
162
170
|
"build": "pnpm exec tsc -p tsconfig.json",
|