@mnstry/atelier 0.2.0-alpha.1 → 0.2.0-alpha.11
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 +413 -0
- package/README.md +402 -205
- package/SECURITY.md +6 -1
- package/contracts/atelier-adoption-policy.v1.schema.json +49 -0
- package/contracts/atelier-coauthor.v1.schema.json +163 -0
- package/contracts/atelier-decision-request.v1.schema.json +476 -0
- package/contracts/atelier-decision-result.v1.schema.json +500 -0
- package/contracts/atelier-guide.v1.schema.json +227 -0
- package/contracts/atelier-intake.v1.schema.json +151 -0
- package/contracts/atelier-migration.v2.schema.json +61 -0
- package/contracts/atelier-obsidian-acceptance-receipt.v1.schema.json +211 -0
- package/contracts/atelier-obsidian-apply-policy.v1.schema.json +298 -0
- package/contracts/atelier-obsidian-corpus-profile.v1.schema.json +98 -0
- package/contracts/atelier-obsidian-edit-operation.v1.schema.json +138 -0
- package/contracts/atelier-obsidian-ext-settings.v1.schema.json +287 -0
- package/contracts/atelier-obsidian-generation-manifest.v1.schema.json +353 -0
- package/contracts/atelier-obsidian-proposal-receipt.v1.schema.json +110 -0
- package/contracts/atelier-obsidian-publication-journal.v1.schema.json +167 -0
- package/contracts/atelier-obsidian-scope.v1.schema.json +264 -0
- package/contracts/atelier-obsidian-service-state.v1.schema.json +149 -0
- package/contracts/atelier-obsidian-source-snapshot.v1.schema.json +179 -0
- package/contracts/atelier-pane-presentation.v1.schema.json +76 -0
- package/contracts/atelier-presentation.v1.schema.json +1293 -0
- package/contracts/atelier-repository-observation.v1.schema.json +163 -0
- package/contracts/atelier-review.v1.schema.json +1601 -0
- package/contracts/atelier-skill-steward.v1.schema.json +692 -0
- package/contracts/atelier-upgrade-plan.v2.schema.json +398 -0
- package/contracts/atelier-upgrade-receipt.v1.schema.json +99 -0
- package/contracts/atelier-vault-publication.v1.schema.json +58 -0
- package/contracts/public-api-baseline.json +57 -0
- package/docs/assurance-controls.md +49 -0
- package/docs/atelier-runtime.md +28 -2
- package/docs/atelier-sync.md +172 -0
- package/docs/blocks/audience-visibility.md +9 -0
- package/docs/blocks/claims.md +61 -0
- package/docs/blocks/conformance-admission.md +15 -0
- package/docs/blocks/will-not-do.md +18 -0
- package/docs/coauthor-session.md +57 -0
- package/docs/connected-composition.md +75 -0
- package/docs/continuity.md +3 -4
- package/docs/decisions.md +167 -0
- package/docs/design.md +167 -0
- package/docs/exact-upgrades.md +159 -0
- package/docs/extension-pack-lifecycle.md +33 -0
- package/docs/guided-upgrades.md +99 -0
- package/docs/install.md +99 -16
- package/docs/intake-and-guides.md +65 -0
- package/docs/integration-and-review-plan.md +409 -0
- package/docs/integration-contract-decisions.md +22 -0
- package/docs/knowledge-graph.md +8 -4
- package/docs/local-review.md +84 -0
- package/docs/local-services.md +328 -0
- package/docs/local-state.md +107 -0
- package/docs/obsidian-contract.md +698 -0
- package/docs/obsidian.md +484 -0
- package/docs/portable-presentation.md +328 -0
- package/docs/presentation-consumer-boundaries.md +75 -0
- package/docs/presentation-review-disposition.md +47 -0
- package/docs/project-command-inventory.md +38 -0
- package/docs/project-options.md +53 -0
- package/docs/release-engineering.md +174 -12
- package/docs/repo-boundary-guard.md +12 -2
- package/docs/review-portability.md +55 -0
- package/docs/skill-steward.md +156 -0
- package/docs/upgrade.md +155 -5
- package/docs/vault-service.md +292 -0
- package/fixtures/atelier-coauthor/invalid/authority.v1.json +5 -0
- package/fixtures/atelier-coauthor/valid/config.v1.json +12 -0
- package/fixtures/atelier-guide/invalid/authority.v1.json +11 -0
- package/fixtures/atelier-guide/valid/capability.v1.json +10 -0
- package/fixtures/atelier-guide/valid/consent.v1.json +11 -0
- package/fixtures/atelier-guide/valid/engagement.v1.json +7 -0
- package/fixtures/atelier-guide/valid/offer.v1.json +10 -0
- package/fixtures/atelier-intake/invalid/authority.v1.json +9 -0
- package/fixtures/atelier-intake/valid/attempt.v1.json +8 -0
- package/fixtures/atelier-intake/valid/completion.v1.json +9 -0
- package/fixtures/atelier-intake/valid/source.v1.json +7 -0
- package/fixtures/atelier-repository-observation/invalid/complete-with-blocker.v1.json +18 -0
- package/fixtures/atelier-repository-observation/valid/complete-local.v1.json +48 -0
- package/fixtures/atelier-review/invalid/authenticated-identity.v1.json +22 -0
- package/fixtures/atelier-review/valid/bound.v1.json +229 -0
- package/fixtures/atelier-review/valid/bundle.v1.json +267 -0
- package/fixtures/atelier-review/valid/contribution.v1.json +22 -0
- package/fixtures/atelier-review/valid/lifecycle.v1.json +14 -0
- package/fixtures/atelier-skill-steward/audit/invalid/source-mutation.v1.json +26 -0
- package/fixtures/atelier-skill-steward/audit/valid/clean.v1.json +26 -0
- package/fixtures/atelier-skill-steward/candidates/invalid/workflow-key.v1.json +37 -0
- package/fixtures/atelier-skill-steward/candidates/valid/create.v1.json +37 -0
- package/fixtures/atelier-skill-steward/lock/invalid/bad-digest.v1.json +18 -0
- package/fixtures/atelier-skill-steward/lock/valid/installed.v1.json +23 -0
- package/fixtures/atelier-skill-steward/plan/invalid/delete-action.v1.json +33 -0
- package/fixtures/atelier-skill-steward/plan/valid/add.v1.json +33 -0
- package/fixtures/atelier-upgrade-transaction/adoption-policy/invalid/example.json +12 -0
- package/fixtures/atelier-upgrade-transaction/adoption-policy/valid/example.json +11 -0
- package/fixtures/atelier-upgrade-transaction/migration/invalid/example.json +20 -0
- package/fixtures/atelier-upgrade-transaction/migration/valid/example.json +19 -0
- package/fixtures/atelier-upgrade-transaction/upgrade-plan/invalid/example.json +58 -0
- package/fixtures/atelier-upgrade-transaction/upgrade-plan/valid/example.json +57 -0
- package/fixtures/atelier-upgrade-transaction/upgrade-receipt/invalid/example.json +15 -0
- package/fixtures/atelier-upgrade-transaction/upgrade-receipt/valid/example.json +14 -0
- package/fixtures/atelier-vault-publication/invalid/publication.json +5 -0
- package/fixtures/atelier-vault-publication/valid/publication.json +11 -0
- package/fixtures/decisions/request/invalid/unknown-authority.v1.json +61 -0
- package/fixtures/decisions/request/valid/triage.v1.json +60 -0
- package/fixtures/decisions/result/invalid/execution-authority.v1.json +50 -0
- package/fixtures/decisions/result/valid/abstained.v1.json +23 -0
- package/fixtures/decisions/result/valid/assessed.v1.json +50 -0
- package/fixtures/obsidian/acceptance/ap05-extra-notes.json +14 -0
- package/fixtures/obsidian/acceptance/receipts/G07.valid.v1.json +63 -0
- package/fixtures/obsidian/acceptance/receipts/G13.valid.v1.json +69 -0
- package/fixtures/obsidian/acceptance/receipts/G14.valid.v1.json +62 -0
- package/fixtures/obsidian/acceptance/receipts/G15.valid.v1.json +56 -0
- package/fixtures/obsidian/acceptance/receipts/G16.valid.v1.json +73 -0
- package/fixtures/obsidian/acceptance/receipts/G17.valid.v1.json +75 -0
- package/fixtures/obsidian/acceptance/receipts/G18.valid.v1.json +64 -0
- package/fixtures/obsidian/acceptance/service-sentinels.json +10 -0
- package/fixtures/obsidian/contracts/acceptance-receipt/invalid/duplicate-evidence-name.v1.json +39 -0
- package/fixtures/obsidian/contracts/acceptance-receipt/invalid/evidence-by-absolute-path.v1.json +34 -0
- package/fixtures/obsidian/contracts/acceptance-receipt/invalid/missing-candidate-tree.v1.json +33 -0
- package/fixtures/obsidian/contracts/acceptance-receipt/invalid/no-evidence.v1.json +28 -0
- package/fixtures/obsidian/contracts/acceptance-receipt/invalid/unknown-outcome.v1.json +34 -0
- package/fixtures/obsidian/contracts/acceptance-receipt/invalid/unknown-top-level-field.v1.json +35 -0
- package/fixtures/obsidian/contracts/acceptance-receipt/valid/node-gate.v1.json +34 -0
- package/fixtures/obsidian/contracts/apply-policy/invalid/automatic-without-edit-class.v1.json +27 -0
- package/fixtures/obsidian/contracts/apply-policy/invalid/conflict-overwrite.v1.json +29 -0
- package/fixtures/obsidian/contracts/apply-policy/invalid/missing-policy-digest.v1.json +28 -0
- package/fixtures/obsidian/contracts/apply-policy/invalid/unbounded-batch.v1.json +29 -0
- package/fixtures/obsidian/contracts/apply-policy/invalid/unimplemented-edit-class.v1.json +30 -0
- package/fixtures/obsidian/contracts/apply-policy/invalid/unknown-mode.v1.json +29 -0
- package/fixtures/obsidian/contracts/apply-policy/invalid/unknown-selector-operator.v1.json +22 -0
- package/fixtures/obsidian/contracts/apply-policy/invalid/unknown-top-level-field.v1.json +30 -0
- package/fixtures/obsidian/contracts/apply-policy/valid/automatic-scoped.v1.json +29 -0
- package/fixtures/obsidian/contracts/apply-policy/valid/manual-default.v1.json +20 -0
- package/fixtures/obsidian/contracts/corpus-profile/invalid/absolute-path-in-ext.v1.json +30 -0
- package/fixtures/obsidian/contracts/corpus-profile/invalid/absolute-repository-root.v1.json +27 -0
- package/fixtures/obsidian/contracts/corpus-profile/invalid/duplicate-repository-id.v1.json +27 -0
- package/fixtures/obsidian/contracts/corpus-profile/invalid/overlapping-managed-roots.v1.json +27 -0
- package/fixtures/obsidian/contracts/corpus-profile/invalid/unknown-enrollment.v1.json +27 -0
- package/fixtures/obsidian/contracts/corpus-profile/invalid/unknown-top-level-field.v1.json +28 -0
- package/fixtures/obsidian/contracts/corpus-profile/valid/three-repositories.v1.json +27 -0
- package/fixtures/obsidian/contracts/edit-operation/invalid/absolute-recovery-ref.v1.json +21 -0
- package/fixtures/obsidian/contracts/edit-operation/invalid/inline-observed-bytes.v1.json +22 -0
- package/fixtures/obsidian/contracts/edit-operation/invalid/missing-base-digest.v1.json +20 -0
- package/fixtures/obsidian/contracts/edit-operation/invalid/short-idempotency-key.v1.json +21 -0
- package/fixtures/obsidian/contracts/edit-operation/invalid/unknown-kind.v1.json +21 -0
- package/fixtures/obsidian/contracts/edit-operation/valid/pending-body-replacement.v1.json +21 -0
- package/fixtures/obsidian/contracts/ext-settings/invalid/absolute-path-prefix.v1.json +28 -0
- package/fixtures/obsidian/contracts/ext-settings/invalid/apply-policy-in-portable-settings.v1.json +30 -0
- package/fixtures/obsidian/contracts/ext-settings/invalid/duplicate-scope-id.v1.json +27 -0
- package/fixtures/obsidian/contracts/ext-settings/invalid/machine-local-vault-path.v1.json +28 -0
- package/fixtures/obsidian/contracts/ext-settings/invalid/service-port-in-portable-settings.v1.json +28 -0
- package/fixtures/obsidian/contracts/ext-settings/invalid/unknown-default-scope.v1.json +27 -0
- package/fixtures/obsidian/contracts/ext-settings/valid/disabled.v1.json +5 -0
- package/fixtures/obsidian/contracts/ext-settings/valid/enabled-with-scopes.v1.json +27 -0
- package/fixtures/obsidian/contracts/generation-manifest/invalid/absolute-note-path.v1.json +114 -0
- package/fixtures/obsidian/contracts/generation-manifest/invalid/complete-with-unwritten-notes.v1.json +114 -0
- package/fixtures/obsidian/contracts/generation-manifest/invalid/derived-link-claimed-declared.v1.json +114 -0
- package/fixtures/obsidian/contracts/generation-manifest/invalid/duplicate-note-identity.v1.json +114 -0
- package/fixtures/obsidian/contracts/generation-manifest/invalid/in-scope-endpoint-missing.v1.json +114 -0
- package/fixtures/obsidian/contracts/generation-manifest/invalid/title-only-note-path.v1.json +114 -0
- package/fixtures/obsidian/contracts/generation-manifest/invalid/unknown-note-field.v1.json +115 -0
- package/fixtures/obsidian/contracts/generation-manifest/invalid/unknown-relation-type.v1.json +114 -0
- package/fixtures/obsidian/contracts/generation-manifest/invalid/withheld-endpoint.v1.json +114 -0
- package/fixtures/obsidian/contracts/generation-manifest/valid/two-notes.v1.json +114 -0
- package/fixtures/obsidian/contracts/oracles/scope-cases.json +412 -0
- package/fixtures/obsidian/contracts/proposal-receipt/invalid/accepted-without-proposal-id.v1.json +12 -0
- package/fixtures/obsidian/contracts/proposal-receipt/invalid/missing-adapter-operation-id.v1.json +11 -0
- package/fixtures/obsidian/contracts/proposal-receipt/invalid/unknown-backpressure-outcome.v1.json +12 -0
- package/fixtures/obsidian/contracts/proposal-receipt/invalid/unknown-top-level-field.v1.json +13 -0
- package/fixtures/obsidian/contracts/proposal-receipt/valid/accepted-new.v1.json +12 -0
- package/fixtures/obsidian/contracts/proposal-receipt/valid/deferred.v1.json +12 -0
- package/fixtures/obsidian/contracts/publication-journal/invalid/absolute-recovery-ref.v1.json +47 -0
- package/fixtures/obsidian/contracts/publication-journal/invalid/duplicate-sequence.v1.json +47 -0
- package/fixtures/obsidian/contracts/publication-journal/invalid/empty-protocol-id.v1.json +47 -0
- package/fixtures/obsidian/contracts/publication-journal/invalid/missing-protocol-id.v1.json +46 -0
- package/fixtures/obsidian/contracts/publication-journal/invalid/unknown-entry-field.v1.json +48 -0
- package/fixtures/obsidian/contracts/publication-journal/invalid/unknown-state.v1.json +47 -0
- package/fixtures/obsidian/contracts/publication-journal/valid/committed.v1.json +47 -0
- package/fixtures/obsidian/contracts/publication-journal/valid/updating-after-restart.v1.json +22 -0
- package/fixtures/obsidian/contracts/scope/invalid/absolute-path-prefix.v1.json +15 -0
- package/fixtures/obsidian/contracts/scope/invalid/duplicate-ids.v1.json +18 -0
- package/fixtures/obsidian/contracts/scope/invalid/expansion-without-node-budget.v1.json +40 -0
- package/fixtures/obsidian/contracts/scope/invalid/full-mode-with-subset.v1.json +8 -0
- package/fixtures/obsidian/contracts/scope/invalid/unknown-mode.v1.json +41 -0
- package/fixtures/obsidian/contracts/scope/invalid/unknown-selector-key.v1.json +15 -0
- package/fixtures/obsidian/contracts/scope/invalid/unknown-selector-operator.v1.json +14 -0
- package/fixtures/obsidian/contracts/scope/invalid/unknown-top-level-field.v1.json +42 -0
- package/fixtures/obsidian/contracts/scope/valid/explicit-empty.v1.json +8 -0
- package/fixtures/obsidian/contracts/scope/valid/focus.v1.json +11 -0
- package/fixtures/obsidian/contracts/scope/valid/full.v1.json +8 -0
- package/fixtures/obsidian/contracts/scope/valid/scoped-set-expression.v1.json +41 -0
- package/fixtures/obsidian/contracts/service-state/invalid/hostname-instead-of-literal-loopback.v1.json +23 -0
- package/fixtures/obsidian/contracts/service-state/invalid/missing-consent.v1.json +18 -0
- package/fixtures/obsidian/contracts/service-state/invalid/privileged-port.v1.json +23 -0
- package/fixtures/obsidian/contracts/service-state/invalid/unknown-top-level-field.v1.json +24 -0
- package/fixtures/obsidian/contracts/service-state/invalid/wildcard-bind.v1.json +23 -0
- package/fixtures/obsidian/contracts/service-state/valid/healthy.v1.json +23 -0
- package/fixtures/obsidian/contracts/source-snapshot/invalid/absolute-file-path.v1.json +48 -0
- package/fixtures/obsidian/contracts/source-snapshot/invalid/duplicate-repository-id.v1.json +48 -0
- package/fixtures/obsidian/contracts/source-snapshot/invalid/mixed-read.v1.json +48 -0
- package/fixtures/obsidian/contracts/source-snapshot/invalid/parent-traversal-path.v1.json +48 -0
- package/fixtures/obsidian/contracts/source-snapshot/invalid/unknown-file-field.v1.json +49 -0
- package/fixtures/obsidian/contracts/source-snapshot/valid/two-repositories.v1.json +48 -0
- package/fixtures/obsidian/edits/workspace.json +65 -0
- package/fixtures/obsidian/materialization/expected-full.json +99 -0
- package/fixtures/obsidian/materialization/expected-scoped.json +39 -0
- package/fixtures/obsidian/materialization/workspace.json +54 -0
- package/fixtures/obsidian/proposals/expected-shapes.json +11 -0
- package/fixtures/projects/sample-workspace/content/source.html.kg.json +4 -1
- package/fixtures/projects/source-formats-workspace/content/data.json.kg.json +4 -1
- package/fixtures/projects/source-formats-workspace/content/logo.png.kg.json +4 -1
- package/fixtures/projects/source-formats-workspace/content/metrics.csv.kg.json +4 -1
- package/fixtures/projects/source-formats-workspace/content/pipeline.yaml.kg.json +4 -1
- package/fixtures/ui/presentation/pane.v1.json +7 -0
- package/fixtures/ui/presentation/reference.v1.json +293 -0
- package/package.json +86 -10
- package/skills/claude/atelier-guided-coauthor/SKILL.md +49 -0
- package/skills/claude/atelier-guided-upgrade/SKILL.md +97 -0
- package/skills/claude/atelier-local-service/SKILL.md +47 -0
- package/skills/claude/atelier-open/SKILL.md +11 -5
- package/skills/claude/atelier-public-boundary/SKILL.md +31 -0
- package/skills/claude/atelier-skill-steward/SKILL.md +62 -0
- package/skills/claude/mnstry-readiness/SKILL.md +5 -0
- package/skills/codex/atelier-guided-coauthor/SKILL.md +49 -0
- package/skills/codex/atelier-guided-upgrade/SKILL.md +97 -0
- package/skills/codex/atelier-local-service/SKILL.md +47 -0
- package/skills/codex/atelier-open/SKILL.md +11 -5
- package/skills/codex/atelier-public-boundary/SKILL.md +31 -0
- package/skills/codex/atelier-skill-steward/SKILL.md +62 -0
- package/skills/codex/mnstry-readiness/SKILL.md +5 -0
- package/src/access/preview-enforcer.mjs +84 -0
- package/src/boundary/content-rules.mjs +283 -20
- package/src/boundary/policy.mjs +213 -91
- package/src/cli/execute-command.mjs +36 -0
- package/src/cli/project-options.mjs +58 -0
- package/src/cli/run.mjs +78 -10
- package/src/coauthor/session.mjs +161 -0
- package/src/coauthor/store.mjs +173 -0
- package/src/collaboration/event-ledger.mjs +348 -0
- package/src/collaboration/index.mjs +17 -0
- package/src/collaboration/inspection-bundle.mjs +223 -0
- package/src/collaboration/proposals.mjs +265 -65
- package/src/collaboration/review-contracts.mjs +25 -0
- package/src/collaboration/review-store.mjs +305 -0
- package/src/commands/attestation.mjs +20 -6
- package/src/commands/coauthor.mjs +26 -0
- package/src/commands/config.mjs +6 -1
- package/src/commands/disclosure.mjs +133 -0
- package/src/commands/distribution.mjs +2 -1
- package/src/commands/extension-pack.mjs +17 -9
- package/src/commands/init.mjs +46 -6
- package/src/commands/obsidian.mjs +371 -0
- package/src/commands/review.mjs +147 -0
- package/src/commands/server.mjs +1 -4
- package/src/commands/setup.mjs +51 -14
- package/src/commands/skills.mjs +199 -0
- package/src/commands/sync.mjs +107 -0
- package/src/composition/registry.mjs +27 -0
- package/src/composition/wire.mjs +122 -0
- package/src/contracts/corpus.mjs +35 -0
- package/src/decisions/contracts.d.mts +96 -0
- package/src/decisions/contracts.mjs +321 -0
- package/src/disclosure/content-scan.mjs +206 -0
- package/src/egress/check.mjs +7 -38
- package/src/egress/forbidden-egress.mjs +32 -18
- package/src/export/atelier-export-contract.mjs +16 -1
- package/src/extension-packs/lifecycle.mjs +154 -0
- package/src/graph/graph.mjs +176 -316
- package/src/graph/knowledge-graph.mjs +643 -43
- package/src/guides/contracts.mjs +54 -0
- package/src/harness/context-client.mjs +9 -1
- package/src/index.mjs +41 -0
- package/src/intake/store.mjs +119 -0
- package/src/preview/channel.mjs +89 -0
- package/src/project/config.mjs +112 -52
- package/src/project/durable-state.mjs +161 -0
- package/src/project/file-class.mjs +180 -0
- package/src/project/package-root.mjs +10 -0
- package/src/project/path-match.mjs +38 -15
- package/src/project/private-state.mjs +120 -0
- package/src/projection/obsidian/contracts.mjs +571 -0
- package/src/projection/obsidian/edits/align.mjs +169 -0
- package/src/projection/obsidian/edits/apply.mjs +889 -0
- package/src/projection/obsidian/edits/arbitrate.mjs +414 -0
- package/src/projection/obsidian/edits/contribution.mjs +108 -0
- package/src/projection/obsidian/edits/index.mjs +19 -0
- package/src/projection/obsidian/edits/object-identity.mjs +61 -0
- package/src/projection/obsidian/edits/object-store.mjs +517 -0
- package/src/projection/obsidian/edits/observe.mjs +123 -0
- package/src/projection/obsidian/edits/policy.mjs +123 -0
- package/src/projection/obsidian/edits/regions.mjs +648 -0
- package/src/projection/obsidian/materialize/byte-lens.mjs +98 -0
- package/src/projection/obsidian/materialize/index.mjs +7 -0
- package/src/projection/obsidian/materialize/path-registry.mjs +105 -0
- package/src/projection/obsidian/materialize/prepare-view.mjs +746 -0
- package/src/projection/obsidian/materialize/settings.mjs +57 -0
- package/src/projection/obsidian/materialize/stage.mjs +27 -0
- package/src/projection/obsidian/proposals/adapter.mjs +572 -0
- package/src/projection/obsidian/proposals/backpressure.mjs +113 -0
- package/src/projection/obsidian/proposals/contribution.mjs +55 -0
- package/src/projection/obsidian/proposals/index.mjs +23 -0
- package/src/projection/obsidian/proposals/observation.mjs +216 -0
- package/src/projection/obsidian/proposals/queue.mjs +277 -0
- package/src/projection/obsidian/proposals/router.mjs +168 -0
- package/src/projection/obsidian/publication/bridge-script.mjs +266 -0
- package/src/projection/obsidian/publication/exchange.mjs +117 -0
- package/src/projection/obsidian/publication/index.mjs +5 -0
- package/src/projection/obsidian/publication/publisher.mjs +588 -0
- package/src/projection/obsidian/publication/test-seam.mjs +16 -0
- package/src/projection/obsidian/publication/transport.mjs +212 -0
- package/src/projection/obsidian/recovery/index.mjs +6 -0
- package/src/projection/obsidian/recovery/journal.mjs +134 -0
- package/src/projection/obsidian/recovery/late-writer.mjs +46 -0
- package/src/projection/obsidian/recovery/restart.mjs +316 -0
- package/src/projection/obsidian/recovery/store.mjs +234 -0
- package/src/projection/obsidian/selection-ui/conflict-view.mjs +91 -0
- package/src/projection/obsidian/selection-ui/contribution.mjs +141 -0
- package/src/projection/obsidian/selection-ui/focus.mjs +82 -0
- package/src/projection/obsidian/selection-ui/index.mjs +12 -0
- package/src/projection/obsidian/selection-ui/policy-setup.mjs +107 -0
- package/src/projection/obsidian/selection-ui/receipt.mjs +173 -0
- package/src/projection/obsidian/selection-ui/selection-state.mjs +122 -0
- package/src/projection/obsidian/selection-ui/selection.mjs +109 -0
- package/src/projection/project.mjs +28 -19
- package/src/readiness-protocols/evidence.mjs +282 -0
- package/src/readiness-protocols/runtime.mjs +4 -3
- package/src/readiness-protocols/source-read.mjs +39 -0
- package/src/runtime/git-adapter.mjs +189 -0
- package/src/runtime/local-state.mjs +439 -0
- package/src/runtime/obsidian/app-capability.mjs +138 -0
- package/src/runtime/obsidian/app-production-seams.mjs +107 -0
- package/src/runtime/obsidian/contributions/proposal-adapter.mjs +4 -0
- package/src/runtime/obsidian/contributions/selection-ui.mjs +4 -0
- package/src/runtime/obsidian/contributions/source-apply.mjs +4 -0
- package/src/runtime/obsidian/contributions.mjs +27 -0
- package/src/runtime/obsidian/documents.mjs +37 -0
- package/src/runtime/obsidian/enablement.mjs +53 -0
- package/src/runtime/obsidian/engine.mjs +532 -0
- package/src/runtime/obsidian/errors.mjs +14 -0
- package/src/runtime/obsidian/extension-points.mjs +103 -0
- package/src/runtime/obsidian/index.mjs +34 -0
- package/src/runtime/obsidian/lifecycle.mjs +258 -0
- package/src/runtime/obsidian/machine-settings.mjs +260 -0
- package/src/runtime/obsidian/observation.mjs +158 -0
- package/src/runtime/obsidian/opening.mjs +280 -0
- package/src/runtime/obsidian/pending-edits.mjs +141 -0
- package/src/runtime/obsidian/pipeline.mjs +122 -0
- package/src/runtime/obsidian/private-lock.mjs +156 -0
- package/src/runtime/obsidian/process-identity.mjs +58 -0
- package/src/runtime/obsidian/service-client.mjs +66 -0
- package/src/runtime/obsidian/service-entry-path.mjs +9 -0
- package/src/runtime/obsidian/service-main.mjs +93 -0
- package/src/runtime/obsidian/service-record.mjs +169 -0
- package/src/runtime/obsidian/service-server.mjs +121 -0
- package/src/runtime/obsidian/service.mjs +216 -0
- package/src/runtime/obsidian/startup-adapters.mjs +87 -0
- package/src/runtime/obsidian/state-store.mjs +180 -0
- package/src/runtime/obsidian/sync-notice.mjs +33 -0
- package/src/runtime/obsidian/tick-loop.mjs +84 -0
- package/src/runtime/obsidian/watchers.mjs +36 -0
- package/src/runtime/repository-observation.mjs +491 -0
- package/src/runtime/supervisor.mjs +803 -0
- package/src/server/local-sidecar.mjs +125 -59
- package/src/server/security.mjs +89 -4
- package/src/server/server.mjs +4 -2
- package/src/skills/steward.mjs +780 -0
- package/src/support/feedback-report.mjs +4 -3
- package/src/ui/presentation/browser.mjs +278 -0
- package/src/ui/presentation/contract.mjs +116 -0
- package/src/ui/presentation/index.mjs +7 -0
- package/src/ui/presentation/native.mjs +153 -0
- package/src/ui/presentation/proof.mjs +57 -0
- package/src/ui/presentation/schema-check.mjs +30 -0
- package/src/ui/presentation/schema.generated.mjs +1371 -0
- package/src/ui/presentation/state.mjs +43 -0
- package/src/ui/presentation/styles.mjs +67 -0
- package/src/ui/presentation/tokens.mjs +74 -0
- package/src/ui/presentation/web.mjs +85 -0
- package/src/ui/review-page.mjs +32 -0
- package/src/upgrade/explanation.mjs +33 -0
- package/src/upgrade/provenance.mjs +338 -0
- package/src/upgrade/transaction-files.mjs +103 -0
- package/src/upgrade/transaction.mjs +475 -0
- package/src/upgrade/upgrade.mjs +65 -29
- package/src/vault/hosts.mjs +21 -0
- package/src/vault/identity.mjs +19 -0
- package/src/vault/index.mjs +7 -0
- package/src/vault/interface.mjs +11 -0
- package/src/vault/metadata.mjs +31 -0
- package/src/vault/privacy.mjs +148 -0
- package/src/vault/probe.mjs +89 -0
- package/src/vault/service.mjs +131 -0
- package/src/vault/source.mjs +45 -0
- package/src/vault/storage.mjs +23 -0
- package/templates/distribution-workspace/.claude/launch.json +6 -2
- package/templates/distribution-workspace/gitignore +1 -0
- package/templates/distribution-workspace/project/README.md +2 -2
- package/templates/external-project-workspace/README.md +45 -0
- package/templates/external-project-workspace/answers.example.json +4 -0
- package/templates/external-project-workspace/atelier.project.json +40 -0
- package/templates/external-project-workspace/boundary-policy.v1.json +60 -0
- package/templates/external-project-workspace/gitignore +8 -0
- package/templates/external-project-workspace/pack-lifecycle.json +14 -0
- package/templates/external-project-workspace/packs/protocols/contract-gate.v1.json +109 -0
- package/templates/external-project-workspace/packs/sample-pack.v1.json +48 -0
- package/templates/external-project-workspace/repo-access.v1.json +9 -0
- package/templates/external-project-workspace/source/README.md +11 -0
- package/templates/launch.json +6 -2
- package/templates/private-domain-workspace/.claude/launch.json +6 -2
- package/templates/private-domain-workspace/domain/README.md +2 -2
- package/templates/private-domain-workspace/gitignore +1 -0
- package/templates/shared-project-workspace/.claude/launch.json +6 -2
- package/templates/shared-project-workspace/gitignore +1 -0
- package/templates/shared-project-workspace/project/README.md +2 -2
package/README.md
CHANGED
|
@@ -1,50 +1,302 @@
|
|
|
1
1
|
# MNSTRY Atelier
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
3
|
+
**Turn a repository into a living, governed system.**
|
|
4
|
+
|
|
5
|
+
Important bodies of work often begin as files: methods, research, programs,
|
|
6
|
+
policies, editorial systems, product knowledge, or something no existing app
|
|
7
|
+
quite understands. A folder can hold that work, but it cannot explain what each
|
|
8
|
+
file is, how the pieces relate, who may see them, or whether the whole is ready
|
|
9
|
+
to use.
|
|
10
|
+
|
|
11
|
+
The Atelier adds that missing layer without taking the work away from you. It
|
|
12
|
+
turns a repository into an ontology-governed knowledge graph, gives rules the
|
|
13
|
+
power to refuse invalid states, and produces bounded views for people, teams,
|
|
14
|
+
agents, and tools. Git remains the source of record. Your files remain readable.
|
|
15
|
+
The authoring runtime remains local; optional vault adapters run in an explicitly configured host.
|
|
16
|
+
|
|
17
|
+
That makes the same repository useful at several levels:
|
|
18
|
+
|
|
19
|
+
- A **steward** can shape a coherent system without surrendering it to a
|
|
20
|
+
proprietary database.
|
|
21
|
+
- A **team** can collaborate through explicit roles, handoffs, and disclosure
|
|
22
|
+
boundaries.
|
|
23
|
+
- A **person or agent** can receive the right context and capabilities for the
|
|
24
|
+
task, without receiving the entire repository.
|
|
25
|
+
- A **toolmaker** can build a specialized or commercial product on the graph,
|
|
26
|
+
contracts, validators, and projections instead of inventing a new source of
|
|
27
|
+
truth.
|
|
28
|
+
|
|
29
|
+
MNSTRY built the Atelier for a demanding case: a living body of methodology
|
|
30
|
+
that must stay legible, internally connected, privacy-aware, and usable across
|
|
31
|
+
many interfaces. Methodology authoring is one application of the system, not
|
|
32
|
+
its definition or ceiling.
|
|
33
|
+
|
|
34
|
+
## From files to a working system
|
|
35
|
+
|
|
36
|
+
For local-harness authoring, see [durable coauthor sessions](docs/coauthor-session.md)
|
|
37
|
+
and [skill stewardship and managed installation](docs/skill-steward.md).
|
|
38
|
+
[Immutable intake and guide contracts](docs/intake-and-guides.md) extend existing
|
|
39
|
+
processing and hosted-tool adapters without adding remote execution or publication
|
|
40
|
+
authority. These alpha capabilities require explicit consumer integration.
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
files you own
|
|
44
|
+
↓ declare identity, type, audience, and relationships
|
|
45
|
+
ontology-governed graph
|
|
46
|
+
↓ apply contracts, policies, and readiness rules
|
|
47
|
+
governed projections
|
|
48
|
+
├── local review
|
|
49
|
+
├── bounded agent context
|
|
50
|
+
├── collaboration and disclosure
|
|
51
|
+
└── specialized tools and commercial distributions
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
You can see the complete loop in a disposable sample workspace:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npm install --save-dev @mnstry/atelier@0.2.0-alpha.11
|
|
58
|
+
npx mnstry-atelier init --fixture=sample-workspace --target ./sample
|
|
59
|
+
npx mnstry-atelier graph --project ./sample/atelier.project.json
|
|
60
|
+
npx mnstry-atelier project --project ./sample/atelier.project.json
|
|
61
|
+
npx mnstry-atelier dev --project ./sample/atelier.project.json
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Open the loopback URL printed by `dev`. The browser page is generated from
|
|
65
|
+
the same graph and rules that the CLI and library expose.
|
|
66
|
+
|
|
67
|
+
`npx` here runs the binary installed in `./node_modules/.bin`, so install the
|
|
68
|
+
scoped package first. Keep the `@mnstry/` scope: the unscoped npm package
|
|
69
|
+
`atelier` is unrelated. The branded `npx mnstry-atelier` command avoids that
|
|
70
|
+
collision; inside an installed workspace, the shorter `atelier` command is
|
|
71
|
+
also available.
|
|
72
|
+
|
|
73
|
+
## What authoring looks like
|
|
74
|
+
|
|
75
|
+
Enrollment is deliberately small. A source file declares its identity, type,
|
|
76
|
+
audience, and relationships in front matter:
|
|
77
|
+
|
|
78
|
+
```markdown
|
|
79
|
+
---
|
|
80
|
+
title: Breath practice
|
|
81
|
+
summary: A simple preparation practice.
|
|
82
|
+
tags: []
|
|
83
|
+
kg:
|
|
84
|
+
id: example:breath-practice
|
|
85
|
+
type: document
|
|
86
|
+
status: active
|
|
87
|
+
audience: public
|
|
88
|
+
relations:
|
|
89
|
+
belongs_to: example:flagship-program
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
# Breath practice
|
|
93
|
+
|
|
94
|
+
Let the exhale become slightly longer than the inhale.
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
The file is still Markdown. Git still records its history. The declarations
|
|
98
|
+
let the Atelier resolve one canonical identity, validate its declared shape,
|
|
99
|
+
connect it to neighboring work, and decide where it may
|
|
100
|
+
travel.
|
|
101
|
+
|
|
102
|
+
When a source format cannot carry front matter, a sidecar can provide the same
|
|
103
|
+
declarations. The graph does not require every source to become Markdown.
|
|
104
|
+
|
|
105
|
+
From there, one source can inform a human-readable review page, a session-bound
|
|
106
|
+
context envelope for an agent, or structured input to another tool. These are
|
|
107
|
+
interfaces to the same governed repository, not copies that quietly drift apart.
|
|
108
|
+
|
|
109
|
+
## Rules travel with the work
|
|
110
|
+
|
|
111
|
+
The ontology is not only a vocabulary. It is an enforcement surface. Contracts
|
|
112
|
+
define valid shapes, policies govern movement and disclosure, readiness rules
|
|
113
|
+
make completion testable, and validators fail closed when a boundary cannot be
|
|
114
|
+
proven.
|
|
115
|
+
|
|
116
|
+
<!-- atelier:block:audience-visibility:start -->
|
|
117
|
+
The `audience` field in the header is the load-bearing word. It declares who
|
|
118
|
+
a source is written for — `public`, `team`, `operator`, `staff`, `private`,
|
|
119
|
+
or `sensitive` — and the machinery downstream refuses to let material travel
|
|
120
|
+
further than its audience allows. Runtime and export `visibility` is a
|
|
121
|
+
separate vocabulary (`private`, `shared`, `platform`, `public`) describing
|
|
122
|
+
runtime exposure, and the validators reject every crossing between the two.
|
|
123
|
+
Above all: a public export that references a source whose audience is not
|
|
124
|
+
public is refused. That check is fixture-pinned and mutation-tested —
|
|
125
|
+
deleting its enforcement fails tests, not documentation.
|
|
126
|
+
<!-- atelier:block:audience-visibility:end -->
|
|
127
|
+
|
|
128
|
+
That distinction matters whenever several interfaces share one body of work.
|
|
129
|
+
A public site, an internal review tool, and an agent session can all use the
|
|
130
|
+
same graph while receiving different, mechanically checked projections.
|
|
131
|
+
|
|
132
|
+
## The system beneath it
|
|
133
|
+
|
|
134
|
+
### 1. The repository becomes an ontology
|
|
135
|
+
|
|
136
|
+
The project manifest tells the Atelier where sources live and which boundaries
|
|
137
|
+
govern the workspace. Source declarations establish typed nodes and relationships. The
|
|
138
|
+
graph command resolves those declarations into a deterministic index that can
|
|
139
|
+
be queried, validated, rendered, and extended.
|
|
140
|
+
|
|
141
|
+
This is what makes a collection of files behave like a system while remaining
|
|
142
|
+
portable. The repository contains both the knowledge and the terms needed to
|
|
143
|
+
interpret it.
|
|
144
|
+
|
|
145
|
+
### 2. Rules can refuse
|
|
146
|
+
|
|
147
|
+
A useful rule must do more than advise. The Atelier checks schema validity,
|
|
148
|
+
relationship integrity, audience boundaries, readiness protocols, and export
|
|
149
|
+
contracts. Invalid or ambiguous states produce a failing command instead of a
|
|
150
|
+
best-effort publication.
|
|
151
|
+
|
|
152
|
+
Because the checks are local and versioned with the work, the repository can
|
|
153
|
+
prove its state in CI, on a laptop, or inside a larger toolchain.
|
|
154
|
+
|
|
155
|
+
Repositories that may contribute to a public or shared surface can add a
|
|
156
|
+
private, ignored disclosure denylist and scan either the tracked tree or the
|
|
157
|
+
exact staged index:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
npx mnstry-atelier disclosure check --staged
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
The built-in structural pass catches machine-local paths, key material, and
|
|
164
|
+
secret-shaped assignments. A client-aware verdict additionally requires the
|
|
165
|
+
private denylist; the command fails closed when it is absent unless
|
|
166
|
+
`--structural-only` is chosen explicitly. Denylist patterns and matched text
|
|
167
|
+
never belong in the shared repository.
|
|
168
|
+
|
|
169
|
+
### 3. Collaboration becomes governed disclosure
|
|
170
|
+
|
|
171
|
+
Collaboration is not equivalent to giving every participant every file. The
|
|
172
|
+
Atelier models audience, runtime visibility, roles, and capability envelopes
|
|
173
|
+
as separate concerns. A projection can therefore disclose the material needed
|
|
174
|
+
for a task while withholding material outside that boundary.
|
|
175
|
+
|
|
176
|
+
This creates a shared language for human handoffs, agent sessions, reviews,
|
|
177
|
+
and eventual managed delivery. The open package validates the declared
|
|
178
|
+
boundary; it does not silently make access decisions on your behalf.
|
|
179
|
+
|
|
180
|
+
### 4. The local runtime serves people and agents
|
|
181
|
+
|
|
182
|
+
`atelier dev` exposes a loopback-only review surface backed by the compiled
|
|
183
|
+
graph. The library exposes the same project, graph, validation, and projection
|
|
184
|
+
primitives to code.
|
|
185
|
+
|
|
186
|
+
Consumer-owned authoring or review services that need a separate durable
|
|
187
|
+
lifecycle follow [the managed local-service contract](./docs/local-services.md).
|
|
188
|
+
That contract standardizes process ownership, private local state, and browser
|
|
189
|
+
recovery without putting a tenant's service details into Atelier.
|
|
190
|
+
|
|
191
|
+
The shipped agent model is intentionally bounded: the Atelier can assemble
|
|
192
|
+
session context, capability envelopes, and proposed changes, but it does not
|
|
193
|
+
apply those proposals or grant direct write access. It is a local context and
|
|
194
|
+
control layer that another interface can build on, not an autonomous editor.
|
|
195
|
+
|
|
196
|
+
The separate headless repository supervisor can observe one explicitly
|
|
197
|
+
enrolled Git repository, fetch and fast-forward it, and prepare a bounded
|
|
198
|
+
commit plan. A commit still requires an exact user confirmation and an
|
|
199
|
+
unchanged re-observation; the loopback browser receives no apply endpoint.
|
|
200
|
+
See [Atelier Sync: Deliverable Zero](docs/atelier-sync.md).
|
|
201
|
+
|
|
202
|
+
### 5. The repository can power another product
|
|
32
203
|
|
|
204
|
+
The CLI is one interface. The package is also a library, and its contracts are
|
|
205
|
+
published artifacts. A tool can use the repository as its durable source of
|
|
206
|
+
truth, compile the graph, select an audience-safe projection, and present a
|
|
207
|
+
purpose-built experience without reimplementing the governance model.
|
|
208
|
+
|
|
209
|
+
That tool may be private, open source, or commercial. Apache-2.0 permits all
|
|
210
|
+
three. Conformance to the public Atelier contracts does not require a MNSTRY
|
|
211
|
+
account or service.
|
|
212
|
+
|
|
213
|
+
Read [the design document](./docs/design.md) for the five-part architecture and
|
|
214
|
+
[the ontology](./docs/ontology.md) and
|
|
215
|
+
[contract-stability policy](./docs/contract-stability.md) for the stable
|
|
216
|
+
boundaries.
|
|
217
|
+
|
|
218
|
+
## Build your own tool on it
|
|
219
|
+
|
|
220
|
+
Use the CLI when a shell command or CI gate is enough. Use the library when the
|
|
221
|
+
Atelier is the substrate beneath a custom interface:
|
|
222
|
+
|
|
223
|
+
```js
|
|
224
|
+
import {
|
|
225
|
+
buildGraph,
|
|
226
|
+
resolveProjectConfig,
|
|
227
|
+
} from '@mnstry/atelier'
|
|
228
|
+
|
|
229
|
+
const project = resolveProjectConfig({
|
|
230
|
+
cwd: process.cwd(),
|
|
231
|
+
argv: ['--project=./atelier.project.json'],
|
|
232
|
+
})
|
|
233
|
+
const graph = buildGraph(project)
|
|
234
|
+
|
|
235
|
+
if (graph.errors.length > 0) throw new Error(graph.errors.join('\n'))
|
|
236
|
+
console.log(graph.nodes)
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
The package exports change over the alpha series, so pin the exact prerelease
|
|
240
|
+
version and treat the package export map and shipped source modules as the
|
|
241
|
+
executable API reference. [Distribution contracts](./docs/distributions.md) explain
|
|
242
|
+
how a governed subset can be packaged for another surface without widening its
|
|
243
|
+
audience.
|
|
244
|
+
|
|
245
|
+
The [advisory decision contract](./docs/decisions.md) gives hosts bounded
|
|
246
|
+
choice, score and boolean questions with evidence references and recorded
|
|
247
|
+
uncertainty. `@mnstry/atelier/decisions` validates these records offline.
|
|
248
|
+
The host supplies optional provider execution and retains authorization;
|
|
249
|
+
an assessment carries proposal-only authority.
|
|
250
|
+
|
|
251
|
+
## Where the Atelier stops
|
|
252
|
+
|
|
253
|
+
The open package owns repository-side structure and proof. A managed runtime
|
|
254
|
+
may consume a conformant export, but that is a separate system with a separate
|
|
255
|
+
trust boundary.
|
|
256
|
+
|
|
257
|
+
| The local Atelier does | A managed runtime may do |
|
|
258
|
+
| --- | --- |
|
|
259
|
+
| Parse sources and sidecars | Authenticate participants |
|
|
260
|
+
| Compile and query the graph | Resolve live authorization |
|
|
261
|
+
| Validate contracts and relationships | Persist runtime state |
|
|
262
|
+
| Enforce export audience boundaries | Deliver governed experiences |
|
|
263
|
+
| Generate local review and agent context | Record consent and operational events |
|
|
264
|
+
| Check offline conformance | Decide optional admission |
|
|
265
|
+
|
|
266
|
+
### Claims you can verify
|
|
267
|
+
|
|
268
|
+
<!-- atelier:block:claims:start -->
|
|
33
269
|
This package makes three promises. None of them asks for your trust — each
|
|
34
270
|
one names the command that proves it.
|
|
35
271
|
|
|
36
|
-
**
|
|
37
|
-
telemetry,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
`
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
272
|
+
**There is no silent egress; every network path is named.** There is no
|
|
273
|
+
telemetry, update check, crash reporting, or model provider path in the package.
|
|
274
|
+
The optional vault API adds explicit host-bound artifact uploads and reads; it
|
|
275
|
+
is never activated by local authoring commands. Its injected storage, database
|
|
276
|
+
and identity SDKs may use the network and require separate hosted qualification. The exceptions are explicit: `boundary check` and
|
|
277
|
+
`upgrade` (including `--dry-run` and `--apply`) may invoke `gh api user` only when
|
|
278
|
+
an operated private-domain repository needs owner attribution, no explicit selector or `GITHUB_ACTOR` was supplied, and no
|
|
279
|
+
configured Git email maps to an actor. Shared-only boundary checks skip derived
|
|
280
|
+
identity lookup. Invalid explicit selectors are refused without fallback;
|
|
281
|
+
platform logins must uniquely match declared login mappings. Repository identity
|
|
282
|
+
checks may invoke `gh api repos/...` to resolve a canonical GitHub identity.
|
|
283
|
+
Those authenticated requests use your own `gh` credentials. Recorded repository
|
|
284
|
+
identities let identity checks keep working when the provider is unavailable.
|
|
285
|
+
See `docs/install.md` for the full attribution precedence and mode semantics.
|
|
286
|
+
Explicitly enrolled Atelier Sync may also run bounded Git fetches
|
|
287
|
+
for observation/reconciliation and one non-force push only when the exact
|
|
288
|
+
reviewed commit plan requested and confirmed it, no earlier local commit is
|
|
289
|
+
waiting to be published, and HEAD still names the verified commit object. Sync
|
|
290
|
+
never uses the network actor fallback, follows tags, or recursively publishes
|
|
291
|
+
submodule refs. The local authoring HTTP client
|
|
292
|
+
refuses non-loopback URLs, the served pages authorize no external origin, and
|
|
293
|
+
release audit scans every executable or markup file in the exact `npm pack`
|
|
294
|
+
inventory for egress primitives. The standalone gate also scans executable and
|
|
295
|
+
markup files under `src/`, `bin/`, `scripts/`, `templates/`, `examples/`, and
|
|
296
|
+
`skills/`. Two limits worth stating plainly: the egress control does not
|
|
297
|
+
interpret data-only `.json` or `.md` files, and it does not model
|
|
298
|
+
`child_process`; the reviewed `gh` and enrolled Git paths above are documented
|
|
299
|
+
subprocess exceptions rather than scanner detections:
|
|
48
300
|
|
|
49
301
|
```bash
|
|
50
302
|
npm run egress:check
|
|
@@ -75,188 +327,133 @@ atelier dry-run ./atelier-export.json
|
|
|
75
327
|
`docs/continuity.md` records the distribution commitments behind these
|
|
76
328
|
claims, including the perpetual Apache-2.0 grant on every tagged release you
|
|
77
329
|
receive.
|
|
330
|
+
<!-- atelier:block:claims:end -->
|
|
78
331
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
```bash
|
|
82
|
-
npm install --save-dev @mnstry/atelier@0.2.0-alpha.1
|
|
83
|
-
|
|
84
|
-
npx atelier init --fixture=sample-workspace --target ./sample
|
|
85
|
-
npx atelier graph --project ./sample/atelier.project.json
|
|
86
|
-
npx atelier project --project ./sample/atelier.project.json
|
|
87
|
-
npx atelier readiness --project ./sample/atelier.project.json
|
|
88
|
-
MNSTRY_ATELIER_ACTOR=owner npx atelier boundary check --project ./sample/atelier.project.json
|
|
89
|
-
npx atelier dev --project ./sample/atelier.project.json
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
`npx` here runs the binary already installed in `./node_modules/.bin`. Always
|
|
93
|
-
install first, and keep the `@mnstry/` scope — the unscoped name `atelier`
|
|
94
|
-
belongs to an unrelated third-party package.
|
|
95
|
-
|
|
96
|
-
`init` scaffolds a fictional sample workspace, `graph` builds the knowledge
|
|
97
|
-
graph from front matter and sidecars, `project` generates the local review
|
|
98
|
-
surface, `dev` serves it on loopback only. From there:
|
|
99
|
-
|
|
100
|
-
```js
|
|
101
|
-
import { validateAtelierExportDryRun } from '@mnstry/atelier'
|
|
102
|
-
|
|
103
|
-
const report = validateAtelierExportDryRun(exportDocument)
|
|
104
|
-
console.log(report.accepted, report.importable, report.errors)
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
Real projects start from the `private-domain`, `shared-project`, or
|
|
108
|
-
`distribution` templates instead of the sample fixture.
|
|
109
|
-
|
|
110
|
-
## What this package does
|
|
111
|
-
|
|
112
|
-
- Initializes neutral local Atelier projects.
|
|
113
|
-
- Builds a front-matter and sidecar-led knowledge graph; a `.kg.json` sidecar
|
|
114
|
-
enrolls any file — Markdown, JSON, YAML, CSV, media — without the kit ever
|
|
115
|
-
parsing the foreign format.
|
|
116
|
-
- Generates and serves a local GUI projection over a loopback-only sidecar.
|
|
117
|
-
- Produces agent-harness context and capability envelopes, and ships neutral
|
|
118
|
-
Codex and Claude skill wrappers for readiness review work.
|
|
119
|
-
- Records proposal metadata without browser apply/write endpoints.
|
|
120
|
-
- Enforces the local source `audience` and runtime `visibility` boundary, and
|
|
121
|
-
rejects unresolved, disguised, or non-public-projectable source references.
|
|
122
|
-
- Enforces Repo Boundary Guard V1 for private domain and shared project
|
|
123
|
-
repos: strict policies fail closed when private or sensitive source is
|
|
124
|
-
placed in a shared repo, when protected local files are staged, or when
|
|
125
|
-
private-domain material appears in shared work without a `git.promote`
|
|
126
|
-
disclosure record.
|
|
127
|
-
- Validates `atelier-export@v1` JSON against the published schema and
|
|
128
|
-
produces deterministic dry-run reports with `accepted`, `importable`, and
|
|
129
|
-
`worstOperationStatus`.
|
|
130
|
-
- Ships the bundled `mnstry-readiness-pack@v1` with twelve claim-first
|
|
131
|
-
readiness protocols, extensible through validated extension packs.
|
|
132
|
-
- Writes and checks `atelier.lock.json`, and applies branch-based,
|
|
133
|
-
review-first upgrades that refuse dirty repos and never silently overwrite
|
|
134
|
-
authored content.
|
|
135
|
-
- Checks first-party source, templates, and examples for forbidden
|
|
136
|
-
non-localhost egress — a fail-closed discipline gate over this repo's own
|
|
137
|
-
code, not a runtime sandbox.
|
|
138
|
-
|
|
139
|
-
## What this package does not do
|
|
332
|
+
### What it will not do
|
|
140
333
|
|
|
334
|
+
<!-- atelier:block:will-not-do:start -->
|
|
141
335
|
- It does not write to a MNSTRY runtime database.
|
|
142
|
-
- It does not import, provision, publish, or send
|
|
143
|
-
|
|
336
|
+
- It does not import, provision, publish, or send project content to a MNSTRY
|
|
337
|
+
managed runtime.
|
|
338
|
+
- Conformance remains offline. Local CLI network access is limited to the documented
|
|
339
|
+
`gh` actor-resolution fallback and explicitly enrolled Atelier Sync Git
|
|
340
|
+
operations: bounded fetch for observation/reconciliation, and non-force push
|
|
341
|
+
only when the exact reviewed commit plan requested and confirmed it, no
|
|
342
|
+
earlier local commit remains unpublished, and HEAD still names the verified
|
|
343
|
+
commit object; Sync does not use network actor fallback, follow tags, or
|
|
344
|
+
recursively publish submodule refs.
|
|
345
|
+
- Optional vault adapters use explicitly injected host SDKs and transports. The
|
|
346
|
+
host owns their network access, authentication and infrastructure; importing
|
|
347
|
+
the kit does not create a service or make a network request.
|
|
144
348
|
- It does not execute model-assisted analysis or any model provider.
|
|
145
349
|
- It does not include client project content.
|
|
146
350
|
|
|
147
351
|
These limits are the design. An authoring tool for private material earns
|
|
148
352
|
trust by what it refuses to be able to do.
|
|
353
|
+
<!-- atelier:block:will-not-do:end -->
|
|
149
354
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
What you author is yours. Documents live in your repositories, in formats you
|
|
153
|
-
chose, readable without this tool. The one vocabulary the contracts enforce:
|
|
154
|
-
`audience` describes local source readership (`public`, `team`, `operator`,
|
|
155
|
-
`staff`, `private`, `sensitive`); runtime/export `visibility` describes
|
|
156
|
-
runtime exposure and accepts only `private`, `shared`, `platform`, or
|
|
157
|
-
`public`. A public export referencing a source whose audience is not public
|
|
158
|
-
is refused — that check is fixture-pinned and mutation-tested.
|
|
159
|
-
|
|
160
|
-
## Build a branded distribution
|
|
161
|
-
|
|
162
|
-
The Atelier is designed to be white-labeled. A distribution wraps the CLI
|
|
163
|
-
under its own name, contributes a validated extension pack (branded
|
|
164
|
-
protocols, terms, templates), and themes the projection — while the root
|
|
165
|
-
contracts, guards, and conformance stay canonical underneath. Start by
|
|
166
|
-
copying the worked example:
|
|
167
|
-
|
|
168
|
-
- `examples/loomworks-studio` — a complete fictional distribution: branded
|
|
169
|
-
bin, extension pack, themed workspace template.
|
|
170
|
-
- `docs/distributions.md` — the contract a distribution must honor.
|
|
171
|
-
- `TRADEMARKS.md` — naming rules; Apache-2.0 grants code rights, not brand
|
|
172
|
-
rights. Every distribution carries "powered by MNSTRY Atelier" attribution,
|
|
173
|
-
checked by `atelier distribution check`.
|
|
174
|
-
|
|
175
|
-
## The MNSTRY relationship
|
|
176
|
-
|
|
177
|
-
The Atelier is the front porch, not the house. Conformance — is this document
|
|
178
|
-
valid against the published contracts? — is public, offline, and free,
|
|
179
|
-
forever. Admission — will MNSTRY's governed runtime accept it for delivery to
|
|
180
|
-
clients? — is a separate, opt-in step: a signed attestation issued by MNSTRY
|
|
181
|
-
against criteria this package publishes (`docs/attestation.md`). You can
|
|
182
|
-
build on the Atelier without ever talking to MNSTRY. If you want your work to
|
|
183
|
-
run on MNSTRY runtimes, the path is admission, and the rejection message is
|
|
184
|
-
part of the contract.
|
|
185
|
-
|
|
186
|
-
## Feedback and announcements
|
|
187
|
-
|
|
188
|
-
Both channels respect consent by construction. `atelier feedback` writes a
|
|
189
|
-
scanned, redaction-checked report to a local file — there is no send path;
|
|
190
|
-
you choose whether and where to share it. `announcements list` verifies
|
|
191
|
-
project-shipped announcements against a committed public key — pull-only,
|
|
192
|
-
nothing phones home to ask.
|
|
193
|
-
|
|
194
|
-
## Running the test suite from a fresh clone
|
|
195
|
-
|
|
196
|
-
`npm test` includes one fail-closed check that expects a private denylist
|
|
197
|
-
file (`release-denylist.local.json`, gitignored) used by MNSTRY's release
|
|
198
|
-
lane. On a fresh clone that file is absent, so the check **fails** — it never
|
|
199
|
-
passes silently on missing protection. Expect this, after `npm install`:
|
|
355
|
+
### Conformance and admission
|
|
200
356
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
npm test # 509 tests: 508 pass, 1 fail — the denylist check, by design
|
|
204
|
-
```
|
|
357
|
+
<!-- atelier:block:conformance-admission:start -->
|
|
358
|
+
The Atelier export format is MNSTRY's format, offered openly.
|
|
205
359
|
|
|
206
|
-
|
|
207
|
-
|
|
360
|
+
**Anyone can check a document against the published contracts, forever,
|
|
361
|
+
offline.** The contracts, fixtures, and dry-run validator all ship in the
|
|
362
|
+
package, so conformance needs no account, no network, and no MNSTRY
|
|
363
|
+
involvement.
|
|
208
364
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
365
|
+
Admission is a narrower, opt-in decision: whether a MNSTRY governed runtime
|
|
366
|
+
accepts a document for delivery to the people it serves. That is what
|
|
367
|
+
admission buys — delivery through a runtime that enforces consent and
|
|
368
|
+
visibility at serve time — and it takes the form of a signed MNSTRY
|
|
369
|
+
attestation against criteria this package publishes (`docs/attestation.md`).
|
|
370
|
+
The criteria are public, the checker is private, and the rejection message
|
|
371
|
+
is part of the contract. You can build on the Atelier without ever talking
|
|
372
|
+
to MNSTRY, and a document MNSTRY declines can still be fully conformant.
|
|
373
|
+
<!-- atelier:block:conformance-admission:end -->
|
|
212
374
|
|
|
213
|
-
##
|
|
375
|
+
## Install and go deeper
|
|
376
|
+
|
|
377
|
+
Node.js `>=22.18.0 <23` is required. Pin the prerelease while the package
|
|
378
|
+
remains in alpha:
|
|
214
379
|
|
|
215
380
|
```bash
|
|
216
|
-
|
|
217
|
-
atelier contract check
|
|
218
|
-
atelier graph --project ./atelier.project.json
|
|
219
|
-
atelier project --project ./atelier.project.json
|
|
220
|
-
atelier readiness --project ./atelier.project.json
|
|
221
|
-
atelier readiness protocols
|
|
222
|
-
atelier readiness journey --project ./atelier.project.json
|
|
223
|
-
atelier readiness run mnstry.readiness:identity-map --project ./atelier.project.json
|
|
224
|
-
atelier readiness packet --project ./atelier.project.json
|
|
225
|
-
atelier readiness export --dry-run --project ./atelier.project.json
|
|
226
|
-
atelier boundary check --project ./atelier.project.json
|
|
227
|
-
atelier boundary check --staged --project ./atelier.project.json
|
|
228
|
-
atelier boundary install-hooks --project ./atelier.project.json
|
|
229
|
-
atelier promote --source-repo tenant-private-domain --target-repo project-alpha --kg-id tenant-private-domain:seed
|
|
230
|
-
atelier lock write --project ./atelier.project.json
|
|
231
|
-
atelier lock check --project ./atelier.project.json
|
|
232
|
-
atelier upgrade --dry-run --project ./atelier.project.json
|
|
233
|
-
atelier upgrade --apply --project ./atelier.project.json --branch codex/atelier-upgrade-YYYYMMDD
|
|
234
|
-
atelier extension-pack validate --project ./atelier.project.json
|
|
235
|
-
atelier attestation verify ./attestation.json
|
|
236
|
-
atelier feedback create --message "what happened"
|
|
237
|
-
atelier announcements list
|
|
238
|
-
atelier distribution check --target ./my-distribution
|
|
239
|
-
atelier dev --project ./atelier.project.json
|
|
381
|
+
npm install --save-dev @mnstry/atelier@0.2.0-alpha.11
|
|
240
382
|
```
|
|
241
383
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
runtime
|
|
384
|
+
Then choose the path that matches what you are building:
|
|
385
|
+
|
|
386
|
+
- [Installation and first run](./docs/install.md)
|
|
387
|
+
- [Design and architecture](./docs/design.md)
|
|
388
|
+
- [Knowledge graph and source model](./docs/knowledge-graph.md)
|
|
389
|
+
- [Local runtime and agent boundary](./docs/atelier-runtime.md)
|
|
390
|
+
- [Distribution contracts](./docs/distributions.md)
|
|
391
|
+
- [Conformance and attestation](./docs/attestation.md)
|
|
392
|
+
- [Continuity commitments](./docs/continuity.md)
|
|
393
|
+
- [Assurance controls and evidence map](./docs/assurance-controls.md)
|
|
394
|
+
- [Upgrade notes](./docs/upgrade.md)
|
|
395
|
+
- [Upgrade with your agent](./docs/guided-upgrades.md)
|
|
396
|
+
- [Obsidian projection](./docs/obsidian.md)
|
|
397
|
+
|
|
398
|
+
## Status and command reference
|
|
399
|
+
|
|
400
|
+
Current package: `@mnstry/atelier@0.2.0-alpha.11`.
|
|
401
|
+
|
|
402
|
+
The alpha package is usable and contract-tested, but its library API may still
|
|
403
|
+
change before a stable release. Pin the exact version in production toolchains.
|
|
404
|
+
|
|
405
|
+
```text
|
|
406
|
+
atelier init
|
|
407
|
+
atelier adopt
|
|
408
|
+
atelier setup
|
|
409
|
+
atelier graph
|
|
410
|
+
atelier project
|
|
411
|
+
atelier build
|
|
412
|
+
atelier dev
|
|
413
|
+
atelier generated check
|
|
414
|
+
atelier config check
|
|
415
|
+
atelier extension-pack
|
|
416
|
+
atelier distribution check
|
|
417
|
+
atelier egress check
|
|
418
|
+
atelier boundary
|
|
419
|
+
atelier readiness
|
|
420
|
+
atelier export
|
|
421
|
+
atelier context flow
|
|
422
|
+
atelier support bundle
|
|
423
|
+
atelier feedback
|
|
424
|
+
atelier announcements
|
|
425
|
+
atelier attestation
|
|
426
|
+
atelier promote
|
|
427
|
+
atelier upgrade
|
|
428
|
+
atelier lock
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
Run `atelier --help` or `atelier <command> --help` for the current flags. The
|
|
432
|
+
full command behavior is also covered by the package's executable tests.
|
|
433
|
+
|
|
434
|
+
## Contributing and license
|
|
435
|
+
|
|
436
|
+
Contributions are welcome through [the contribution guide](./CONTRIBUTING.md).
|
|
437
|
+
MNSTRY Atelier is released under [Apache-2.0](./LICENSE).
|
|
248
438
|
|
|
249
|
-
##
|
|
439
|
+
## Experimental hosted vault contract
|
|
250
440
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
441
|
+
An optional [private artifact vault service](docs/vault-service.md) supplies a
|
|
442
|
+
provider-independent ownership boundary and explicit Vercel/Cloudflare storage
|
|
443
|
+
bindings. It is not enabled by local CLI commands. Hosting adapters can perform
|
|
444
|
+
network I/O only when explicitly installed and invoked by a consuming host.
|
|
445
|
+
Browser identity integration and hosted acceptance remain unqualified.
|
|
254
446
|
|
|
255
|
-
##
|
|
447
|
+
## Experimental Obsidian projection
|
|
256
448
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
449
|
+
An opt-in projection publishes readable, linked notes of an enrolled workspace
|
|
450
|
+
into a vault outside every repository, keeps them current, and preserves every
|
|
451
|
+
edit made in the editor before anything is republished. A body edit is applied
|
|
452
|
+
to its source manually or under a scoped policy the user installs; anything
|
|
453
|
+
structural stays a copy-only proposal. Atelier never commits to Git for it.
|
|
454
|
+
It is disabled unless a project enables it, and it is proven on one platform
|
|
455
|
+
and one app version. Read [what it does and its known limits](docs/obsidian.md),
|
|
456
|
+
the [contract](docs/obsidian-contract.md) and the
|
|
457
|
+
[maintenance service](docs/local-services.md) before relying on it. The
|
|
458
|
+
package subpaths are `@mnstry/atelier/obsidian` and
|
|
459
|
+
`@mnstry/atelier/obsidian/*`.
|
package/SECURITY.md
CHANGED
|
@@ -42,9 +42,14 @@ you have to sign.
|
|
|
42
42
|
These are the claims the package makes. Defeating any of them is a
|
|
43
43
|
vulnerability, and the more quietly it can be defeated, the more severe:
|
|
44
44
|
|
|
45
|
-
- **Egress.** Any network send path
|
|
45
|
+
- **Egress.** Any undocumented network send path, any vault SDK invocation
|
|
46
|
+
without explicit host integration, or any way to make
|
|
46
47
|
the local sidecar reachable off loopback or serve a policy that authorizes
|
|
47
48
|
an external origin.
|
|
49
|
+
- **Vault ownership.** Any hosted artifact or asset served without a verified
|
|
50
|
+
owner identity, cross-vault credential use, or publication that bypasses the
|
|
51
|
+
atomic owner/revision check. The experimental contract still requires hosted
|
|
52
|
+
qualification; local conformance tests are not a production safety claim.
|
|
48
53
|
- **Boundary guard.** Any way to get private or sensitive source into a
|
|
49
54
|
shared repo, to stage a protected local file, or to promote private-domain
|
|
50
55
|
material without the required disclosure record — while the guard reports
|