@ybotok/loam 0.1.0-beta.3 → 0.2.0-alpha.13
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/CHANGELOG.md +5992 -82
- package/COMPARISON.md +168 -63
- package/CONTRIBUTING.md +121 -0
- package/MIGRATING-from-OpenSpec.md +238 -55
- package/QUICKSTART.md +302 -0
- package/README.md +653 -144
- package/ROADMAP.md +1035 -0
- package/SCHEMA.md +3916 -263
- package/SECURITY.md +21 -3
- package/WORKFLOW.md +927 -0
- package/dist/cli.js +133 -21
- package/dist/cli.js.map +1 -1
- package/dist/commands/adopt/adopt.js +204 -0
- package/dist/commands/adopt/adopt.js.map +1 -0
- package/dist/commands/adopt/render.js +309 -0
- package/dist/commands/adopt/render.js.map +1 -0
- package/dist/commands/archive/archive.js +74 -0
- package/dist/commands/archive/archive.js.map +1 -0
- package/dist/commands/archive/closing.js +42 -0
- package/dist/commands/archive/closing.js.map +1 -0
- package/dist/commands/archive/plan/contracts/asyncapi.js +172 -0
- package/dist/commands/archive/plan/contracts/asyncapi.js.map +1 -0
- package/dist/commands/archive/plan/contracts/consumers.js +56 -0
- package/dist/commands/archive/plan/contracts/consumers.js.map +1 -0
- package/dist/commands/archive/plan/contracts/openapi.js +193 -0
- package/dist/commands/archive/plan/contracts/openapi.js.map +1 -0
- package/dist/commands/archive/plan/contracts/verdict-lines.js +103 -0
- package/dist/commands/archive/plan/contracts/verdict-lines.js.map +1 -0
- package/dist/commands/archive/plan/document/head.js +151 -0
- package/dist/commands/archive/plan/document/head.js.map +1 -0
- package/dist/commands/archive/plan/document/links.js +284 -0
- package/dist/commands/archive/plan/document/links.js.map +1 -0
- package/dist/commands/archive/plan/document/run.js +136 -0
- package/dist/commands/archive/plan/document/run.js.map +1 -0
- package/dist/commands/archive/plan/gate.js +319 -0
- package/dist/commands/archive/plan/gate.js.map +1 -0
- package/dist/commands/archive/plan/landscape.js +298 -0
- package/dist/commands/archive/plan/landscape.js.map +1 -0
- package/dist/commands/archive/plan/model/extending.js +85 -0
- package/dist/commands/archive/plan/model/extending.js.map +1 -0
- package/dist/commands/archive/plan/refusal.js +106 -0
- package/dist/commands/archive/plan/refusal.js.map +1 -0
- package/dist/commands/archive/plan/specs.js +318 -0
- package/dist/commands/archive/plan/specs.js.map +1 -0
- package/dist/commands/archive/plan/state.js +30 -0
- package/dist/commands/archive/plan/state.js.map +1 -0
- package/dist/commands/archive/run.js +355 -0
- package/dist/commands/archive/run.js.map +1 -0
- package/dist/commands/archive/shipped.js +49 -0
- package/dist/commands/archive/shipped.js.map +1 -0
- package/dist/commands/context/context.js +166 -0
- package/dist/commands/context/context.js.map +1 -0
- package/dist/commands/context/print.js +305 -0
- package/dist/commands/context/print.js.map +1 -0
- package/dist/commands/delta/delta.js +367 -0
- package/dist/commands/delta/delta.js.map +1 -0
- package/dist/commands/delta/print.js +221 -0
- package/dist/commands/delta/print.js.map +1 -0
- package/dist/commands/dependencies.js +6 -8
- package/dist/commands/dependencies.js.map +1 -1
- package/dist/commands/diff/diff.js +86 -0
- package/dist/commands/diff/diff.js.map +1 -0
- package/dist/commands/diff/print.js +38 -0
- package/dist/commands/diff/print.js.map +1 -0
- package/dist/commands/doctor.js +65 -5
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/explain/explain.js +227 -0
- package/dist/commands/explain/explain.js.map +1 -0
- package/dist/commands/explore.js +39 -28
- package/dist/commands/explore.js.map +1 -1
- package/dist/commands/gate/gate.js +152 -0
- package/dist/commands/gate/gate.js.map +1 -0
- package/dist/commands/gate/print.js +66 -0
- package/dist/commands/gate/print.js.map +1 -0
- package/dist/commands/gherkin/commit.js +105 -0
- package/dist/commands/gherkin/commit.js.map +1 -0
- package/dist/commands/gherkin/gherkin.js +262 -0
- package/dist/commands/gherkin/gherkin.js.map +1 -0
- package/dist/commands/gherkin/reconcile.js +146 -0
- package/dist/commands/gherkin/reconcile.js.map +1 -0
- package/dist/commands/gherkin/render.js +77 -0
- package/dist/commands/gherkin/render.js.map +1 -0
- package/dist/commands/init/example.js +204 -0
- package/dist/commands/init/example.js.map +1 -0
- package/dist/commands/init/first-hour.js +72 -0
- package/dist/commands/init/first-hour.js.map +1 -0
- package/dist/commands/{init.js → init/init.js} +142 -71
- package/dist/commands/init/init.js.map +1 -0
- package/dist/commands/init/mcp.js +131 -0
- package/dist/commands/init/mcp.js.map +1 -0
- package/dist/commands/init/options.js +78 -0
- package/dist/commands/init/options.js.map +1 -0
- package/dist/commands/instructions.js +72 -14
- package/dist/commands/instructions.js.map +1 -1
- package/dist/commands/list/campaign/campaign.js +63 -0
- package/dist/commands/list/campaign/campaign.js.map +1 -0
- package/dist/commands/list/campaign/owners.js +65 -0
- package/dist/commands/list/campaign/owners.js.map +1 -0
- package/dist/commands/list/json.js +155 -0
- package/dist/commands/list/json.js.map +1 -0
- package/dist/commands/list/list.js +358 -0
- package/dist/commands/list/list.js.map +1 -0
- package/dist/commands/list/print.js +344 -0
- package/dist/commands/list/print.js.map +1 -0
- package/dist/commands/list/review.js +120 -0
- package/dist/commands/list/review.js.map +1 -0
- package/dist/commands/list/suites/suites.js +140 -0
- package/dist/commands/list/suites/suites.js.map +1 -0
- package/dist/commands/list/views.js +108 -0
- package/dist/commands/list/views.js.map +1 -0
- package/dist/commands/mcp/dispatch.js +238 -0
- package/dist/commands/mcp/dispatch.js.map +1 -0
- package/dist/commands/mcp/mcp.js +75 -0
- package/dist/commands/mcp/mcp.js.map +1 -0
- package/dist/commands/mcp/serve.js +55 -0
- package/dist/commands/mcp/serve.js.map +1 -0
- package/dist/commands/migrate-openspec/materialize/active.js +175 -0
- package/dist/commands/migrate-openspec/materialize/active.js.map +1 -0
- package/dist/commands/migrate-openspec/materialize/feature.js +41 -0
- package/dist/commands/migrate-openspec/materialize/feature.js.map +1 -0
- package/dist/commands/migrate-openspec/materialize/living.js +62 -0
- package/dist/commands/migrate-openspec/materialize/living.js.map +1 -0
- package/dist/commands/migrate-openspec/materialize/stage.js +143 -0
- package/dist/commands/migrate-openspec/materialize/stage.js.map +1 -0
- package/dist/commands/migrate-openspec/materialize/target.js +219 -0
- package/dist/commands/migrate-openspec/materialize/target.js.map +1 -0
- package/dist/commands/migrate-openspec/migrate-openspec.js +142 -0
- package/dist/commands/migrate-openspec/migrate-openspec.js.map +1 -0
- package/dist/commands/migrate-openspec/openspec/decisions.js +86 -0
- package/dist/commands/migrate-openspec/openspec/decisions.js.map +1 -0
- package/dist/commands/migrate-openspec/openspec/error.js +18 -0
- package/dist/commands/migrate-openspec/openspec/error.js.map +1 -0
- package/dist/commands/migrate-openspec/openspec/mapping.js +162 -0
- package/dist/commands/migrate-openspec/openspec/mapping.js.map +1 -0
- package/dist/commands/migrate-openspec/openspec/paths.js +40 -0
- package/dist/commands/migrate-openspec/openspec/paths.js.map +1 -0
- package/dist/commands/migrate-openspec/openspec/read.js +49 -0
- package/dist/commands/migrate-openspec/openspec/read.js.map +1 -0
- package/dist/commands/migrate-openspec/print.js +89 -0
- package/dist/commands/migrate-openspec/print.js.map +1 -0
- package/dist/commands/new/capability-template.js +118 -0
- package/dist/commands/new/capability-template.js.map +1 -0
- package/dist/commands/new/commit.js +62 -0
- package/dist/commands/new/commit.js.map +1 -0
- package/dist/commands/new/modifies.js +206 -0
- package/dist/commands/new/modifies.js.map +1 -0
- package/dist/commands/new/new.js +328 -0
- package/dist/commands/new/new.js.map +1 -0
- package/dist/commands/new/templates.js +279 -0
- package/dist/commands/new/templates.js.map +1 -0
- package/dist/commands/open.js +199 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/policy/format.js +152 -0
- package/dist/commands/policy/format.js.map +1 -0
- package/dist/commands/{docs-repo-gate.js → policy/gate.js} +38 -11
- package/dist/commands/policy/gate.js.map +1 -0
- package/dist/commands/rebase/edit.js +106 -0
- package/dist/commands/rebase/edit.js.map +1 -0
- package/dist/commands/rebase/living.js +185 -0
- package/dist/commands/rebase/living.js.map +1 -0
- package/dist/commands/rebase/plan.js +245 -0
- package/dist/commands/rebase/plan.js.map +1 -0
- package/dist/commands/rebase/rebase.js +300 -0
- package/dist/commands/rebase/rebase.js.map +1 -0
- package/dist/commands/seed/commit.js +221 -0
- package/dist/commands/seed/commit.js.map +1 -0
- package/dist/commands/seed/plan.js +278 -0
- package/dist/commands/seed/plan.js.map +1 -0
- package/dist/commands/seed/seed.js +174 -0
- package/dist/commands/seed/seed.js.map +1 -0
- package/dist/commands/show/feature.js +182 -0
- package/dist/commands/show/feature.js.map +1 -0
- package/dist/commands/show/introduced.js +157 -0
- package/dist/commands/show/introduced.js.map +1 -0
- package/dist/commands/show/marks.js +53 -0
- package/dist/commands/show/marks.js.map +1 -0
- package/dist/commands/show/service.js +239 -0
- package/dist/commands/show/service.js.map +1 -0
- package/dist/commands/show/show.js +87 -0
- package/dist/commands/show/show.js.map +1 -0
- package/dist/commands/status/fleet-next.js +90 -0
- package/dist/commands/status/fleet-next.js.map +1 -0
- package/dist/commands/status/json.js +47 -0
- package/dist/commands/status/json.js.map +1 -0
- package/dist/commands/status/print.js +209 -0
- package/dist/commands/status/print.js.map +1 -0
- package/dist/commands/status/status.js +115 -0
- package/dist/commands/status/status.js.map +1 -0
- package/dist/commands/steps/steps.js +269 -0
- package/dist/commands/steps/steps.js.map +1 -0
- package/dist/commands/subsystem/edit.js +192 -0
- package/dist/commands/subsystem/edit.js.map +1 -0
- package/dist/commands/subsystem/move.js +325 -0
- package/dist/commands/subsystem/move.js.map +1 -0
- package/dist/commands/subsystem/query.js +113 -0
- package/dist/commands/subsystem/query.js.map +1 -0
- package/dist/commands/subsystem/subsystem.js +98 -0
- package/dist/commands/subsystem/subsystem.js.map +1 -0
- package/dist/commands/subsystem/sync.js +318 -0
- package/dist/commands/subsystem/sync.js.map +1 -0
- package/dist/commands/subsystem/txn/exclude.js +132 -0
- package/dist/commands/subsystem/txn/exclude.js.map +1 -0
- package/dist/commands/subsystem/txn/links.js +128 -0
- package/dist/commands/subsystem/txn/links.js.map +1 -0
- package/dist/commands/subsystem/txn/report.js +174 -0
- package/dist/commands/subsystem/txn/report.js.map +1 -0
- package/dist/commands/subsystem/txn/txn.js +196 -0
- package/dist/commands/subsystem/txn/txn.js.map +1 -0
- package/dist/commands/subsystem/txn/views.js +249 -0
- package/dist/commands/subsystem/txn/views.js.map +1 -0
- package/dist/commands/tasks/actions.js +107 -0
- package/dist/commands/tasks/actions.js.map +1 -0
- package/dist/commands/tasks/render.js +253 -0
- package/dist/commands/tasks/render.js.map +1 -0
- package/dist/commands/tasks/tasks.js +119 -0
- package/dist/commands/tasks/tasks.js.map +1 -0
- package/dist/commands/unarchive/manifest.js +176 -0
- package/dist/commands/unarchive/manifest.js.map +1 -0
- package/dist/commands/unarchive/restore.js +254 -0
- package/dist/commands/unarchive/restore.js.map +1 -0
- package/dist/commands/unarchive/unarchive.js +59 -0
- package/dist/commands/unarchive/unarchive.js.map +1 -0
- package/dist/commands/validate/arch-coverage.js +245 -0
- package/dist/commands/validate/arch-coverage.js.map +1 -0
- package/dist/commands/validate/checks/fleet-shape.js +204 -0
- package/dist/commands/validate/checks/fleet-shape.js.map +1 -0
- package/dist/commands/validate/checks/health-deps.js +58 -0
- package/dist/commands/validate/checks/health-deps.js.map +1 -0
- package/dist/commands/validate/checks/introduced.js +102 -0
- package/dist/commands/validate/checks/introduced.js.map +1 -0
- package/dist/commands/validate/checks/requirements.js +264 -0
- package/dist/commands/validate/checks/requirements.js.map +1 -0
- package/dist/commands/validate/checks/sources.js +85 -0
- package/dist/commands/validate/checks/sources.js.map +1 -0
- package/dist/commands/validate/coverage/covers-after.js +105 -0
- package/dist/commands/validate/coverage/covers-after.js.map +1 -0
- package/dist/commands/validate/feature.js +222 -0
- package/dist/commands/validate/feature.js.map +1 -0
- package/dist/commands/validate/fleet/census.js +93 -0
- package/dist/commands/validate/fleet/census.js.map +1 -0
- package/dist/commands/validate/fleet/kind-tags.js +39 -0
- package/dist/commands/validate/fleet/kind-tags.js.map +1 -0
- package/dist/commands/validate/fleet/landscape.js +371 -0
- package/dist/commands/validate/fleet/landscape.js.map +1 -0
- package/dist/commands/validate/fleet/load.js +118 -0
- package/dist/commands/validate/fleet/load.js.map +1 -0
- package/dist/commands/validate/fleet/map/attest.js +98 -0
- package/dist/commands/validate/fleet/map/attest.js.map +1 -0
- package/dist/commands/validate/fleet/map/bindings.js +107 -0
- package/dist/commands/validate/fleet/map/bindings.js.map +1 -0
- package/dist/commands/validate/fleet/map/consumers.js +244 -0
- package/dist/commands/validate/fleet/map/consumers.js.map +1 -0
- package/dist/commands/validate/fleet/map/isolation.js +116 -0
- package/dist/commands/validate/fleet/map/isolation.js.map +1 -0
- package/dist/commands/validate/fleet/map/usecases.js +54 -0
- package/dist/commands/validate/fleet/map/usecases.js.map +1 -0
- package/dist/commands/validate/fleet/obligations.js +266 -0
- package/dist/commands/validate/fleet/obligations.js.map +1 -0
- package/dist/commands/validate/fleet/scorecard/adoption.js +102 -0
- package/dist/commands/validate/fleet/scorecard/adoption.js.map +1 -0
- package/dist/commands/validate/fleet/scorecard/contracts.js +98 -0
- package/dist/commands/validate/fleet/scorecard/contracts.js.map +1 -0
- package/dist/commands/validate/fleet/scorecard/print.js +71 -0
- package/dist/commands/validate/fleet/scorecard/print.js.map +1 -0
- package/dist/commands/validate/fleet/scorecard/scorecard.js +162 -0
- package/dist/commands/validate/fleet/scorecard/scorecard.js.map +1 -0
- package/dist/commands/validate/fleet/usecases/place.js +13 -0
- package/dist/commands/validate/fleet/usecases/place.js.map +1 -0
- package/dist/commands/validate/fleet/views/fleet-project.js +217 -0
- package/dist/commands/validate/fleet/views/fleet-project.js.map +1 -0
- package/dist/commands/validate/fleet/views/ids.js +75 -0
- package/dist/commands/validate/fleet/views/ids.js.map +1 -0
- package/dist/commands/validate/fleet/views/projects.js +278 -0
- package/dist/commands/validate/fleet/views/projects.js.map +1 -0
- package/dist/commands/validate/fleet/views/root-documents.js +83 -0
- package/dist/commands/validate/fleet/views/root-documents.js.map +1 -0
- package/dist/commands/validate/fleet/views/stale.js +52 -0
- package/dist/commands/validate/fleet/views/stale.js.map +1 -0
- package/dist/commands/validate/links/corpus.js +89 -0
- package/dist/commands/validate/links/corpus.js.map +1 -0
- package/dist/commands/validate/links/glossary.js +75 -0
- package/dist/commands/validate/links/glossary.js.map +1 -0
- package/dist/commands/validate/render/repeats.js +63 -0
- package/dist/commands/validate/render/repeats.js.map +1 -0
- package/dist/commands/validate/render/rollups.js +115 -0
- package/dist/commands/validate/render/rollups.js.map +1 -0
- package/dist/commands/validate/render/text.js +199 -0
- package/dist/commands/validate/render/text.js.map +1 -0
- package/dist/commands/validate/report.js +145 -0
- package/dist/commands/validate/report.js.map +1 -0
- package/dist/commands/validate/scope.js +113 -0
- package/dist/commands/validate/scope.js.map +1 -0
- package/dist/commands/validate/service/api.js +252 -0
- package/dist/commands/validate/service/api.js.map +1 -0
- package/dist/commands/validate/service/contracts/generated.js +134 -0
- package/dist/commands/validate/service/contracts/generated.js.map +1 -0
- package/dist/commands/validate/service/events/events.js +241 -0
- package/dist/commands/validate/service/events/events.js.map +1 -0
- package/dist/commands/validate/service/events/message-producers.js +77 -0
- package/dist/commands/validate/service/events/message-producers.js.map +1 -0
- package/dist/commands/validate/service/evidence-pins.js +177 -0
- package/dist/commands/validate/service/evidence-pins.js.map +1 -0
- package/dist/commands/validate/service/model/diverged.js +226 -0
- package/dist/commands/validate/service/model/diverged.js.map +1 -0
- package/dist/commands/validate/service/model/grade.js +163 -0
- package/dist/commands/validate/service/model/grade.js.map +1 -0
- package/dist/commands/validate/service/service.js +310 -0
- package/dist/commands/validate/service/service.js.map +1 -0
- package/dist/commands/validate/service/specs.js +279 -0
- package/dist/commands/validate/service/specs.js.map +1 -0
- package/dist/commands/validate/service/spine.js +148 -0
- package/dist/commands/validate/service/spine.js.map +1 -0
- package/dist/commands/validate/service/usecases/tags.js +113 -0
- package/dist/commands/validate/service/usecases/tags.js.map +1 -0
- package/dist/commands/validate/service/usecases/usecases.js +209 -0
- package/dist/commands/validate/service/usecases/usecases.js.map +1 -0
- package/dist/commands/validate/validate.js +363 -0
- package/dist/commands/validate/validate.js.map +1 -0
- package/dist/commands/verify/cross/diff.js +178 -0
- package/dist/commands/verify/cross/diff.js.map +1 -0
- package/dist/commands/verify/evidence/contract.js +32 -0
- package/dist/commands/verify/evidence/contract.js.map +1 -0
- package/dist/commands/verify/evidence/pins.js +52 -0
- package/dist/commands/verify/evidence/pins.js.map +1 -0
- package/dist/commands/verify/evidence/read.js +81 -0
- package/dist/commands/verify/evidence/read.js.map +1 -0
- package/dist/commands/verify/frozen.js +263 -0
- package/dist/commands/verify/frozen.js.map +1 -0
- package/dist/commands/verify/record.js +278 -0
- package/dist/commands/verify/record.js.map +1 -0
- package/dist/commands/verify/report.js +206 -0
- package/dist/commands/verify/report.js.map +1 -0
- package/dist/commands/verify/results.js +328 -0
- package/dist/commands/verify/results.js.map +1 -0
- package/dist/commands/verify/verify.js +220 -0
- package/dist/commands/verify/verify.js.map +1 -0
- package/dist/commands/vouch/contract.js +11 -0
- package/dist/commands/vouch/contract.js.map +1 -0
- package/dist/commands/vouch/pack/contract.js +2 -0
- package/dist/commands/vouch/pack/contract.js.map +1 -0
- package/dist/commands/vouch/pack/pack.js +266 -0
- package/dist/commands/vouch/pack/pack.js.map +1 -0
- package/dist/commands/vouch/pack/print.js +266 -0
- package/dist/commands/vouch/pack/print.js.map +1 -0
- package/dist/commands/vouch/pack/sections.js +141 -0
- package/dist/commands/vouch/pack/sections.js.map +1 -0
- package/dist/commands/vouch/prompt/confirm.js +46 -0
- package/dist/commands/vouch/prompt/confirm.js.map +1 -0
- package/dist/commands/vouch/report.js +101 -0
- package/dist/commands/vouch/report.js.map +1 -0
- package/dist/commands/vouch/run.js +230 -0
- package/dist/commands/vouch/run.js.map +1 -0
- package/dist/commands/vouch/sample/plan.js +111 -0
- package/dist/commands/vouch/sample/plan.js.map +1 -0
- package/dist/commands/vouch/sample/print.js +109 -0
- package/dist/commands/vouch/sample/print.js.map +1 -0
- package/dist/commands/vouch/vet/verify.js +155 -0
- package/dist/commands/vouch/vet/verify.js.map +1 -0
- package/dist/commands/vouch/vouch.js +169 -0
- package/dist/commands/vouch/vouch.js.map +1 -0
- package/dist/core/agent/agents-md/command-map.js +299 -0
- package/dist/core/agent/agents-md/command-map.js.map +1 -0
- package/dist/core/agent/agents-md/map/explain.js +46 -0
- package/dist/core/agent/agents-md/map/explain.js.map +1 -0
- package/dist/core/agent/agents-md/map/lenses/context.js +50 -0
- package/dist/core/agent/agents-md/map/lenses/context.js.map +1 -0
- package/dist/core/agent/agents-md/map/lenses/diff.js +59 -0
- package/dist/core/agent/agents-md/map/lenses/diff.js.map +1 -0
- package/dist/core/agent/agents-md/map/lenses/gate.js +65 -0
- package/dist/core/agent/agents-md/map/lenses/gate.js.map +1 -0
- package/dist/core/agent/agents-md/map/mcp.js +44 -0
- package/dist/core/agent/agents-md/map/mcp.js.map +1 -0
- package/dist/core/agent/agents-md/map/status.js +78 -0
- package/dist/core/agent/agents-md/map/status.js.map +1 -0
- package/dist/core/agent/agents-md/map/subsystem.js +104 -0
- package/dist/core/agent/agents-md/map/subsystem.js.map +1 -0
- package/dist/core/agent/agents-md/map/usecases.js +138 -0
- package/dist/core/agent/agents-md/map/usecases.js.map +1 -0
- package/dist/core/agent/agents-md/refusals.js +273 -0
- package/dist/core/agent/agents-md/refusals.js.map +1 -0
- package/dist/core/agent/agents-md.js +203 -0
- package/dist/core/agent/agents-md.js.map +1 -0
- package/dist/core/{agents-stamp.js → agent/agents-stamp.js} +60 -0
- package/dist/core/agent/agents-stamp.js.map +1 -0
- package/dist/core/agent/contract.js +2 -0
- package/dist/core/agent/contract.js.map +1 -0
- package/dist/core/agent/protocol.js +193 -0
- package/dist/core/agent/protocol.js.map +1 -0
- package/dist/core/agent/scaffold.js +254 -0
- package/dist/core/agent/scaffold.js.map +1 -0
- package/dist/core/agent/support/report.js +144 -0
- package/dist/core/agent/support/report.js.map +1 -0
- package/dist/core/agent/tools/dialects.js +151 -0
- package/dist/core/agent/tools/dialects.js.map +1 -0
- package/dist/core/agent/tools/registry.js +193 -0
- package/dist/core/agent/tools/registry.js.map +1 -0
- package/dist/core/agent/workflows/adopt.js +280 -0
- package/dist/core/agent/workflows/adopt.js.map +1 -0
- package/dist/core/agent/workflows/check.js +373 -0
- package/dist/core/agent/workflows/check.js.map +1 -0
- package/dist/core/agent/workflows/closing.js +323 -0
- package/dist/core/agent/workflows/closing.js.map +1 -0
- package/dist/core/agent/workflows/feature.js +220 -0
- package/dist/core/agent/workflows/feature.js.map +1 -0
- package/dist/core/agent/workflows/implement.js +188 -0
- package/dist/core/agent/workflows/implement.js.map +1 -0
- package/dist/core/agent/workflows/reference/authoring.js +311 -0
- package/dist/core/agent/workflows/reference/authoring.js.map +1 -0
- package/dist/core/agent/workflows/reference/codes.js +67 -0
- package/dist/core/agent/workflows/reference/codes.js.map +1 -0
- package/dist/core/agent/workflows/reference/done-check.js +210 -0
- package/dist/core/agent/workflows/reference/done-check.js.map +1 -0
- package/dist/core/agent/workflows/reference/drawing/drawing.js +253 -0
- package/dist/core/agent/workflows/reference/drawing/drawing.js.map +1 -0
- package/dist/core/agent/workflows/reference/reference.js +19 -0
- package/dist/core/agent/workflows/reference/reference.js.map +1 -0
- package/dist/core/agent/workflows/reference/spine.js +338 -0
- package/dist/core/agent/workflows/reference/spine.js.map +1 -0
- package/dist/core/asyncapi/baseline/plan.js +43 -0
- package/dist/core/asyncapi/baseline/plan.js.map +1 -0
- package/dist/core/asyncapi/baseline/surfaces.js +54 -0
- package/dist/core/asyncapi/baseline/surfaces.js.map +1 -0
- package/dist/core/asyncapi/depth.js +164 -0
- package/dist/core/asyncapi/depth.js.map +1 -0
- package/dist/core/asyncapi/digest.js +146 -0
- package/dist/core/asyncapi/digest.js.map +1 -0
- package/dist/core/asyncapi/merge/components.js +92 -0
- package/dist/core/asyncapi/merge/components.js.map +1 -0
- package/dist/core/asyncapi/merge/error.js +38 -0
- package/dist/core/asyncapi/merge/error.js.map +1 -0
- package/dist/core/asyncapi/merge/markers.js +290 -0
- package/dist/core/asyncapi/merge/markers.js.map +1 -0
- package/dist/core/asyncapi/merge/merge.js +195 -0
- package/dist/core/asyncapi/merge/merge.js.map +1 -0
- package/dist/core/asyncapi/merge/pin.js +83 -0
- package/dist/core/asyncapi/merge/pin.js.map +1 -0
- package/dist/core/asyncapi/model.js +11 -0
- package/dist/core/asyncapi/model.js.map +1 -0
- package/dist/core/asyncapi/producers.js +50 -0
- package/dist/core/asyncapi/producers.js.map +1 -0
- package/dist/core/asyncapi/read.js +263 -0
- package/dist/core/asyncapi/read.js.map +1 -0
- package/dist/core/brief/brief.js +285 -0
- package/dist/core/brief/brief.js.map +1 -0
- package/dist/core/brief/checks.js +385 -0
- package/dist/core/brief/checks.js.map +1 -0
- package/dist/core/brief/landscape.js +273 -0
- package/dist/core/brief/landscape.js.map +1 -0
- package/dist/core/brief/map/extend.js +84 -0
- package/dist/core/brief/map/extend.js.map +1 -0
- package/dist/core/brief/map/owed.js +266 -0
- package/dist/core/brief/map/owed.js.map +1 -0
- package/dist/core/brief/targets.js +304 -0
- package/dist/core/brief/targets.js.map +1 -0
- package/dist/core/brief/unchecked.js +58 -0
- package/dist/core/brief/unchecked.js.map +1 -0
- package/dist/core/c4/arch.js +190 -0
- package/dist/core/c4/arch.js.map +1 -0
- package/dist/core/c4/direction/direction.js +114 -0
- package/dist/core/c4/direction/direction.js.map +1 -0
- package/dist/core/c4/likec4.js +243 -0
- package/dist/core/c4/likec4.js.map +1 -0
- package/dist/core/c4/locate/unlocated.js +150 -0
- package/dist/core/c4/locate/unlocated.js.map +1 -0
- package/dist/core/c4/parsed/deployment.js +160 -0
- package/dist/core/c4/parsed/deployment.js.map +1 -0
- package/dist/core/c4/parsed/dynamic-views.js +132 -0
- package/dist/core/c4/parsed/dynamic-views.js.map +1 -0
- package/dist/core/c4/parsed/specification.js +78 -0
- package/dist/core/c4/parsed/specification.js.map +1 -0
- package/dist/core/c4/parsed/values.js +110 -0
- package/dist/core/c4/parsed/values.js.map +1 -0
- package/dist/core/c4/parsed/view-ids.js +113 -0
- package/dist/core/c4/parsed/view-ids.js.map +1 -0
- package/dist/core/c4/prefetch/fleet.js +134 -0
- package/dist/core/c4/prefetch/fleet.js.map +1 -0
- package/dist/core/c4/project/architecture.js +161 -0
- package/dist/core/c4/project/architecture.js.map +1 -0
- package/dist/core/c4/project/batch.js +140 -0
- package/dist/core/c4/project/batch.js.map +1 -0
- package/dist/core/c4/project/documents.js +89 -0
- package/dist/core/c4/project/documents.js.map +1 -0
- package/dist/core/c4/project/load.js +219 -0
- package/dist/core/c4/project/load.js.map +1 -0
- package/dist/core/c4/project/staged.js +277 -0
- package/dist/core/c4/project/staged.js.map +1 -0
- package/dist/core/c4/resolve/attested.js +0 -0
- package/dist/core/c4/resolve/attested.js.map +1 -0
- package/dist/core/c4/resolve/external.js +51 -0
- package/dist/core/c4/resolve/external.js.map +1 -0
- package/dist/core/c4/resolve/service.js +174 -0
- package/dist/core/c4/resolve/service.js.map +1 -0
- package/dist/core/c4/resolve/steps.js +290 -0
- package/dist/core/c4/resolve/steps.js.map +1 -0
- package/dist/core/c4/resolve/systems.js +154 -0
- package/dist/core/c4/resolve/systems.js.map +1 -0
- package/dist/core/c4/root-project/exclude.js +352 -0
- package/dist/core/c4/root-project/exclude.js.map +1 -0
- package/dist/core/c4/seed/fleet-file.js +201 -0
- package/dist/core/c4/seed/fleet-file.js.map +1 -0
- package/dist/core/c4/seed/items.js +91 -0
- package/dist/core/c4/seed/items.js.map +1 -0
- package/dist/core/c4/seed/stamp.js +48 -0
- package/dist/core/c4/seed/stamp.js.map +1 -0
- package/dist/core/c4/seed/template.js +173 -0
- package/dist/core/c4/seed/template.js.map +1 -0
- package/dist/core/c4/service-model/created/models.js +96 -0
- package/dist/core/c4/service-model/created/models.js.map +1 -0
- package/dist/core/c4/service-model/documents.js +47 -0
- package/dist/core/c4/service-model/documents.js.map +1 -0
- package/dist/core/c4/service-model/fleet/extending.js +82 -0
- package/dist/core/c4/service-model/fleet/extending.js.map +1 -0
- package/dist/core/c4/service-model/load.js +165 -0
- package/dist/core/c4/service-model/load.js.map +1 -0
- package/dist/core/c4/service-model/renderer.js +128 -0
- package/dist/core/c4/service-model/renderer.js.map +1 -0
- package/dist/core/c4/service-model/shape.js +106 -0
- package/dist/core/c4/service-model/shape.js.map +1 -0
- package/dist/core/c4/service-model/slice.js +188 -0
- package/dist/core/c4/service-model/slice.js.map +1 -0
- package/dist/core/c4/source-mask.js +369 -0
- package/dist/core/c4/source-mask.js.map +1 -0
- package/dist/core/c4/source-scan.js +308 -0
- package/dist/core/c4/source-scan.js.map +1 -0
- package/dist/core/c4/splice/authored-source.js +167 -0
- package/dist/core/c4/splice/authored-source.js.map +1 -0
- package/dist/core/c4/splice/contract.js +30 -0
- package/dist/core/c4/splice/contract.js.map +1 -0
- package/dist/core/c4/splice/delta-blocks.js +126 -0
- package/dist/core/c4/splice/delta-blocks.js.map +1 -0
- package/dist/core/c4/splice/identity/declared.js +87 -0
- package/dist/core/c4/splice/identity/declared.js.map +1 -0
- package/dist/core/c4/splice/identity/edges.js +73 -0
- package/dist/core/c4/splice/identity/edges.js.map +1 -0
- package/dist/core/c4/splice/identity/existing.js +80 -0
- package/dist/core/c4/splice/identity/existing.js.map +1 -0
- package/dist/core/c4/splice/identity/interior.js +80 -0
- package/dist/core/c4/splice/identity/interior.js.map +1 -0
- package/dist/core/c4/splice/identity/owner.js +50 -0
- package/dist/core/c4/splice/identity/owner.js.map +1 -0
- package/dist/core/c4/splice/landscape-merge.js +337 -0
- package/dist/core/c4/splice/landscape-merge.js.map +1 -0
- package/dist/core/c4/splice/model/merge.js +151 -0
- package/dist/core/c4/splice/model/merge.js.map +1 -0
- package/dist/core/c4/splice/placement.js +298 -0
- package/dist/core/c4/splice/placement.js.map +1 -0
- package/dist/core/c4/splice/text/spot.js +131 -0
- package/dist/core/c4/splice/text/spot.js.map +1 -0
- package/dist/core/c4/workspace.js +166 -0
- package/dist/core/c4/workspace.js.map +1 -0
- package/dist/core/capabilities/authoring/notes.js +141 -0
- package/dist/core/capabilities/authoring/notes.js.map +1 -0
- package/dist/core/capabilities/capabilities.js +124 -0
- package/dist/core/capabilities/capabilities.js.map +1 -0
- package/dist/core/capabilities/delta/doc.js +47 -0
- package/dist/core/capabilities/delta/doc.js.map +1 -0
- package/dist/core/capabilities/delta/overlay.js +129 -0
- package/dist/core/capabilities/delta/overlay.js.map +1 -0
- package/dist/core/capabilities/delta/summary.js +57 -0
- package/dist/core/capabilities/delta/summary.js.map +1 -0
- package/dist/core/capabilities/delta/tree.js +43 -0
- package/dist/core/capabilities/delta/tree.js.map +1 -0
- package/dist/core/capabilities/delta/uncovered.js +222 -0
- package/dist/core/capabilities/delta/uncovered.js.map +1 -0
- package/dist/core/capabilities/findings.js +338 -0
- package/dist/core/capabilities/findings.js.map +1 -0
- package/dist/core/capabilities/realizes/findings.js +174 -0
- package/dist/core/capabilities/realizes/findings.js.map +1 -0
- package/dist/core/capabilities/realizes/join.js +123 -0
- package/dist/core/capabilities/realizes/join.js.map +1 -0
- package/dist/core/capabilities/rollup.js +205 -0
- package/dist/core/capabilities/rollup.js.map +1 -0
- package/dist/core/capabilities/tree.js +104 -0
- package/dist/core/capabilities/tree.js.map +1 -0
- package/dist/core/capabilities/usecase-join.js +267 -0
- package/dist/core/capabilities/usecase-join.js.map +1 -0
- package/dist/core/coherence/authoring/scaffold.js +185 -0
- package/dist/core/coherence/authoring/scaffold.js.map +1 -0
- package/dist/core/coherence/authoring/sentinels.js +75 -0
- package/dist/core/coherence/authoring/sentinels.js.map +1 -0
- package/dist/core/coherence/calls/called.js +52 -0
- package/dist/core/coherence/calls/called.js.map +1 -0
- package/dist/core/coherence/coherence.js +332 -0
- package/dist/core/coherence/coherence.js.map +1 -0
- package/dist/core/coherence/consumed/operations.js +70 -0
- package/dist/core/coherence/consumed/operations.js.map +1 -0
- package/dist/core/coherence/consumed/refusal.js +38 -0
- package/dist/core/coherence/consumed/refusal.js.map +1 -0
- package/dist/core/coherence/covers/health.js +85 -0
- package/dist/core/coherence/covers/health.js.map +1 -0
- package/dist/core/coherence/declared.js +295 -0
- package/dist/core/coherence/declared.js.map +1 -0
- package/dist/core/coherence/events/declared.js +191 -0
- package/dist/core/coherence/events/declared.js.map +1 -0
- package/dist/core/coherence/events/events.js +335 -0
- package/dist/core/coherence/events/events.js.map +1 -0
- package/dist/core/coherence/events/grades.js +189 -0
- package/dist/core/coherence/events/grades.js.map +1 -0
- package/dist/core/coherence/events/lookups.js +63 -0
- package/dist/core/coherence/events/lookups.js.map +1 -0
- package/dist/core/coherence/events/produced.js +100 -0
- package/dist/core/coherence/events/produced.js.map +1 -0
- package/dist/core/coherence/living.js +198 -0
- package/dist/core/coherence/living.js.map +1 -0
- package/dist/core/coherence/lookups.js +95 -0
- package/dist/core/coherence/lookups.js.map +1 -0
- package/dist/core/coherence/pending.js +39 -0
- package/dist/core/coherence/pending.js.map +1 -0
- package/dist/core/coherence/retired/archived.js +285 -0
- package/dist/core/coherence/retired/archived.js.map +1 -0
- package/dist/core/coherence/retired/event-pair.js +62 -0
- package/dist/core/coherence/retired/event-pair.js.map +1 -0
- package/dist/core/coherence/retired/merged.js +79 -0
- package/dist/core/coherence/retired/merged.js.map +1 -0
- package/dist/core/coherence/retired/retirement.js +49 -0
- package/dist/core/coherence/retired/retirement.js.map +1 -0
- package/dist/core/coherence/retired/revival/arrivals.js +131 -0
- package/dist/core/coherence/retired/revival/arrivals.js.map +1 -0
- package/dist/core/coherence/retired/revival/revived.js +297 -0
- package/dist/core/coherence/retired/revival/revived.js.map +1 -0
- package/dist/core/conflict-markers.js +60 -0
- package/dist/core/conflict-markers.js.map +1 -0
- package/dist/core/consumers/after.js +113 -0
- package/dist/core/consumers/after.js.map +1 -0
- package/dist/core/consumers/consumers.js +296 -0
- package/dist/core/consumers/consumers.js.map +1 -0
- package/dist/core/consumers/current.js +211 -0
- package/dist/core/consumers/current.js.map +1 -0
- package/dist/core/consumers/scan.js +46 -0
- package/dist/core/consumers/scan.js.map +1 -0
- package/dist/core/consumers/state.js +27 -0
- package/dist/core/consumers/state.js.map +1 -0
- package/dist/core/delta/claims.js +73 -0
- package/dist/core/delta/claims.js.map +1 -0
- package/dist/core/delta/delta.js +341 -0
- package/dist/core/delta/delta.js.map +1 -0
- package/dist/core/delta/document.js +177 -0
- package/dist/core/delta/document.js.map +1 -0
- package/dist/core/delta/scope.js +48 -0
- package/dist/core/delta/scope.js.map +1 -0
- package/dist/core/delta/select.js +237 -0
- package/dist/core/delta/select.js.map +1 -0
- package/dist/core/dependencies/dependencies.js +141 -0
- package/dist/core/dependencies/dependencies.js.map +1 -0
- package/dist/core/dependencies/facts.js +165 -0
- package/dist/core/dependencies/facts.js.map +1 -0
- package/dist/core/dependencies/fanin.js +88 -0
- package/dist/core/dependencies/fanin.js.map +1 -0
- package/dist/core/dependencies/graph.js +106 -0
- package/dist/core/dependencies/graph.js.map +1 -0
- package/dist/core/deployment/delta.js +191 -0
- package/dist/core/deployment/delta.js.map +1 -0
- package/dist/core/deployment/objects.js +145 -0
- package/dist/core/deployment/objects.js.map +1 -0
- package/dist/core/diff/base-git.js +230 -0
- package/dist/core/diff/base-git.js.map +1 -0
- package/dist/core/diff/base-state.js +237 -0
- package/dist/core/diff/base-state.js.map +1 -0
- package/dist/core/diff/joins.js +136 -0
- package/dist/core/diff/joins.js.map +1 -0
- package/dist/core/diff/scope/changed-paths.js +204 -0
- package/dist/core/diff/scope/changed-paths.js.map +1 -0
- package/dist/core/diff/scope/edges.js +82 -0
- package/dist/core/diff/scope/edges.js.map +1 -0
- package/dist/core/diff/semantic.js +312 -0
- package/dist/core/diff/semantic.js.map +1 -0
- package/dist/core/docs.js +37 -85
- package/dist/core/docs.js.map +1 -1
- package/dist/core/doctor/agents.js +238 -0
- package/dist/core/doctor/agents.js.map +1 -0
- package/dist/core/doctor/config.js +139 -0
- package/dist/core/doctor/config.js.map +1 -0
- package/dist/core/doctor/doctor.js +355 -0
- package/dist/core/doctor/doctor.js.map +1 -0
- package/dist/core/doctor/report.js +13 -0
- package/dist/core/doctor/report.js.map +1 -0
- package/dist/core/doctor/reports/scan.js +242 -0
- package/dist/core/doctor/reports/scan.js.map +1 -0
- package/dist/core/doctor/residue.js +110 -0
- package/dist/core/doctor/residue.js.map +1 -0
- package/dist/core/document/apply.js +224 -0
- package/dist/core/document/apply.js.map +1 -0
- package/dist/core/{frontmatter.js → document/frontmatter.js} +103 -2
- package/dist/core/document/frontmatter.js.map +1 -0
- package/dist/core/document/grammar/directives.js +143 -0
- package/dist/core/document/grammar/directives.js.map +1 -0
- package/dist/core/document/parse.js +286 -0
- package/dist/core/document/parse.js.map +1 -0
- package/dist/core/document/scenarios.js +238 -0
- package/dist/core/document/scenarios.js.map +1 -0
- package/dist/core/document/spec.js +234 -0
- package/dist/core/document/spec.js.map +1 -0
- package/dist/core/{config.js → envelope/config.js} +89 -18
- package/dist/core/envelope/config.js.map +1 -0
- package/dist/core/envelope/json.js +209 -0
- package/dist/core/envelope/json.js.map +1 -0
- package/dist/core/{version.js → envelope/version.js} +3 -3
- package/dist/core/envelope/version.js.map +1 -0
- package/dist/core/explain/families.js +180 -0
- package/dist/core/explain/families.js.map +1 -0
- package/dist/core/explain/fix-tables.js +178 -0
- package/dist/core/explain/fix-tables.js.map +1 -0
- package/dist/core/explain/lookup.js +194 -0
- package/dist/core/explain/lookup.js.map +1 -0
- package/dist/core/explain/refusals.js +49 -0
- package/dist/core/explain/refusals.js.map +1 -0
- package/dist/core/explain/terms/documents.js +227 -0
- package/dist/core/explain/terms/documents.js.map +1 -0
- package/dist/core/explain/terms/done-check.js +144 -0
- package/dist/core/explain/terms/done-check.js.map +1 -0
- package/dist/core/explain/terms/entry.js +14 -0
- package/dist/core/explain/terms/entry.js.map +1 -0
- package/dist/core/explain/terms/stages.js +71 -0
- package/dist/core/explain/terms/stages.js.map +1 -0
- package/dist/core/explain/terms/tasks.js +97 -0
- package/dist/core/explain/terms/tasks.js.map +1 -0
- package/dist/core/explain/terms.js +103 -0
- package/dist/core/explain/terms.js.map +1 -0
- package/dist/core/explore/describe.js +105 -0
- package/dist/core/explore/describe.js.map +1 -0
- package/dist/core/explore/explore.js +204 -0
- package/dist/core/explore/explore.js.map +1 -0
- package/dist/core/fleet-context.js +174 -146
- package/dist/core/fleet-context.js.map +1 -1
- package/dist/core/gate/checks.js +208 -0
- package/dist/core/gate/checks.js.map +1 -0
- package/dist/core/gate/partners.js +246 -0
- package/dist/core/gate/partners.js.map +1 -0
- package/dist/core/gate/report.js +47 -0
- package/dist/core/gate/report.js.map +1 -0
- package/dist/core/gate/verification.js +176 -0
- package/dist/core/gate/verification.js.map +1 -0
- package/dist/core/gherkin/digest.js +60 -0
- package/dist/core/gherkin/digest.js.map +1 -0
- package/dist/core/gherkin/emit.js +177 -0
- package/dist/core/gherkin/emit.js.map +1 -0
- package/dist/core/gherkin/read.js +76 -0
- package/dist/core/gherkin/read.js.map +1 -0
- package/dist/core/gherkin/stale.js +210 -0
- package/dist/core/gherkin/stale.js.map +1 -0
- package/dist/core/gherkin/stamp.js +77 -0
- package/dist/core/gherkin/stamp.js.map +1 -0
- package/dist/core/gherkin/steps/catalogue.js +154 -0
- package/dist/core/gherkin/steps/catalogue.js.map +1 -0
- package/dist/core/gherkin/steps/inventory.js +98 -0
- package/dist/core/gherkin/steps/inventory.js.map +1 -0
- package/dist/core/gherkin/steps/phrase.js +72 -0
- package/dist/core/gherkin/steps/phrase.js.map +1 -0
- package/dist/core/glossary/delta.js +109 -0
- package/dist/core/glossary/delta.js.map +1 -0
- package/dist/core/glossary/tree.js +73 -0
- package/dist/core/glossary/tree.js.map +1 -0
- package/dist/core/{concurrency.js → kernel/concurrency.js} +19 -0
- package/dist/core/kernel/concurrency.js.map +1 -0
- package/dist/core/{document-bytes.js → kernel/document-bytes.js} +1 -1
- package/dist/core/kernel/document-bytes.js.map +1 -0
- package/dist/core/kernel/fences.js +42 -0
- package/dist/core/kernel/fences.js.map +1 -0
- package/dist/core/kernel/ids/capability.js +72 -0
- package/dist/core/kernel/ids/capability.js.map +1 -0
- package/dist/core/kernel/ids/dirs.js +33 -0
- package/dist/core/kernel/ids/dirs.js.map +1 -0
- package/dist/core/kernel/ids/feature.js +75 -0
- package/dist/core/kernel/ids/feature.js.map +1 -0
- package/dist/core/kernel/ids/fqn/ancestors.js +65 -0
- package/dist/core/kernel/ids/fqn/ancestors.js.map +1 -0
- package/dist/core/kernel/ids/service.js +156 -0
- package/dist/core/kernel/ids/service.js.map +1 -0
- package/dist/core/kernel/ids/subsystem.js +63 -0
- package/dist/core/kernel/ids/subsystem.js.map +1 -0
- package/dist/core/{path-safety.js → kernel/path-safety.js} +56 -4
- package/dist/core/kernel/path-safety.js.map +1 -0
- package/dist/core/{records.js → kernel/records.js} +11 -0
- package/dist/core/kernel/records.js.map +1 -0
- package/dist/core/links/backlinks.js +66 -0
- package/dist/core/links/backlinks.js.map +1 -0
- package/dist/core/links/case.js +74 -0
- package/dist/core/links/case.js.map +1 -0
- package/dist/core/links/corpus.js +118 -0
- package/dist/core/links/corpus.js.map +1 -0
- package/dist/core/links/findings.js +110 -0
- package/dist/core/links/findings.js.map +1 -0
- package/dist/core/links/parse.js +265 -0
- package/dist/core/links/parse.js.map +1 -0
- package/dist/core/mcp/argv.js +212 -0
- package/dist/core/mcp/argv.js.map +1 -0
- package/dist/core/mcp/author-tools.js +73 -0
- package/dist/core/mcp/author-tools.js.map +1 -0
- package/dist/core/mcp/framing.js +46 -0
- package/dist/core/mcp/framing.js.map +1 -0
- package/dist/core/mcp/protocol.js +280 -0
- package/dist/core/mcp/protocol.js.map +1 -0
- package/dist/core/mcp/tools.js +324 -0
- package/dist/core/mcp/tools.js.map +1 -0
- package/dist/core/obligations/obligations.js +106 -0
- package/dist/core/obligations/obligations.js.map +1 -0
- package/dist/core/openapi/baseline/gate.js +207 -0
- package/dist/core/openapi/baseline/gate.js.map +1 -0
- package/dist/core/openapi/baseline/plan.js +142 -0
- package/dist/core/openapi/baseline/plan.js.map +1 -0
- package/dist/core/openapi/baseline/record.js +174 -0
- package/dist/core/openapi/baseline/record.js.map +1 -0
- package/dist/core/openapi/contract-text.js +33 -0
- package/dist/core/openapi/contract-text.js.map +1 -0
- package/dist/core/openapi/contract-tree.js +301 -0
- package/dist/core/openapi/contract-tree.js.map +1 -0
- package/dist/core/openapi/depth.js +136 -0
- package/dist/core/openapi/depth.js.map +1 -0
- package/dist/core/openapi/digest.js +239 -0
- package/dist/core/openapi/digest.js.map +1 -0
- package/dist/core/{openapi.js → openapi/doc.js} +54 -108
- package/dist/core/openapi/doc.js.map +1 -0
- package/dist/core/openapi/merge/components.js +199 -0
- package/dist/core/openapi/merge/components.js.map +1 -0
- package/dist/core/openapi/merge/error.js +16 -0
- package/dist/core/openapi/merge/error.js.map +1 -0
- package/dist/core/openapi/merge/markers.js +204 -0
- package/dist/core/openapi/merge/markers.js.map +1 -0
- package/dist/core/openapi/merge/merge.js +232 -0
- package/dist/core/openapi/merge/merge.js.map +1 -0
- package/dist/core/openapi/merge/pin.js +110 -0
- package/dist/core/openapi/merge/pin.js.map +1 -0
- package/dist/core/openspec/decide/capabilities.js +244 -0
- package/dist/core/openspec/decide/capabilities.js.map +1 -0
- package/dist/core/openspec/decide/dispositions.js +63 -0
- package/dist/core/openspec/decide/dispositions.js.map +1 -0
- package/dist/core/openspec/decide/renames.js +179 -0
- package/dist/core/openspec/decide/renames.js.map +1 -0
- package/dist/core/openspec/decide/verdict.js +84 -0
- package/dist/core/openspec/decide/verdict.js.map +1 -0
- package/dist/core/openspec/inventory.js +220 -0
- package/dist/core/openspec/inventory.js.map +1 -0
- package/dist/core/openspec/model/mapping.js +78 -0
- package/dist/core/openspec/model/mapping.js.map +1 -0
- package/dist/core/openspec/model/model.js +70 -0
- package/dist/core/openspec/model/model.js.map +1 -0
- package/dist/core/openspec/scan/changes.js +241 -0
- package/dist/core/openspec/scan/changes.js.map +1 -0
- package/dist/core/openspec/scan/config.js +191 -0
- package/dist/core/openspec/scan/config.js.map +1 -0
- package/dist/core/openspec/scan/shape.js +304 -0
- package/dist/core/openspec/scan/shape.js.map +1 -0
- package/dist/core/openspec/scan/walk.js +116 -0
- package/dist/core/openspec/scan/walk.js.map +1 -0
- package/dist/core/openspec/scan/workspace.js +71 -0
- package/dist/core/openspec/scan/workspace.js.map +1 -0
- package/dist/core/owners/codeowners.js +141 -0
- package/dist/core/owners/codeowners.js.map +1 -0
- package/dist/core/pack/features.js +120 -0
- package/dist/core/pack/features.js.map +1 -0
- package/dist/core/pack/joins.js +112 -0
- package/dist/core/pack/joins.js.map +1 -0
- package/dist/core/pack/living.js +157 -0
- package/dist/core/pack/living.js.map +1 -0
- package/dist/core/pack/pack.js +120 -0
- package/dist/core/pack/pack.js.map +1 -0
- package/dist/core/permissions/permissions.js +87 -0
- package/dist/core/permissions/permissions.js.map +1 -0
- package/dist/core/projection/api.js +84 -0
- package/dist/core/projection/api.js.map +1 -0
- package/dist/core/projection/arch-slice.js +63 -0
- package/dist/core/projection/arch-slice.js.map +1 -0
- package/dist/core/projection/events.js +34 -0
- package/dist/core/projection/events.js.map +1 -0
- package/dist/core/projection/introduced.js +14 -0
- package/dist/core/projection/introduced.js.map +1 -0
- package/dist/core/provenance/findings.js +244 -0
- package/dist/core/provenance/findings.js.map +1 -0
- package/dist/core/provenance/git.js +201 -0
- package/dist/core/provenance/git.js.map +1 -0
- package/dist/core/provenance/gitq/moves.js +139 -0
- package/dist/core/provenance/gitq/moves.js.map +1 -0
- package/dist/core/provenance/gitq/vouched-ancestor.js +179 -0
- package/dist/core/provenance/gitq/vouched-ancestor.js.map +1 -0
- package/dist/core/provenance/sample/scope.js +238 -0
- package/dist/core/provenance/sample/scope.js.map +1 -0
- package/dist/core/provenance/sample/sections.js +61 -0
- package/dist/core/provenance/sample/sections.js.map +1 -0
- package/dist/core/provenance/sources.js +280 -0
- package/dist/core/provenance/sources.js.map +1 -0
- package/dist/core/provenance/stamp.js +220 -0
- package/dist/core/provenance/stamp.js.map +1 -0
- package/dist/core/provenance/walk.js +157 -0
- package/dist/core/provenance/walk.js.map +1 -0
- package/dist/core/repo/authored/paths.js +210 -0
- package/dist/core/repo/authored/paths.js.map +1 -0
- package/dist/core/repo/entries.js +126 -0
- package/dist/core/repo/entries.js.map +1 -0
- package/dist/core/repo/paths.js +322 -0
- package/dist/core/repo/paths.js.map +1 -0
- package/dist/core/repo/repo.js +308 -0
- package/dist/core/repo/repo.js.map +1 -0
- package/dist/core/repo/service-target.js +153 -0
- package/dist/core/repo/service-target.js.map +1 -0
- package/dist/core/repo/state.js +58 -0
- package/dist/core/repo/state.js.map +1 -0
- package/dist/core/repo/tree/find.js +61 -0
- package/dist/core/repo/tree/find.js.map +1 -0
- package/dist/core/repo/tree/fs.js +90 -0
- package/dist/core/repo/tree/fs.js.map +1 -0
- package/dist/core/repo/tree/marker.js +61 -0
- package/dist/core/repo/tree/marker.js.map +1 -0
- package/dist/core/repo/tree/render/body.js +258 -0
- package/dist/core/repo/tree/render/body.js.map +1 -0
- package/dist/core/repo/tree/render/projects.js +182 -0
- package/dist/core/repo/tree/render/projects.js.map +1 -0
- package/dist/core/repo/tree/render/service/header.js +125 -0
- package/dist/core/repo/tree/render/service/header.js.map +1 -0
- package/dist/core/repo/tree/render/service/peers.js +28 -0
- package/dist/core/repo/tree/render/service/peers.js.map +1 -0
- package/dist/core/repo/tree/render/service/view-id.js +67 -0
- package/dist/core/repo/tree/render/service/view-id.js.map +1 -0
- package/dist/core/repo/tree/render/service/views.js +78 -0
- package/dist/core/repo/tree/render/service/views.js.map +1 -0
- package/dist/core/repo/tree/render/stale.js +42 -0
- package/dist/core/repo/tree/render/stale.js.map +1 -0
- package/dist/core/repo/tree/render/text.js +84 -0
- package/dist/core/repo/tree/render/text.js.map +1 -0
- package/dist/core/repo/tree/render/views.js +293 -0
- package/dist/core/repo/tree/render/views.js.map +1 -0
- package/dist/core/repo/tree/walk.js +255 -0
- package/dist/core/repo/tree/walk.js.map +1 -0
- package/dist/core/results.js +146 -14
- package/dist/core/results.js.map +1 -1
- package/dist/core/scaffold/landscape.js +239 -0
- package/dist/core/scaffold/landscape.js.map +1 -0
- package/dist/core/scaffold/legacy.js +271 -0
- package/dist/core/scaffold/legacy.js.map +1 -0
- package/dist/core/scaffold/readme.js +84 -0
- package/dist/core/scaffold/readme.js.map +1 -0
- package/dist/core/staging/commit.js +252 -0
- package/dist/core/staging/commit.js.map +1 -0
- package/dist/core/staging/interrupted.js +96 -0
- package/dist/core/staging/interrupted.js.map +1 -0
- package/dist/core/staging/lock.js +268 -0
- package/dist/core/staging/lock.js.map +1 -0
- package/dist/core/staging/recovery/finding.js +35 -0
- package/dist/core/staging/recovery/finding.js.map +1 -0
- package/dist/core/staging/recovery/intent.js +95 -0
- package/dist/core/staging/recovery/intent.js.map +1 -0
- package/dist/core/staging/recovery/recover.js +204 -0
- package/dist/core/staging/recovery/recover.js.map +1 -0
- package/dist/core/staging/recovery/residue.js +62 -0
- package/dist/core/staging/recovery/residue.js.map +1 -0
- package/dist/core/staging/snapshot/manifest.js +188 -0
- package/dist/core/staging/snapshot/manifest.js.map +1 -0
- package/dist/core/staging/snapshot/snapshot.js +196 -0
- package/dist/core/staging/snapshot/snapshot.js.map +1 -0
- package/dist/core/staging/txn/forward.js +181 -0
- package/dist/core/staging/txn/forward.js.map +1 -0
- package/dist/core/staging/txn/journal.js +139 -0
- package/dist/core/staging/txn/journal.js.map +1 -0
- package/dist/core/staging/txn/transaction.js +75 -0
- package/dist/core/staging/txn/transaction.js.map +1 -0
- package/dist/core/staging/writes.js +113 -0
- package/dist/core/staging/writes.js.map +1 -0
- package/dist/core/status/actions/execution.js +60 -0
- package/dist/core/status/actions/execution.js.map +1 -0
- package/dist/core/status/contracts.js +126 -0
- package/dist/core/status/contracts.js.map +1 -0
- package/dist/core/status/feature/artifacts.js +196 -0
- package/dist/core/status/feature/artifacts.js.map +1 -0
- package/dist/core/status/feature/feature.js +214 -0
- package/dist/core/status/feature/feature.js.map +1 -0
- package/dist/core/status/feature/next.js +163 -0
- package/dist/core/status/feature/next.js.map +1 -0
- package/dist/core/status/feature/state.js +21 -0
- package/dist/core/status/feature/state.js.map +1 -0
- package/dist/core/status/feature/words.js +96 -0
- package/dist/core/status/feature/words.js.map +1 -0
- package/dist/core/status/fleet/fleet.js +216 -0
- package/dist/core/status/fleet/fleet.js.map +1 -0
- package/dist/core/status/fleet/next.js +302 -0
- package/dist/core/status/fleet/next.js.map +1 -0
- package/dist/core/status/interrupted.js +97 -0
- package/dist/core/status/interrupted.js.map +1 -0
- package/dist/core/status/report.js +31 -0
- package/dist/core/status/report.js.map +1 -0
- package/dist/core/status/scan.js +41 -0
- package/dist/core/status/scan.js.map +1 -0
- package/dist/core/status/verification.js +216 -0
- package/dist/core/status/verification.js.map +1 -0
- package/dist/core/tasks/packet.js +199 -0
- package/dist/core/tasks/packet.js.map +1 -0
- package/dist/core/tasks/record.js +43 -0
- package/dist/core/tasks/record.js.map +1 -0
- package/dist/core/tasks/sources.js +181 -0
- package/dist/core/tasks/sources.js.map +1 -0
- package/dist/core/tasks/stamps.js +76 -0
- package/dist/core/tasks/stamps.js.map +1 -0
- package/dist/core/tasks/unit.js +0 -0
- package/dist/core/tasks/unit.js.map +1 -0
- package/dist/core/usecases/capability.js +166 -0
- package/dist/core/usecases/capability.js.map +1 -0
- package/dist/core/usecases/delta/claims.js +140 -0
- package/dist/core/usecases/delta/claims.js.map +1 -0
- package/dist/core/usecases/delta/flows.js +101 -0
- package/dist/core/usecases/delta/flows.js.map +1 -0
- package/dist/core/usecases/delta/modified.js +315 -0
- package/dist/core/usecases/delta/modified.js.map +1 -0
- package/dist/core/usecases/delta/overlay.js +76 -0
- package/dist/core/usecases/delta/overlay.js.map +1 -0
- package/dist/core/usecases/fleet.js +296 -0
- package/dist/core/usecases/fleet.js.map +1 -0
- package/dist/core/usecases/grade/capability-tag.js +93 -0
- package/dist/core/usecases/grade/capability-tag.js.map +1 -0
- package/dist/core/usecases/grade/feature.js +88 -0
- package/dist/core/usecases/grade/feature.js.map +1 -0
- package/dist/core/usecases/grade/requirement-tag.js +94 -0
- package/dist/core/usecases/grade/requirement-tag.js.map +1 -0
- package/dist/core/usecases/grade/steps.js +266 -0
- package/dist/core/usecases/grade/steps.js.map +1 -0
- package/dist/core/usecases/grade/usecases.js +112 -0
- package/dist/core/usecases/grade/usecases.js.map +1 -0
- package/dist/core/usecases/operations.js +123 -0
- package/dist/core/usecases/operations.js.map +1 -0
- package/dist/core/usecases/place.js +44 -0
- package/dist/core/usecases/place.js.map +1 -0
- package/dist/core/usecases/service/exclude.js +119 -0
- package/dist/core/usecases/service/exclude.js.map +1 -0
- package/dist/core/usecases/service/flows.js +164 -0
- package/dist/core/usecases/service/flows.js.map +1 -0
- package/dist/core/usecases/suites/participants.js +83 -0
- package/dist/core/usecases/suites/participants.js.map +1 -0
- package/dist/core/usecases/suites/suites.js +45 -0
- package/dist/core/usecases/suites/suites.js.map +1 -0
- package/dist/core/usecases/touch.js +101 -0
- package/dist/core/usecases/touch.js.map +1 -0
- package/dist/core/verify/answers.js +180 -0
- package/dist/core/verify/answers.js.map +1 -0
- package/dist/core/verify/build.js +170 -0
- package/dist/core/verify/build.js.map +1 -0
- package/dist/core/verify/checklist.js +259 -0
- package/dist/core/verify/checklist.js.map +1 -0
- package/dist/core/verify/claims/identity.js +61 -0
- package/dist/core/verify/claims/identity.js.map +1 -0
- package/dist/core/verify/cross/diff.js +97 -0
- package/dist/core/verify/cross/diff.js.map +1 -0
- package/dist/core/verify/evidence/contract.js +169 -0
- package/dist/core/verify/evidence/contract.js.map +1 -0
- package/dist/core/verify/location.js +67 -0
- package/dist/core/verify/location.js.map +1 -0
- package/dist/core/verify/pins/lint.js +158 -0
- package/dist/core/verify/pins/lint.js.map +1 -0
- package/dist/core/verify/pins/pin.js +95 -0
- package/dist/core/verify/pins/pin.js.map +1 -0
- package/dist/core/verify/read/file.js +224 -0
- package/dist/core/verify/read/file.js.map +1 -0
- package/dist/core/verify/read/shape.js +169 -0
- package/dist/core/verify/read/shape.js.map +1 -0
- package/dist/core/verify/read/union.js +105 -0
- package/dist/core/verify/read/union.js.map +1 -0
- package/dist/core/verify/record.js +165 -0
- package/dist/core/verify/record.js.map +1 -0
- package/dist/core/verify/store/commit.js +99 -0
- package/dist/core/verify/store/commit.js.map +1 -0
- package/dist/core/verify/store/render.js +61 -0
- package/dist/core/verify/store/render.js.map +1 -0
- package/dist/core/vocabulary/health.js +91 -0
- package/dist/core/vocabulary/health.js.map +1 -0
- package/dist/core/vocabulary/issue.js +59 -0
- package/dist/core/vocabulary/issue.js.map +1 -0
- package/dist/core/vocabulary/maturity.js +216 -0
- package/dist/core/vocabulary/maturity.js.map +1 -0
- package/dist/core/vocabulary/report.js +90 -0
- package/dist/core/vocabulary/report.js.map +1 -0
- package/dist/core/vocabulary/steps.js +266 -0
- package/dist/core/vocabulary/steps.js.map +1 -0
- package/dist/core/workspace/discover.js +239 -0
- package/dist/core/workspace/discover.js.map +1 -0
- package/dist/core/workspace/render.js +52 -0
- package/dist/core/workspace/render.js.map +1 -0
- package/examples/README.md +232 -0
- package/examples/docs/architecture/adrs/0001-transactional-outbox.md +33 -0
- package/examples/docs/architecture/capabilities.yaml +31 -0
- package/examples/docs/architecture/landscape.likec4 +336 -0
- package/examples/docs/architecture/obligations.yaml +23 -0
- package/examples/docs/architecture/permissions.yaml +50 -0
- package/examples/docs/architecture/services.likec4 +70 -0
- package/examples/docs/architecture/subsystems.likec4 +18 -0
- package/examples/docs/architecture/usecases/order-notification.likec4 +74 -0
- package/examples/docs/capabilities/checkout/spec.md +55 -0
- package/examples/docs/capabilities/identity/tokens/spec.md +42 -0
- package/examples/docs/capabilities/order-notifications/spec.md +43 -0
- package/examples/docs/features/FEAT-101-payment-splitting/adrs/0001-dedicated-split-service.md +18 -0
- package/examples/docs/features/FEAT-101-payment-splitting/delta.likec4 +94 -0
- package/examples/docs/features/FEAT-101-payment-splitting/intent.md +44 -0
- package/examples/docs/features/FEAT-101-payment-splitting/specs/checkout-web/spec.md +21 -0
- package/examples/docs/features/FEAT-101-payment-splitting/specs/payment-service/asyncapi.yaml +132 -0
- package/examples/docs/features/FEAT-101-payment-splitting/specs/payment-service/spec.md +36 -0
- package/examples/docs/features/FEAT-101-payment-splitting/specs/payment-split-service/arch.spec.md +40 -0
- package/examples/docs/features/FEAT-101-payment-splitting/specs/payment-split-service/openapi.yaml +116 -0
- package/examples/docs/features/FEAT-101-payment-splitting/specs/payment-split-service/spec.md +55 -0
- package/examples/docs/features/FEAT-112-retire-order-v1/intent.md +35 -0
- package/examples/docs/features/FEAT-112-retire-order-v1/specs/order-service/openapi.yaml +31 -0
- package/examples/docs/features/FEAT-112-retire-order-v1/specs/order-service/spec.md +17 -0
- package/examples/docs/features/archive/FEAT-088-refunds/.loam-before/files/architecture/landscape.likec4 +253 -0
- package/examples/docs/features/archive/FEAT-088-refunds/.loam-before/files/services/order-service/spec.md +121 -0
- package/examples/docs/features/archive/FEAT-088-refunds/.loam-before/files/services/payment-service/openapi.yaml +111 -0
- package/examples/docs/features/archive/FEAT-088-refunds/.loam-before/files/services/payment-service/spec.md +58 -0
- package/examples/docs/features/archive/FEAT-088-refunds/.loam-before/manifest.json +32 -0
- package/examples/docs/features/archive/FEAT-088-refunds/adrs/0001-refunds-stay-in-payment-service.md +26 -0
- package/examples/docs/features/archive/FEAT-088-refunds/delta.likec4 +28 -0
- package/examples/docs/features/archive/FEAT-088-refunds/intent.md +26 -0
- package/examples/docs/features/archive/FEAT-088-refunds/specs/order-service/spec.md +37 -0
- package/examples/docs/features/archive/FEAT-088-refunds/specs/payment-service/openapi.yaml +73 -0
- package/examples/docs/features/archive/FEAT-088-refunds/specs/payment-service/spec.md +23 -0
- package/examples/docs/features/archive/FEAT-088-refunds/verification.yaml +76 -0
- package/examples/docs/features/archive/FEAT-120-refund-notification/.loam-before/files/architecture/landscape.likec4 +275 -0
- package/examples/docs/features/archive/FEAT-120-refund-notification/.loam-before/files/services/payment-service/asyncapi.yaml +96 -0
- package/examples/docs/features/archive/FEAT-120-refund-notification/.loam-before/files/services/payment-service/spec.md +82 -0
- package/examples/docs/features/archive/FEAT-120-refund-notification/.loam-before/files/services/platform/notification-service/asyncapi.yaml +164 -0
- package/examples/docs/features/archive/FEAT-120-refund-notification/.loam-before/files/services/platform/notification-service/spec.md +91 -0
- package/examples/docs/features/archive/FEAT-120-refund-notification/.loam-before/manifest.json +46 -0
- package/examples/docs/features/archive/FEAT-120-refund-notification/delta.likec4 +36 -0
- package/examples/docs/features/archive/FEAT-120-refund-notification/intent.md +22 -0
- package/examples/docs/features/archive/FEAT-120-refund-notification/scenario-report.json +10 -0
- package/examples/docs/features/archive/FEAT-120-refund-notification/specs/notification-service/asyncapi.yaml +208 -0
- package/examples/docs/features/archive/FEAT-120-refund-notification/specs/notification-service/spec.md +24 -0
- package/examples/docs/features/archive/FEAT-120-refund-notification/specs/payment-service/asyncapi.yaml +137 -0
- package/examples/docs/features/archive/FEAT-120-refund-notification/specs/payment-service/spec.md +31 -0
- package/examples/docs/features/archive/FEAT-120-refund-notification/verification.yaml +84 -0
- package/examples/docs/glossary/order.md +15 -0
- package/examples/docs/glossary/payments/authorization.md +14 -0
- package/examples/docs/likec4.config.json +8 -0
- package/examples/docs/loam.json +3 -0
- package/examples/docs/services/checkout-web/model.likec4 +92 -0
- package/examples/docs/services/checkout-web/spec.md +91 -0
- package/examples/docs/services/checkout-web/ui/pages/checkout.page.yaml +40 -0
- package/examples/docs/services/checkout-web/ui/pages/order-status.page.yaml +24 -0
- package/examples/docs/services/checkout-web/ui/pages/split-payment.page.yaml +26 -0
- package/examples/docs/services/order-service/adrs/0001-orchestrated-order-lifecycle.md +52 -0
- package/examples/docs/services/order-service/arch.spec.md +134 -0
- package/examples/docs/services/order-service/asyncapi.yaml +109 -0
- package/examples/docs/services/order-service/health.yaml +57 -0
- package/examples/docs/services/order-service/model.likec4 +126 -0
- package/examples/docs/services/order-service/openapi.yaml +257 -0
- package/examples/docs/services/order-service/runbook.md +62 -0
- package/examples/docs/services/order-service/spec.md +134 -0
- package/examples/docs/services/payment-service/adrs/0001-payments-outbox.md +18 -0
- package/examples/docs/services/payment-service/adrs/0002-idempotency-keys-on-authorization.md +27 -0
- package/examples/docs/services/payment-service/arch.spec.md +76 -0
- package/examples/docs/services/payment-service/asyncapi.yaml +130 -0
- package/examples/docs/services/payment-service/health.yaml +39 -0
- package/examples/docs/services/payment-service/model.likec4 +68 -0
- package/examples/docs/services/payment-service/openapi.yaml +151 -0
- package/examples/docs/services/payment-service/runbook.md +37 -0
- package/examples/docs/services/payment-service/spec.md +88 -0
- package/examples/docs/services/platform/identity-service/adrs/0001-token-introspection-over-local-validation.md +60 -0
- package/examples/docs/services/platform/identity-service/arch.spec.md +120 -0
- package/examples/docs/services/platform/identity-service/health.yaml +70 -0
- package/examples/docs/services/platform/identity-service/model.likec4 +81 -0
- package/examples/docs/services/platform/identity-service/openapi.yaml +197 -0
- package/examples/docs/services/platform/identity-service/runbook.md +95 -0
- package/examples/docs/services/platform/identity-service/spec.md +119 -0
- package/examples/docs/services/platform/notification-service/asyncapi.yaml +200 -0
- package/examples/docs/services/platform/notification-service/health.yaml +40 -0
- package/examples/docs/services/platform/notification-service/model.likec4 +97 -0
- package/examples/docs/services/platform/notification-service/runbook.md +48 -0
- package/examples/docs/services/platform/notification-service/spec.md +112 -0
- package/examples/docs/services/platform/subsystem.yaml +2 -0
- package/examples/fleet.yaml +57 -0
- package/package.json +19 -6
- package/dist/commands/adopt.js +0 -240
- package/dist/commands/adopt.js.map +0 -1
- package/dist/commands/archive.js +0 -1313
- package/dist/commands/archive.js.map +0 -1
- package/dist/commands/delta.js +0 -388
- package/dist/commands/delta.js.map +0 -1
- package/dist/commands/docs-repo-gate.js.map +0 -1
- package/dist/commands/format.js +0 -17
- package/dist/commands/format.js.map +0 -1
- package/dist/commands/gherkin.js +0 -309
- package/dist/commands/gherkin.js.map +0 -1
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/list.js +0 -295
- package/dist/commands/list.js.map +0 -1
- package/dist/commands/migrate-openspec.js +0 -950
- package/dist/commands/migrate-openspec.js.map +0 -1
- package/dist/commands/new.js +0 -413
- package/dist/commands/new.js.map +0 -1
- package/dist/commands/rebase.js +0 -356
- package/dist/commands/rebase.js.map +0 -1
- package/dist/commands/show.js +0 -320
- package/dist/commands/show.js.map +0 -1
- package/dist/commands/status.js +0 -262
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/unarchive.js +0 -317
- package/dist/commands/unarchive.js.map +0 -1
- package/dist/commands/validate.js +0 -1773
- package/dist/commands/validate.js.map +0 -1
- package/dist/commands/verify.js +0 -775
- package/dist/commands/verify.js.map +0 -1
- package/dist/commands/vouch.js +0 -421
- package/dist/commands/vouch.js.map +0 -1
- package/dist/core/agent.js +0 -2173
- package/dist/core/agent.js.map +0 -1
- package/dist/core/agents-stamp.js.map +0 -1
- package/dist/core/arch.js +0 -130
- package/dist/core/arch.js.map +0 -1
- package/dist/core/asyncapi.js +0 -253
- package/dist/core/asyncapi.js.map +0 -1
- package/dist/core/brief.js +0 -755
- package/dist/core/brief.js.map +0 -1
- package/dist/core/coherence.js +0 -577
- package/dist/core/coherence.js.map +0 -1
- package/dist/core/concurrency.js.map +0 -1
- package/dist/core/config.js.map +0 -1
- package/dist/core/delta.js +0 -476
- package/dist/core/delta.js.map +0 -1
- package/dist/core/dependencies.js +0 -356
- package/dist/core/dependencies.js.map +0 -1
- package/dist/core/doctor.js +0 -596
- package/dist/core/doctor.js.map +0 -1
- package/dist/core/document-bytes.js.map +0 -1
- package/dist/core/explore.js +0 -225
- package/dist/core/explore.js.map +0 -1
- package/dist/core/frontmatter.js.map +0 -1
- package/dist/core/gherkin.js +0 -463
- package/dist/core/gherkin.js.map +0 -1
- package/dist/core/health.js +0 -67
- package/dist/core/health.js.map +0 -1
- package/dist/core/ids.js +0 -122
- package/dist/core/ids.js.map +0 -1
- package/dist/core/issue.js +0 -9
- package/dist/core/issue.js.map +0 -1
- package/dist/core/json.js +0 -74
- package/dist/core/json.js.map +0 -1
- package/dist/core/likec4.js +0 -489
- package/dist/core/likec4.js.map +0 -1
- package/dist/core/maturity.js +0 -66
- package/dist/core/maturity.js.map +0 -1
- package/dist/core/openapi-merge.js +0 -552
- package/dist/core/openapi-merge.js.map +0 -1
- package/dist/core/openapi.js.map +0 -1
- package/dist/core/openspec-inventory.js +0 -1440
- package/dist/core/openspec-inventory.js.map +0 -1
- package/dist/core/path-safety.js.map +0 -1
- package/dist/core/provenance.js +0 -787
- package/dist/core/provenance.js.map +0 -1
- package/dist/core/records.js.map +0 -1
- package/dist/core/repo.js +0 -438
- package/dist/core/repo.js.map +0 -1
- package/dist/core/report.js +0 -47
- package/dist/core/report.js.map +0 -1
- package/dist/core/spec.js +0 -505
- package/dist/core/spec.js.map +0 -1
- package/dist/core/staging.js +0 -890
- package/dist/core/staging.js.map +0 -1
- package/dist/core/status.js +0 -1132
- package/dist/core/status.js.map +0 -1
- package/dist/core/steps.js +0 -72
- package/dist/core/steps.js.map +0 -1
- package/dist/core/verify.js +0 -807
- package/dist/core/verify.js.map +0 -1
- package/dist/core/version.js.map +0 -1
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# The async contract — read-only. Every operation here carries `action: receive`:
|
|
2
|
+
# this service produces no message and exposes no HTTP operation, so the whole of
|
|
3
|
+
# what it promises the fleet is what it does with three topics.
|
|
4
|
+
#
|
|
5
|
+
# AsyncAPI 3.0 only. Its operations are named top-level objects carrying
|
|
6
|
+
# `action: send|receive`, which is what makes a message's direction legible;
|
|
7
|
+
# 2.x spells the same thing as publish/subscribe under a channel, where the two
|
|
8
|
+
# words are ambiguous about whose perspective they take — and a 2.x document
|
|
9
|
+
# reads here as a contract with no messages at all.
|
|
10
|
+
#
|
|
11
|
+
# The name is the spine: the landscape edge's `metadata { consumes }`, the
|
|
12
|
+
# requirement's `Consumes:` line and `name` below are one name spelled three
|
|
13
|
+
# times, and they must be identical. For a consumer the line that grades THIS
|
|
14
|
+
# file is the requirement's — a `Consumes:` naming a message no operation here
|
|
15
|
+
# receives is `spec-event.message-undefined`. The edge's copy answers the other
|
|
16
|
+
# question, the one no single repository can: whether anybody publishes the
|
|
17
|
+
# name at all. Deleting a `Consumes:` line therefore does not move a check onto
|
|
18
|
+
# the landscape, it removes one.
|
|
19
|
+
#
|
|
20
|
+
# WHY THE PAYLOADS ARE HERE AT ALL, and why one of them is different in kind:
|
|
21
|
+
#
|
|
22
|
+
# * `order.OrderPlaced` and `payment.PaymentCaptured` are produced INSIDE the
|
|
23
|
+
# fleet, so order-service's and payment-service's own asyncapi.yaml are the
|
|
24
|
+
# authoritative contracts. What is restated below is the subset this consumer
|
|
25
|
+
# actually reads — enough that the handler is codeable from this file, not a
|
|
26
|
+
# second source of truth for the event.
|
|
27
|
+
#
|
|
28
|
+
# * `crm.CustomerUpdated` is produced by `salesforce`, an `#external` element in
|
|
29
|
+
# the landscape. There is no services/salesforce/, there never will be, and so
|
|
30
|
+
# no producer contract exists anywhere in this docs repo. That is a legal
|
|
31
|
+
# shape — loam recognizes an external producer and does not report
|
|
32
|
+
# `spine.message-unproduced` — but it shifts the contract question onto the
|
|
33
|
+
# only file that can answer it: this one. `spine.message-external` (warn)
|
|
34
|
+
# fires for exactly as long as this document defines no shape for the message,
|
|
35
|
+
# and stops the moment it does. The payload below is therefore not a
|
|
36
|
+
# convenience copy; it IS the fleet's contract for that message, and the
|
|
37
|
+
# reason the finding is absent from this service's validate output.
|
|
38
|
+
asyncapi: 3.0.0
|
|
39
|
+
info:
|
|
40
|
+
title: notification-service events
|
|
41
|
+
version: "1.0"
|
|
42
|
+
|
|
43
|
+
channels:
|
|
44
|
+
orderEvents:
|
|
45
|
+
address: order.events.v1
|
|
46
|
+
description: Order lifecycle events, produced by order-service
|
|
47
|
+
messages:
|
|
48
|
+
OrderPlaced:
|
|
49
|
+
$ref: '#/components/messages/OrderPlaced'
|
|
50
|
+
paymentEvents:
|
|
51
|
+
address: payment.events.v1
|
|
52
|
+
description: Payment lifecycle events, produced by payment-service's outbox relay
|
|
53
|
+
messages:
|
|
54
|
+
PaymentCaptured:
|
|
55
|
+
$ref: '#/components/messages/PaymentCaptured'
|
|
56
|
+
crmEvents:
|
|
57
|
+
address: crm.events.v1
|
|
58
|
+
description: Customer master-data events, produced by salesforce (outside the fleet)
|
|
59
|
+
messages:
|
|
60
|
+
CustomerUpdated:
|
|
61
|
+
$ref: '#/components/messages/CustomerUpdated'
|
|
62
|
+
|
|
63
|
+
# One operation per message rather than one per channel, so that adding a second
|
|
64
|
+
# message to a topic later is an addition here instead of a silent widening: an
|
|
65
|
+
# operation that lists no messages applies to EVERY message of its channel, and
|
|
66
|
+
# would start receiving contracts nobody read.
|
|
67
|
+
operations:
|
|
68
|
+
receiveOrderPlaced:
|
|
69
|
+
action: receive
|
|
70
|
+
channel:
|
|
71
|
+
$ref: '#/channels/orderEvents'
|
|
72
|
+
messages:
|
|
73
|
+
- $ref: '#/channels/orderEvents/messages/OrderPlaced'
|
|
74
|
+
receivePaymentCaptured:
|
|
75
|
+
action: receive
|
|
76
|
+
channel:
|
|
77
|
+
$ref: '#/channels/paymentEvents'
|
|
78
|
+
messages:
|
|
79
|
+
- $ref: '#/channels/paymentEvents/messages/PaymentCaptured'
|
|
80
|
+
receiveCustomerUpdated:
|
|
81
|
+
action: receive
|
|
82
|
+
channel:
|
|
83
|
+
$ref: '#/channels/crmEvents'
|
|
84
|
+
messages:
|
|
85
|
+
- $ref: '#/channels/crmEvents/messages/CustomerUpdated'
|
|
86
|
+
|
|
87
|
+
components:
|
|
88
|
+
messages:
|
|
89
|
+
OrderPlaced:
|
|
90
|
+
# Namespaced by the domain that OWNS the message, never by the service
|
|
91
|
+
# reading it: `order.` says order-service is the one producer, and two
|
|
92
|
+
# services declaring they send this name would be
|
|
93
|
+
# `asyncapi.message-contested` — which contract a consumer reads must not
|
|
94
|
+
# be a coin flip.
|
|
95
|
+
name: order.OrderPlaced
|
|
96
|
+
title: Order placed
|
|
97
|
+
payload:
|
|
98
|
+
type: object
|
|
99
|
+
# A payload declaring no shape — absent, or a bare `type: object` — is
|
|
100
|
+
# `asyncapi.payload-undescribed`: the name joins the spine while nothing
|
|
101
|
+
# says what a handler would read. loam probes for presence and never
|
|
102
|
+
# reads a field, which is what keeps a later move to Avro a
|
|
103
|
+
# `schemaFormat:` line here and no change in loam.
|
|
104
|
+
required: [orderId, customerId, placedAt]
|
|
105
|
+
properties:
|
|
106
|
+
orderId:
|
|
107
|
+
type: string
|
|
108
|
+
format: uuid
|
|
109
|
+
description: The idempotency key for the confirmation — one send per orderId
|
|
110
|
+
customerId:
|
|
111
|
+
type: string
|
|
112
|
+
format: uuid
|
|
113
|
+
placedAt:
|
|
114
|
+
type: string
|
|
115
|
+
format: date-time
|
|
116
|
+
PaymentCaptured:
|
|
117
|
+
name: payment.PaymentCaptured
|
|
118
|
+
title: Payment captured
|
|
119
|
+
payload:
|
|
120
|
+
type: object
|
|
121
|
+
required: [paymentId, orderId, capturedAmount, currency, capturedAt]
|
|
122
|
+
properties:
|
|
123
|
+
paymentId:
|
|
124
|
+
type: string
|
|
125
|
+
format: uuid
|
|
126
|
+
orderId:
|
|
127
|
+
type: string
|
|
128
|
+
format: uuid
|
|
129
|
+
description: What joins a receipt to the order the customer was told about
|
|
130
|
+
capturedAmount:
|
|
131
|
+
type: integer
|
|
132
|
+
description: minor units, restated on the receipt exactly as captured
|
|
133
|
+
currency:
|
|
134
|
+
type: string
|
|
135
|
+
pattern: '^[A-Z]{3}$'
|
|
136
|
+
capturedAt:
|
|
137
|
+
type: string
|
|
138
|
+
format: date-time
|
|
139
|
+
CustomerUpdated:
|
|
140
|
+
name: crm.CustomerUpdated
|
|
141
|
+
title: Customer contact details updated
|
|
142
|
+
payload:
|
|
143
|
+
type: object
|
|
144
|
+
# `version` is load-bearing rather than descriptive: the CRM redelivers
|
|
145
|
+
# and reorders, and the "out-of-order update is ignored" scenario in
|
|
146
|
+
# spec.md is only implementable because this field is in the contract.
|
|
147
|
+
# Nothing outside this document defines it.
|
|
148
|
+
required: [customerId, version, updatedAt]
|
|
149
|
+
properties:
|
|
150
|
+
customerId:
|
|
151
|
+
type: string
|
|
152
|
+
format: uuid
|
|
153
|
+
version:
|
|
154
|
+
type: integer
|
|
155
|
+
description: Monotonic per customer; an update at or below the stored version is dropped
|
|
156
|
+
email:
|
|
157
|
+
type: string
|
|
158
|
+
format: email
|
|
159
|
+
phone:
|
|
160
|
+
type: string
|
|
161
|
+
description: E.164; absent when the customer has no phone on record
|
|
162
|
+
updatedAt:
|
|
163
|
+
type: string
|
|
164
|
+
format: date-time
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
service: notification-service
|
|
3
|
+
status: draft
|
|
4
|
+
owner: growth-team
|
|
5
|
+
sources:
|
|
6
|
+
- internal/consumer/
|
|
7
|
+
- internal/sender/
|
|
8
|
+
- cmd/notifier/
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# notification-service
|
|
12
|
+
|
|
13
|
+
Turns fleet events into customer email and SMS. This is the **living spec** — the complete
|
|
14
|
+
current state; feature deltas merge in here on `loam archive`.
|
|
15
|
+
|
|
16
|
+
This service exposes **no HTTP API**: the liveness and readiness probes in `health.yaml` are the
|
|
17
|
+
only ports it listens on, and nothing in the fleet calls them. That is a documented shape rather
|
|
18
|
+
than a gap — no edge in the landscape carries `metadata { op }` into this service, so
|
|
19
|
+
`loam validate` stays silent about the missing `openapi.yaml` instead of warning. The silence is
|
|
20
|
+
earned rather than granted: it turns into a warning the moment the landscape stops proving
|
|
21
|
+
nobody calls this service — it goes missing, or it stops parsing — and into an error the moment
|
|
22
|
+
a requirement here grows an `Operations:` line or an op-linked edge points in. Every requirement
|
|
23
|
+
below therefore carries a `Consumes:` line and no `Operations:` line: what this service promises
|
|
24
|
+
is a reaction to a message, and the message name is the only join it has.
|
|
25
|
+
|
|
26
|
+
## Requirements
|
|
27
|
+
|
|
28
|
+
### Requirement: Notify a customer when an order is placed
|
|
29
|
+
|
|
30
|
+
Requirement-ID: NTF-ORDER-PLACED
|
|
31
|
+
The service SHALL send exactly one order-confirmation notification per order, addressed to the
|
|
32
|
+
contact details it holds for the customer at the moment the confirmation is rendered.
|
|
33
|
+
|
|
34
|
+
Consumes: order.OrderPlaced
|
|
35
|
+
Capability: order-notifications
|
|
36
|
+
|
|
37
|
+
#### Scenario: First delivery of an order event
|
|
38
|
+
- **Given** an `order.OrderPlaced` carrying an `orderId` this service has never sent a confirmation for
|
|
39
|
+
- **When** the consumer handles it
|
|
40
|
+
- **Then** a confirmation is rendered from the contact details on file and handed to the provider
|
|
41
|
+
- **And** the delivery log records the send under that `orderId`
|
|
42
|
+
|
|
43
|
+
#### Scenario: The broker redelivers an event already sent
|
|
44
|
+
- **Given** a confirmation already recorded in the delivery log for that `orderId`
|
|
45
|
+
- **When** kafka redelivers the same `order.OrderPlaced`
|
|
46
|
+
- **Then** no second notification is sent and the event is acknowledged
|
|
47
|
+
- **And** the customer is not told twice about one order
|
|
48
|
+
|
|
49
|
+
### Requirement: Send a receipt when a payment is captured
|
|
50
|
+
|
|
51
|
+
Requirement-ID: NTF-RECEIPT
|
|
52
|
+
The service SHALL send a receipt for every captured payment, stating the captured amount and
|
|
53
|
+
currency exactly as the capture reported them.
|
|
54
|
+
|
|
55
|
+
Consumes: payment.PaymentCaptured
|
|
56
|
+
Capability: order-notifications
|
|
57
|
+
|
|
58
|
+
#### Scenario: Receipt follows a capture
|
|
59
|
+
- **Given** a `payment.PaymentCaptured` for an order this service has already confirmed
|
|
60
|
+
- **When** the consumer handles it
|
|
61
|
+
- **Then** a receipt showing `capturedAmount` in `currency` is sent to the contact on file
|
|
62
|
+
|
|
63
|
+
#### Scenario: A capture arrives before the order it belongs to
|
|
64
|
+
- **Given** a `payment.PaymentCaptured` whose `orderId` this service has not yet seen on the order topic
|
|
65
|
+
- **When** the consumer handles it
|
|
66
|
+
- **Then** the receipt is held until the matching `order.OrderPlaced` arrives, and sent then
|
|
67
|
+
- **And** no receipt is sent for an order the customer has not been told exists
|
|
68
|
+
|
|
69
|
+
### Requirement: Keep contact details current
|
|
70
|
+
|
|
71
|
+
Requirement-ID: NTF-CONTACT
|
|
72
|
+
The service SHALL keep its copy of a customer's email and phone in step with the CRM, applying
|
|
73
|
+
an update only when it is newer than the copy already held.
|
|
74
|
+
|
|
75
|
+
Consumes: crm.CustomerUpdated
|
|
76
|
+
|
|
77
|
+
#### Scenario: A newer update replaces the copy on file
|
|
78
|
+
- **Given** contact details held at `version` 4 for a customer
|
|
79
|
+
- **When** a `crm.CustomerUpdated` for that customer arrives at `version` 5
|
|
80
|
+
- **Then** the stored email and phone are replaced with the ones the event carries
|
|
81
|
+
|
|
82
|
+
#### Scenario: An out-of-order update is ignored
|
|
83
|
+
- **Given** contact details held at `version` 5 for a customer
|
|
84
|
+
- **When** a `crm.CustomerUpdated` for that customer arrives at `version` 4
|
|
85
|
+
- **Then** the stored details are left as they are
|
|
86
|
+
- **And** the next notification still goes to the newer address
|
|
87
|
+
|
|
88
|
+
#### Scenario: A customer this service has never notified
|
|
89
|
+
- **Given** a `crm.CustomerUpdated` for a `customerId` with no contact details on file
|
|
90
|
+
- **When** the consumer handles it
|
|
91
|
+
- **Then** the details are stored, so the first notification for that customer is addressable
|
package/examples/docs/features/archive/FEAT-120-refund-notification/.loam-before/manifest.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"feature": "FEAT-120",
|
|
4
|
+
"dirName": "FEAT-120-refund-notification",
|
|
5
|
+
"archivedAt": "2026-08-28T18:50:02.492Z",
|
|
6
|
+
"files": [
|
|
7
|
+
{
|
|
8
|
+
"path": "services/platform/notification-service/spec.md",
|
|
9
|
+
"service": "notification-service",
|
|
10
|
+
"artifact": "spec.md",
|
|
11
|
+
"existed": true,
|
|
12
|
+
"after": "94f8507d205439b713f344663f94c04e54b738d991e84acf381b381889d36264",
|
|
13
|
+
"before": "3be6c0aaa97062abe82b07ade26d901b1a29d4dfc4efdb9ee8fa2228fd3071c5"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"path": "services/payment-service/spec.md",
|
|
17
|
+
"service": "payment-service",
|
|
18
|
+
"artifact": "spec.md",
|
|
19
|
+
"existed": true,
|
|
20
|
+
"after": "14b02e45cbf3ed5a3a2a2f94afea36ee2c95179f0c2a78703af7680d1b4efd3f",
|
|
21
|
+
"before": "22b06835887686f28b8212a4c1ca89fe2cbf42f49497786fcf76bb9bf1e5ca61"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"path": "services/platform/notification-service/asyncapi.yaml",
|
|
25
|
+
"service": "notification-service",
|
|
26
|
+
"artifact": "asyncapi.yaml",
|
|
27
|
+
"existed": true,
|
|
28
|
+
"after": "c868aefa3c3bc2b72cab83c86e4fd4d803480a8a9b2ffc61bfa50af2922bfeae",
|
|
29
|
+
"before": "f7f788c1b7ee51593bc96441cd062876f4df89932c6ef65d99f451d843f1c0b6"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"path": "services/payment-service/asyncapi.yaml",
|
|
33
|
+
"service": "payment-service",
|
|
34
|
+
"artifact": "asyncapi.yaml",
|
|
35
|
+
"existed": true,
|
|
36
|
+
"after": "c79f510cb4d3f7b1a55ee1f1989c033f306e7cc80b96d09f13e95480647ec7b8",
|
|
37
|
+
"before": "8386d542683df59643eafabdb35ebf77fab370b5622614a82071f8566887b8e9"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"path": "architecture/landscape.likec4",
|
|
41
|
+
"existed": true,
|
|
42
|
+
"after": "eb7325adc158f06f883e15473b97960c6340fa2a046090dd80ba10460d5a8499",
|
|
43
|
+
"before": "93ce5bbe908a54949700d4a7a8992ca1eebbcbbfb1ffef7eb28548521890148b"
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// FEAT-120 — architecture delta.
|
|
2
|
+
//
|
|
3
|
+
// One new edge: the refund event reaching the service that tells the customer.
|
|
4
|
+
// Everything tagged #FEAT-120 is exactly what `loam archive` folds into
|
|
5
|
+
// architecture/landscape.likec4; the elements below are untagged context so the
|
|
6
|
+
// view has something to draw the edge between.
|
|
7
|
+
|
|
8
|
+
specification {
|
|
9
|
+
element softwareSystem
|
|
10
|
+
element topic
|
|
11
|
+
tag FEAT-120
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
model {
|
|
15
|
+
marketplace = softwareSystem 'marketplace' {
|
|
16
|
+
notificationService = softwareSystem 'notification-service'
|
|
17
|
+
}
|
|
18
|
+
kafka = softwareSystem 'kafka' {
|
|
19
|
+
paymentEvents = topic 'payment.events'
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// `consumes` binds the edge's TARGET, which is why this arrow points out of
|
|
23
|
+
// the topic and into the service: the consumer is what the message reaches.
|
|
24
|
+
kafka.paymentEvents -> marketplace.notificationService 'PaymentRefunded triggers the refund notice' {
|
|
25
|
+
#FEAT-120
|
|
26
|
+
metadata {
|
|
27
|
+
consumes 'payment.PaymentRefunded'
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
views {
|
|
33
|
+
view feat_120 {
|
|
34
|
+
include *
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: FEAT-120
|
|
3
|
+
status: built
|
|
4
|
+
owner: growth-team
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# FEAT-120 — Tell the customer when a refund is issued
|
|
8
|
+
|
|
9
|
+
FEAT-088 gave the fleet refunds, and stopped at the money. A customer whose order is
|
|
10
|
+
cancelled after capture gets their funds back and hears nothing: support tickets asking
|
|
11
|
+
"has my refund gone through" are the second-most common contact reason this quarter,
|
|
12
|
+
behind delivery.
|
|
13
|
+
|
|
14
|
+
The refund already happens at a point payment-service knows exactly — the acquirer has
|
|
15
|
+
reconciled and the payment is recorded as refunded. That is the moment worth announcing,
|
|
16
|
+
and nothing announces it. This feature puts `payment.PaymentRefunded` on the existing
|
|
17
|
+
payment topic and has notification-service turn it into the message the customer is
|
|
18
|
+
waiting for.
|
|
19
|
+
|
|
20
|
+
Deliberately NOT in scope: a refund status endpoint. A customer who has been told does
|
|
21
|
+
not need somewhere to look, and an endpoint nobody calls is a contract to maintain
|
|
22
|
+
forever. If the tickets continue after this ships, that is the evidence for one.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"loamScenarioReport": 1,
|
|
3
|
+
"results": [
|
|
4
|
+
{ "digest": "f8974d79182ec37d", "status": "passed", "test": "RefundPaymentTest#refundsInFull" },
|
|
5
|
+
{ "digest": "24ec0c2dceacc6b0", "status": "passed", "test": "RefundPaymentTest#refusesSecondRefund" },
|
|
6
|
+
{ "digest": "7affc9a6ee57a0d8", "status": "passed", "test": "RefundOutboxTest#publishesOnceAfterReconciliation" },
|
|
7
|
+
{ "digest": "b0bb55d679e9c5c2", "status": "passed", "test": "TestRefundNotice_SendsOnce" },
|
|
8
|
+
{ "digest": "b690937cc4dfdc74", "status": "passed", "test": "TestRefundNotice_IgnoresRedelivery" }
|
|
9
|
+
]
|
|
10
|
+
}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
# The async contract — read-only. Every operation here carries `action: receive`:
|
|
2
|
+
# this service produces no message and exposes no HTTP operation, so the whole of
|
|
3
|
+
# what it promises the fleet is what it does with three topics.
|
|
4
|
+
#
|
|
5
|
+
# AsyncAPI 3.0 only. Its operations are named top-level objects carrying
|
|
6
|
+
# `action: send|receive`, which is what makes a message's direction legible;
|
|
7
|
+
# 2.x spells the same thing as publish/subscribe under a channel, where the two
|
|
8
|
+
# words are ambiguous about whose perspective they take — and a 2.x document
|
|
9
|
+
# reads here as a contract with no messages at all.
|
|
10
|
+
#
|
|
11
|
+
# The name is the spine: the landscape edge's `metadata { consumes }`, the
|
|
12
|
+
# requirement's `Consumes:` line and `name` below are one name spelled three
|
|
13
|
+
# times, and they must be identical. For a consumer the line that grades THIS
|
|
14
|
+
# file is the requirement's — a `Consumes:` naming a message no operation here
|
|
15
|
+
# receives is `spec-event.message-undefined`. The edge's copy answers the other
|
|
16
|
+
# question, the one no single repository can: whether anybody publishes the
|
|
17
|
+
# name at all. Deleting a `Consumes:` line therefore does not move a check onto
|
|
18
|
+
# the landscape, it removes one.
|
|
19
|
+
#
|
|
20
|
+
# WHY THE PAYLOADS ARE HERE AT ALL, and why one of them is different in kind:
|
|
21
|
+
#
|
|
22
|
+
# * `order.OrderPlaced` and `payment.PaymentCaptured` are produced INSIDE the
|
|
23
|
+
# fleet, so order-service's and payment-service's own asyncapi.yaml are the
|
|
24
|
+
# authoritative contracts. What is restated below is the subset this consumer
|
|
25
|
+
# actually reads — enough that the handler is codeable from this file, not a
|
|
26
|
+
# second source of truth for the event.
|
|
27
|
+
#
|
|
28
|
+
# * `crm.CustomerUpdated` is produced by `salesforce`, an `#external` element in
|
|
29
|
+
# the landscape. There is no services/salesforce/, there never will be, and so
|
|
30
|
+
# no producer contract exists anywhere in this docs repo. That is a legal
|
|
31
|
+
# shape — loam recognizes an external producer and does not report
|
|
32
|
+
# `spine.message-unproduced` — but it shifts the contract question onto the
|
|
33
|
+
# only file that can answer it: this one. `spine.message-external` (warn)
|
|
34
|
+
# fires for exactly as long as this document defines no shape for the message,
|
|
35
|
+
# and stops the moment it does. The payload below is therefore not a
|
|
36
|
+
# convenience copy; it IS the fleet's contract for that message, and the
|
|
37
|
+
# reason the finding is absent from this service's validate output.
|
|
38
|
+
asyncapi: 3.0.0
|
|
39
|
+
info:
|
|
40
|
+
title: notification-service events
|
|
41
|
+
version: "1.0"
|
|
42
|
+
|
|
43
|
+
channels:
|
|
44
|
+
orderEvents:
|
|
45
|
+
address: order.events.v1
|
|
46
|
+
description: Order lifecycle events, produced by order-service
|
|
47
|
+
messages:
|
|
48
|
+
OrderPlaced:
|
|
49
|
+
$ref: '#/components/messages/OrderPlaced'
|
|
50
|
+
x-loam-based-on: dfe4fe6a1cca0df9
|
|
51
|
+
paymentEvents:
|
|
52
|
+
address: payment.events.v1
|
|
53
|
+
description: Payment lifecycle events, produced by payment-service's outbox relay
|
|
54
|
+
messages:
|
|
55
|
+
PaymentCaptured:
|
|
56
|
+
$ref: '#/components/messages/PaymentCaptured'
|
|
57
|
+
# NEW: the same topic, one more message. A consumer that already reads
|
|
58
|
+
# payment.events for the receipt reads the refund from it too.
|
|
59
|
+
PaymentRefunded:
|
|
60
|
+
$ref: '#/components/messages/PaymentRefunded'
|
|
61
|
+
x-loam-based-on: 12f1f33accf4b2a1
|
|
62
|
+
crmEvents:
|
|
63
|
+
address: crm.events.v1
|
|
64
|
+
description: Customer master-data events, produced by salesforce (outside the fleet)
|
|
65
|
+
messages:
|
|
66
|
+
CustomerUpdated:
|
|
67
|
+
$ref: '#/components/messages/CustomerUpdated'
|
|
68
|
+
x-loam-based-on: c3a0af34dc0301d7
|
|
69
|
+
|
|
70
|
+
# One operation per message rather than one per channel, so that adding a second
|
|
71
|
+
# message to a topic later is an addition here instead of a silent widening: an
|
|
72
|
+
# operation that lists no messages applies to EVERY message of its channel, and
|
|
73
|
+
# would start receiving contracts nobody read.
|
|
74
|
+
operations:
|
|
75
|
+
receiveOrderPlaced:
|
|
76
|
+
action: receive
|
|
77
|
+
channel:
|
|
78
|
+
$ref: '#/channels/orderEvents'
|
|
79
|
+
messages:
|
|
80
|
+
- $ref: '#/channels/orderEvents/messages/OrderPlaced'
|
|
81
|
+
x-loam-based-on: 93b230182c7aa28f
|
|
82
|
+
receivePaymentCaptured:
|
|
83
|
+
action: receive
|
|
84
|
+
channel:
|
|
85
|
+
$ref: '#/channels/paymentEvents'
|
|
86
|
+
messages:
|
|
87
|
+
- $ref: '#/channels/paymentEvents/messages/PaymentCaptured'
|
|
88
|
+
x-loam-based-on: 6d19f39f58ff9ef5
|
|
89
|
+
receivePaymentRefunded:
|
|
90
|
+
action: receive
|
|
91
|
+
channel:
|
|
92
|
+
$ref: '#/channels/paymentEvents'
|
|
93
|
+
messages:
|
|
94
|
+
- $ref: '#/channels/paymentEvents/messages/PaymentRefunded'
|
|
95
|
+
receiveCustomerUpdated:
|
|
96
|
+
action: receive
|
|
97
|
+
channel:
|
|
98
|
+
$ref: '#/channels/crmEvents'
|
|
99
|
+
messages:
|
|
100
|
+
- $ref: '#/channels/crmEvents/messages/CustomerUpdated'
|
|
101
|
+
x-loam-based-on: b1a4223de79dc101
|
|
102
|
+
|
|
103
|
+
components:
|
|
104
|
+
messages:
|
|
105
|
+
# The consumer's copy of the producer's contract. loam checks the NAME
|
|
106
|
+
# joins; keeping the payload here is what lets a reader of this service
|
|
107
|
+
# see what it actually receives without opening payment-service.
|
|
108
|
+
PaymentRefunded:
|
|
109
|
+
name: payment.PaymentRefunded
|
|
110
|
+
title: Payment refunded
|
|
111
|
+
payload:
|
|
112
|
+
type: object
|
|
113
|
+
required: [ paymentId, orderId, refundedAmount, currency, refundedAt ]
|
|
114
|
+
properties:
|
|
115
|
+
paymentId:
|
|
116
|
+
type: string
|
|
117
|
+
format: uuid
|
|
118
|
+
orderId:
|
|
119
|
+
type: string
|
|
120
|
+
refundedAmount:
|
|
121
|
+
type: integer
|
|
122
|
+
description: minor units
|
|
123
|
+
currency:
|
|
124
|
+
type: string
|
|
125
|
+
pattern: '^[A-Z]{3}$'
|
|
126
|
+
refundedAt:
|
|
127
|
+
type: string
|
|
128
|
+
format: date-time
|
|
129
|
+
OrderPlaced:
|
|
130
|
+
# Namespaced by the domain that OWNS the message, never by the service
|
|
131
|
+
# reading it: `order.` says order-service is the one producer, and two
|
|
132
|
+
# services declaring they send this name would be
|
|
133
|
+
# `asyncapi.message-contested` — which contract a consumer reads must not
|
|
134
|
+
# be a coin flip.
|
|
135
|
+
name: order.OrderPlaced
|
|
136
|
+
title: Order placed
|
|
137
|
+
payload:
|
|
138
|
+
type: object
|
|
139
|
+
# A payload declaring no shape — absent, or a bare `type: object` — is
|
|
140
|
+
# `asyncapi.payload-undescribed`: the name joins the spine while nothing
|
|
141
|
+
# says what a handler would read. loam probes for presence and never
|
|
142
|
+
# reads a field, which is what keeps a later move to Avro a
|
|
143
|
+
# `schemaFormat:` line here and no change in loam.
|
|
144
|
+
required: [ orderId, customerId, placedAt ]
|
|
145
|
+
properties:
|
|
146
|
+
orderId:
|
|
147
|
+
type: string
|
|
148
|
+
format: uuid
|
|
149
|
+
description: The idempotency key for the confirmation — one send per orderId
|
|
150
|
+
customerId:
|
|
151
|
+
type: string
|
|
152
|
+
format: uuid
|
|
153
|
+
placedAt:
|
|
154
|
+
type: string
|
|
155
|
+
format: date-time
|
|
156
|
+
x-loam-based-on: 15e75c9de066971f
|
|
157
|
+
PaymentCaptured:
|
|
158
|
+
name: payment.PaymentCaptured
|
|
159
|
+
title: Payment captured
|
|
160
|
+
payload:
|
|
161
|
+
type: object
|
|
162
|
+
required: [ paymentId, orderId, capturedAmount, currency, capturedAt ]
|
|
163
|
+
properties:
|
|
164
|
+
paymentId:
|
|
165
|
+
type: string
|
|
166
|
+
format: uuid
|
|
167
|
+
orderId:
|
|
168
|
+
type: string
|
|
169
|
+
format: uuid
|
|
170
|
+
description: What joins a receipt to the order the customer was told about
|
|
171
|
+
capturedAmount:
|
|
172
|
+
type: integer
|
|
173
|
+
description: minor units, restated on the receipt exactly as captured
|
|
174
|
+
currency:
|
|
175
|
+
type: string
|
|
176
|
+
pattern: '^[A-Z]{3}$'
|
|
177
|
+
capturedAt:
|
|
178
|
+
type: string
|
|
179
|
+
format: date-time
|
|
180
|
+
x-loam-based-on: 543d75dc0e0e3199
|
|
181
|
+
CustomerUpdated:
|
|
182
|
+
name: crm.CustomerUpdated
|
|
183
|
+
title: Customer contact details updated
|
|
184
|
+
payload:
|
|
185
|
+
type: object
|
|
186
|
+
# `version` is load-bearing rather than descriptive: the CRM redelivers
|
|
187
|
+
# and reorders, and the "out-of-order update is ignored" scenario in
|
|
188
|
+
# spec.md is only implementable because this field is in the contract.
|
|
189
|
+
# Nothing outside this document defines it.
|
|
190
|
+
required: [ customerId, version, updatedAt ]
|
|
191
|
+
properties:
|
|
192
|
+
customerId:
|
|
193
|
+
type: string
|
|
194
|
+
format: uuid
|
|
195
|
+
version:
|
|
196
|
+
type: integer
|
|
197
|
+
description: Monotonic per customer; an update at or below the stored version is
|
|
198
|
+
dropped
|
|
199
|
+
email:
|
|
200
|
+
type: string
|
|
201
|
+
format: email
|
|
202
|
+
phone:
|
|
203
|
+
type: string
|
|
204
|
+
description: E.164; absent when the customer has no phone on record
|
|
205
|
+
updatedAt:
|
|
206
|
+
type: string
|
|
207
|
+
format: date-time
|
|
208
|
+
x-loam-based-on: ff659a336b678a26
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# notification-service — requirement delta for FEAT-120
|
|
2
|
+
|
|
3
|
+
## ADDED Requirements
|
|
4
|
+
|
|
5
|
+
### Requirement: Notify a customer when a refund completes
|
|
6
|
+
|
|
7
|
+
Requirement-ID: NTF-REFUND
|
|
8
|
+
The service SHALL send exactly one refund notification per refunded payment, stating the
|
|
9
|
+
refunded amount and currency exactly as the refund reported them, and SHALL NOT send one
|
|
10
|
+
until the refund is complete.
|
|
11
|
+
|
|
12
|
+
Consumes: payment.PaymentRefunded
|
|
13
|
+
Capability: order-notifications
|
|
14
|
+
|
|
15
|
+
#### Scenario: A completed refund is announced once
|
|
16
|
+
- **Given** a `payment.PaymentRefunded` for an order this service has already confirmed
|
|
17
|
+
- **When** the consumer handles it
|
|
18
|
+
- **Then** a refund notification is rendered with the refunded amount and currency
|
|
19
|
+
- **And** the delivery log records the send under that `paymentId`
|
|
20
|
+
|
|
21
|
+
#### Scenario: The broker redelivers a refund already announced
|
|
22
|
+
- **Given** a refund notification already recorded in the delivery log for that `paymentId`
|
|
23
|
+
- **When** kafka redelivers the same `payment.PaymentRefunded`
|
|
24
|
+
- **Then** no second notification is sent and the event is acknowledged
|