@mnstry/atelier 0.2.0-alpha.5 → 0.2.0-alpha.8
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 +191 -0
- package/README.md +86 -25
- 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/docs/assurance-controls.md +12 -2
- package/docs/atelier-runtime.md +13 -2
- package/docs/atelier-sync.md +172 -0
- package/docs/blocks/claims.md +28 -18
- package/docs/blocks/will-not-do.md +12 -3
- package/docs/coauthor-session.md +57 -0
- package/docs/connected-composition.md +75 -0
- package/docs/decisions.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 +65 -9
- 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/local-review.md +84 -0
- package/docs/local-services.md +227 -0
- package/docs/local-state.md +107 -0
- package/docs/obsidian-contract.md +687 -0
- package/docs/obsidian.md +387 -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 +99 -2
- package/docs/review-portability.md +55 -0
- package/docs/skill-steward.md +156 -0
- package/docs/upgrade.md +70 -2
- 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/ui/presentation/pane.v1.json +7 -0
- package/fixtures/ui/presentation/reference.v1.json +293 -0
- package/package.json +61 -6
- package/skills/claude/atelier-guided-coauthor/SKILL.md +49 -0
- package/skills/claude/atelier-guided-upgrade/SKILL.md +97 -0
- package/skills/claude/atelier-open/SKILL.md +5 -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-open/SKILL.md +5 -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 +9 -4
- package/src/boundary/policy.mjs +74 -42
- package/src/cli/project-options.mjs +58 -0
- package/src/cli/run.mjs +61 -3
- package/src/coauthor/session.mjs +161 -0
- package/src/coauthor/store.mjs +173 -0
- package/src/collaboration/event-ledger.mjs +16 -33
- package/src/collaboration/inspection-bundle.mjs +223 -0
- package/src/collaboration/review-contracts.mjs +25 -0
- package/src/collaboration/review-store.mjs +305 -0
- package/src/commands/coauthor.mjs +26 -0
- package/src/commands/config.mjs +6 -1
- package/src/commands/extension-pack.mjs +15 -8
- package/src/commands/init.mjs +44 -5
- package/src/commands/obsidian.mjs +368 -0
- package/src/commands/review.mjs +147 -0
- 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 +13 -0
- package/src/export/atelier-export-contract.mjs +16 -1
- package/src/extension-packs/lifecycle.mjs +154 -0
- package/src/graph/graph.mjs +64 -2
- package/src/graph/knowledge-graph.mjs +548 -24
- package/src/guides/contracts.mjs +54 -0
- package/src/index.mjs +29 -0
- package/src/intake/store.mjs +119 -0
- package/src/preview/channel.mjs +89 -0
- package/src/project/config.mjs +50 -49
- package/src/project/durable-state.mjs +161 -0
- package/src/project/file-class.mjs +166 -0
- package/src/project/private-state.mjs +11 -1
- 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 +139 -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 +110 -0
- package/src/runtime/obsidian/app-production-seams.mjs +96 -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 +243 -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-main.mjs +89 -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 +44 -0
- package/src/server/server.mjs +1 -0
- package/src/skills/steward.mjs +780 -0
- 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 +63 -28
- 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
|
@@ -30,6 +30,9 @@ consumer smokes:
|
|
|
30
30
|
- Version drift: `CHANGELOG.md` must contain a `## <version>` heading and
|
|
31
31
|
`README.md` must mention the version. The expected version and tarball name
|
|
32
32
|
are derived from `package.json`, never hardcoded.
|
|
33
|
+
- Declared exports: every `exports` target in the packed `package.json` must
|
|
34
|
+
be a file the tarball carries.
|
|
35
|
+
- Obsidian package contents: see [Obsidian package contents](#obsidian-package-contents).
|
|
33
36
|
|
|
34
37
|
Exit codes: `0` clean, `1` findings, `2` configuration error (for example an
|
|
35
38
|
unavailable denylist without explicit acknowledgment).
|
|
@@ -43,6 +46,78 @@ publishing workflow runs `prepublishOnly` explicitly with that output directory,
|
|
|
43
46
|
re-verifies the retained digest, and publishes the retained tarball path rather
|
|
44
47
|
than repacking the source checkout.
|
|
45
48
|
|
|
49
|
+
### Obsidian package contents
|
|
50
|
+
|
|
51
|
+
The Obsidian projection ships as runtime, contracts and documents, and its
|
|
52
|
+
proof tooling does not ship. `release:audit` enforces both halves on the exact
|
|
53
|
+
tarball.
|
|
54
|
+
|
|
55
|
+
Shipped, and required by the audit:
|
|
56
|
+
|
|
57
|
+
- The entry points behind the package subpaths `./obsidian` (maintenance
|
|
58
|
+
runtime, `src/runtime/obsidian/index.mjs`), `./obsidian/contracts`,
|
|
59
|
+
`./obsidian/materialize`, `./obsidian/publication`, `./obsidian/recovery`,
|
|
60
|
+
`./obsidian/edits`, `./obsidian/proposals` and `./obsidian/selection`, with
|
|
61
|
+
`src/commands/obsidian.mjs`, the service entry and the two contribution
|
|
62
|
+
modules under `src/runtime/obsidian/contributions/`.
|
|
63
|
+
- Every `contracts/atelier-obsidian-<name>.v<n>.schema.json` present in the
|
|
64
|
+
source tree (lowercase name, versioned). Each must be packed and exported
|
|
65
|
+
under its own path, and the audit fails if it finds none.
|
|
66
|
+
- `docs/obsidian.md` and `docs/obsidian-contract.md`.
|
|
67
|
+
- `fixtures/obsidian/**`: small synthetic text only. Every packed fixture, in
|
|
68
|
+
any subtree and spelling under `fixtures/`, is at most 262,144 bytes. The
|
|
69
|
+
acceptance receipts under `fixtures/obsidian/acceptance/receipts/` are
|
|
70
|
+
synthetic shape fixtures whose host id matches `host-synthetic-*` and whose
|
|
71
|
+
operator id is `operator-synthetic`; the schema fixtures under
|
|
72
|
+
`fixtures/obsidian/contracts/` carry no identity block. Validating one closes
|
|
73
|
+
nothing.
|
|
74
|
+
|
|
75
|
+
Never shipped, and refused by name in addition to the path allowlist:
|
|
76
|
+
|
|
77
|
+
- `scripts/**` (including the `scripts/obsidian/` desktop harness, scale
|
|
78
|
+
generator and receipt verifier), `test/**`, `experiments/**`, `examples/**`.
|
|
79
|
+
- Any `.artifacts/` directory, where acceptance receipts and their evidence
|
|
80
|
+
are written.
|
|
81
|
+
- Any `.asar` file.
|
|
82
|
+
- An acceptance receipt outside `fixtures/obsidian/`, one carrying the desktop
|
|
83
|
+
harness extension (`mnstry.atelier.obsidian.desktop-receipts`), or one whose
|
|
84
|
+
host or operator id is not the synthetic form above (or, outside the schema
|
|
85
|
+
fixtures, one with no identity block): that document records a real host,
|
|
86
|
+
even with the harness block removed.
|
|
87
|
+
- Scale corpora and binary samples. They are generated in temporary storage at
|
|
88
|
+
test time and are never files of this repository.
|
|
89
|
+
|
|
90
|
+
The path allowlist was not widened for the Obsidian projection. Every check
|
|
91
|
+
above refuses more than the allowlist alone did.
|
|
92
|
+
|
|
93
|
+
`test/obsidian-package.test.mjs` is the AP-06 package proof and runs with the
|
|
94
|
+
ordinary test suite. It packs the package, extracts it into a bare consumer
|
|
95
|
+
project, links the locked runtime dependencies from the checkout, and from a
|
|
96
|
+
separate process imports every Obsidian subpath by package name, checks that
|
|
97
|
+
an undeclared internal path stays closed, and runs the production pipeline
|
|
98
|
+
(canonical graph, source snapshot, `prepareView`, `publishView`) over a
|
|
99
|
+
synthetic workspace into a temporary vault that no application has open. A
|
|
100
|
+
document the census did not classify must not reach the vault. It also packs
|
|
101
|
+
a synthetic package containing each refused class and matches each audit
|
|
102
|
+
refusal by message. It does not run `npm install`; `consumer:smoke` does, on
|
|
103
|
+
the same tarball contents, and imports every declared export including these.
|
|
104
|
+
|
|
105
|
+
Limits of this proof:
|
|
106
|
+
|
|
107
|
+
- It is package proof only. Gate G18 also requires a separately recorded
|
|
108
|
+
adopter acceptance, and nothing in this repository produces or implies one.
|
|
109
|
+
- It never starts the app. Behaviour inside a running app is acceptance
|
|
110
|
+
evidence from `scripts/obsidian/desktop-receipts.mjs` on a desktop host and
|
|
111
|
+
is not covered by any CI lane. No CI lane has a desktop session.
|
|
112
|
+
- Publication is skipped where no atomic exchange exists. On Windows the
|
|
113
|
+
publisher refuses with `exchange-unsupported-platform`, so the Windows
|
|
114
|
+
portability lane runs the pack, import and `prepareView` cases and skips the
|
|
115
|
+
publish case.
|
|
116
|
+
- The `*ForOracleTests` names exported by the Obsidian modules are mutation
|
|
117
|
+
controls for the test suite. They ship because the modules that define them
|
|
118
|
+
ship; they are not a supported API and carry no compatibility promise. They
|
|
119
|
+
should be excluded when the public API baseline is next regenerated.
|
|
120
|
+
|
|
46
121
|
### repo:check
|
|
47
122
|
|
|
48
123
|
`npm run repo:check` (`scripts/check-repo-disclosure.mjs`) sweeps the whole
|
|
@@ -116,8 +191,23 @@ function signatures, types, or behavior.
|
|
|
116
191
|
### egress:check
|
|
117
192
|
|
|
118
193
|
`npm run egress:check` (`atelier egress check`) scans package runtime paths for
|
|
119
|
-
forbidden non-localhost egress. The package claims no
|
|
120
|
-
|
|
194
|
+
forbidden non-localhost HTTP egress primitives. The package claims no silent or
|
|
195
|
+
undocumented runtime egress; this gate is one mechanical check behind that
|
|
196
|
+
claim. It does not interpret data-only Markdown/JSON and does not model
|
|
197
|
+
`child_process`, so the reviewed `gh` identity-resolution subprocesses and the
|
|
198
|
+
explicitly enrolled Atelier Sync Git fetch/non-force-push subprocesses are
|
|
199
|
+
documented exceptions backed by dedicated refusal tests. Sync refuses fetch on
|
|
200
|
+
an incomplete observation, refuses publish while prior local commits are
|
|
201
|
+
unpublished, strips repository/config retargeting environment variables, and
|
|
202
|
+
pushes the exact post-hook-verified commit object without following tags or
|
|
203
|
+
recursively publishing submodule refs. Its boundary check also suppresses the
|
|
204
|
+
optional network actor fallback.
|
|
205
|
+
|
|
206
|
+
The optional `vault` API is explicitly host-bound: provider storage, metadata
|
|
207
|
+
and identity bindings can perform network I/O when invoked by a consuming host.
|
|
208
|
+
The core does not install SDKs or start a listener. The lexical egress scanner
|
|
209
|
+
does not model SDK method calls; vault behavior requires its own conformance
|
|
210
|
+
suite and independent review. No egress suppression marker is added for it.
|
|
121
211
|
|
|
122
212
|
### consumer:smoke
|
|
123
213
|
|
|
@@ -210,6 +300,13 @@ A version bump touches exactly:
|
|
|
210
300
|
- `CHANGELOG.md` (a `## <version>` heading)
|
|
211
301
|
- the pinned install tags in `README.md`, `docs/install.md`,
|
|
212
302
|
and `docs/upgrade.md`
|
|
303
|
+
- `compatibleRootVersions` in
|
|
304
|
+
`templates/external-project-workspace/pack-lifecycle.json`, so the shipped
|
|
305
|
+
starter's pack is qualified for the released root version (the
|
|
306
|
+
`review packs` consumer smoke and `test/review-portability.test.mjs` fail
|
|
307
|
+
when it lags)
|
|
308
|
+
- the linked package version recorded in
|
|
309
|
+
`examples/astro-presentation/package-lock.json`
|
|
213
310
|
|
|
214
311
|
The release scripts derive the expected version and tarball name from
|
|
215
312
|
`package.json`, so they are not part of the bump surface, and `release:audit`
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Review state and portable inspection
|
|
2
|
+
|
|
3
|
+
| State | Ownership and portability |
|
|
4
|
+
| --- | --- |
|
|
5
|
+
| Contracts, adapter configuration and declared packs | Track in the adapter; domain facts stay in their source repository. |
|
|
6
|
+
| Real answers, evidence snapshots, responses and decisions | Ignored owner-local state; backup is an explicit owner action. |
|
|
7
|
+
| Projections and caches | Regenerable, subject to the same content disclosure boundary. |
|
|
8
|
+
| Session state, nonces and presence | Ephemeral; never exported with review records. |
|
|
9
|
+
| Secrets, credentials, grants and signing keys | Nontransferable through the inspection format. |
|
|
10
|
+
|
|
11
|
+
Moving a Git checkout does not transfer active review authority. This feature
|
|
12
|
+
exports selected historical evidence for inspection; it does not synchronize
|
|
13
|
+
state, upload files, install packs, execute migrations or import current approval.
|
|
14
|
+
There is no encrypted-export option. Encryption, recipient selection and key
|
|
15
|
+
custody require a separate design and qualification. Hashes are not encryption
|
|
16
|
+
and do not authenticate a sender.
|
|
17
|
+
|
|
18
|
+
Preview a selected run and optionally selected response/position request IDs:
|
|
19
|
+
|
|
20
|
+
```sh
|
|
21
|
+
atelier review export --runs RUN_ID --responses RESPONSE_ID,POSITION_ID --denylist PRIVATE_POLICY.json
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
The disclosure policy must contain the `patterns` array used by the existing
|
|
25
|
+
scanner; maintain it privately. The command fails closed if that policy is
|
|
26
|
+
unavailable or rejects selected content. Preview reports selected identities,
|
|
27
|
+
byte counts and digests. Inspect the selected local history and evidence before
|
|
28
|
+
writing the reviewed selection. Then repeat with `--write --out inspection.json`.
|
|
29
|
+
An existing output file is never overwritten. The current selection is validated
|
|
30
|
+
and disclosure-checked again at write time. Exports contain private excerpts and
|
|
31
|
+
asserted names, so an empty policy is appropriate only for an invented fixture.
|
|
32
|
+
|
|
33
|
+
`atelier review inspect inspection.json` validates the version, closed contracts,
|
|
34
|
+
member count/byte bounds, JCS SHA-256 digests, duplicate identities and historical
|
|
35
|
+
links before displaying inert JSON. It does not resolve a project or write active
|
|
36
|
+
state. Foreign decisions remain visibly unverified historical assertions. The
|
|
37
|
+
format carries no trusted signature: there is no applicable signer authorization
|
|
38
|
+
or attestation to verify. Valid hashes prove internal consistency only.
|
|
39
|
+
|
|
40
|
+
The `atelier-review.v1.schema.json` contract defines these separate artifacts.
|
|
41
|
+
Evidence and contributions use the existing JCS implementation; the bundle hash
|
|
42
|
+
covers every top-level member except `digest`. A member hash covers its complete
|
|
43
|
+
`value`; `bytes` is the UTF-8 byte count of `JSON.stringify(value)`. Record input
|
|
44
|
+
hashes cover complete submitted input. Maximum bundle size is 4 MiB, with at most
|
|
45
|
+
20 runs and 2,000 selected document contributions. Current capture supports up to
|
|
46
|
+
256 text source nodes and 1 MiB per source; unsupported inputs refuse capture.
|
|
47
|
+
No archive extraction or arbitrary path writing occurs. Symlink input/output
|
|
48
|
+
leaves, absolute machine-path values, credential-bearing URLs and nontransferable
|
|
49
|
+
field names are refused. Generic text still needs the owner's private disclosure
|
|
50
|
+
policy; structural checks do not determine disclosure permission.
|
|
51
|
+
|
|
52
|
+
To roll back, pin the earlier package and pack/configuration/lock together,
|
|
53
|
+
disable the optional review surface, and retain both ledgers. Legacy proposal
|
|
54
|
+
readers continue using their separate files. Never delete historical records or
|
|
55
|
+
reinterpret them under a replacement pack to make an upgrade appear complete.
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Skill stewardship
|
|
2
|
+
|
|
3
|
+
Atelier skill stewardship is a local, evidence-gated loop for keeping agent
|
|
4
|
+
skills useful without turning every repeated request into permanent
|
|
5
|
+
instructions. It separates four concerns that are easy to blur together:
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
bounded observation -> evidence candidate -> authored and tested change
|
|
9
|
+
|
|
|
10
|
+
package release -> content-bound sync plan -> repo-scoped managed projection
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Git remains the source of record for authored skills. Ignored local state holds
|
|
14
|
+
only enumerated observations, staging directories, and recoverable quarantine.
|
|
15
|
+
The steward has no telemetry, model provider, prompt capture, send path, browser
|
|
16
|
+
apply endpoint, or authority to mutate its source catalog.
|
|
17
|
+
|
|
18
|
+
## The operating loop
|
|
19
|
+
|
|
20
|
+
### 1. Observe outcomes, not conversations
|
|
21
|
+
|
|
22
|
+
An equipped agent can record one outcome after relevant work:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
atelier skills observe \
|
|
26
|
+
--workflow weekly.release \
|
|
27
|
+
--signal repeated-task \
|
|
28
|
+
--outcome success
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The observation accepts only a stable workflow key, one enumerated signal, an
|
|
32
|
+
optional skill name, and an enumerated outcome. It has no fields for prompts,
|
|
33
|
+
transcripts, summaries, source excerpts, names, or client material; callers
|
|
34
|
+
must not encode any of them into the workflow key. Records live under ignored
|
|
35
|
+
`.atelier-local/skill-steward/observations.ndjson`.
|
|
36
|
+
|
|
37
|
+
Signals are `repeated-task`, `missing-workflow`, `user-correction`,
|
|
38
|
+
`trigger-miss`, `trigger-collision`, `tool-failure`, `stale-guidance`,
|
|
39
|
+
`successful-run`, `unused-skill`, and `superseded-skill`. Outcomes are
|
|
40
|
+
`success`, `failure`, `corrected`, `missing`, and `unknown`.
|
|
41
|
+
|
|
42
|
+
### 2. Promote only repeated evidence
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
atelier skills candidates --json
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
The candidate builder is deterministic. It proposes no source edit and uses
|
|
49
|
+
fixed minimums:
|
|
50
|
+
|
|
51
|
+
| Candidate | Evidence required |
|
|
52
|
+
| --- | --- |
|
|
53
|
+
| Create | Three combined `repeated-task` or `missing-workflow` signals with no named skill |
|
|
54
|
+
| Improve | Two `user-correction` signals, or three combined correction/failure/staleness signals, for a named skill |
|
|
55
|
+
| Reconcile | Two `trigger-collision` signals |
|
|
56
|
+
| Retire | Two `superseded-skill` signals or three `unused-skill` signals for a named skill |
|
|
57
|
+
|
|
58
|
+
An agent using the shipped `atelier-skill-steward` skill may turn an eligible
|
|
59
|
+
candidate into an authored change, test positive and negative triggers, and
|
|
60
|
+
run the catalog audit. Instruction-only changes that retain the same tools,
|
|
61
|
+
data boundary, and external authority may progress through that automated
|
|
62
|
+
lane. Any new network access, filesystem scope, external message, spending,
|
|
63
|
+
destructive action, credential handling, or audience change pauses for human
|
|
64
|
+
authorization.
|
|
65
|
+
|
|
66
|
+
### 3. Audit the whole catalog
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
atelier skills audit
|
|
70
|
+
atelier skills audit --root ./skills/codex --peer ./skills/claude --json
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The audit validates required YAML frontmatter, lowercase names, directory/name
|
|
74
|
+
agreement, UTF-8 `SKILL.md` text, bounded bundle size, real files and directories,
|
|
75
|
+
bundle-contained relative resources, unfinished placeholders, and byte-level
|
|
76
|
+
parity between agent surfaces. Errors fail the command. Warnings remain
|
|
77
|
+
visible and reviewable.
|
|
78
|
+
|
|
79
|
+
Catalog audits should run after authored changes and on a regular schedule.
|
|
80
|
+
A scheduled agent task can run the audit and candidate builder, exercise
|
|
81
|
+
eligible instruction-only changes, and leave a tested Git diff for ordinary
|
|
82
|
+
review. Scheduling invokes the same skill and does not widen its permissions or
|
|
83
|
+
lower its evidence thresholds.
|
|
84
|
+
|
|
85
|
+
A portable recurring-task prompt is:
|
|
86
|
+
|
|
87
|
+
> Use the `atelier-skill-steward` skill in this repository. Audit the complete
|
|
88
|
+
> skill catalog, inspect evidence-thresholded candidates, and integrate eligible
|
|
89
|
+
> authority-neutral instruction changes with behavioral and repository gates.
|
|
90
|
+
> Reconcile overlaps and retire only evidence-backed vestiges. Do not capture
|
|
91
|
+
> task content, add authority, overwrite drift, or bypass an exact sync plan.
|
|
92
|
+
|
|
93
|
+
### 4. Update deployed skills from the released root package
|
|
94
|
+
|
|
95
|
+
A consuming repository can project the released package's `skills/codex`
|
|
96
|
+
catalog into repo-scoped `.agents/skills`:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
atelier skills sync --json
|
|
100
|
+
atelier skills sync --apply --confirm sha256:<the-reviewed-plan-digest>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
The first command is read-only. The second recomputes the current plan and
|
|
104
|
+
requires the exact digest that was reviewed. It refuses:
|
|
105
|
+
|
|
106
|
+
- a target outside the enrolled workspace;
|
|
107
|
+
- malformed or redirected bundles and lock files;
|
|
108
|
+
- a collision with an unmanaged local skill;
|
|
109
|
+
- local drift from the last managed digest; or
|
|
110
|
+
- any source catalog that fails audit.
|
|
111
|
+
|
|
112
|
+
Replaced and retired managed bundles move to
|
|
113
|
+
`.atelier-local/skill-steward/quarantine/`; they are never permanently deleted
|
|
114
|
+
by sync. The projection lock at
|
|
115
|
+
`.agents/skills/.atelier-skill-lock.json` binds each installed bundle to its
|
|
116
|
+
content digest and the source package version. This is the update bridge: after
|
|
117
|
+
a newer `@mnstry/atelier` is installed, the same plan/apply sequence brings its
|
|
118
|
+
shipped skills into the current repository without overwriting local ownership.
|
|
119
|
+
|
|
120
|
+
Installation is explicit per repository; installing the package alone does not
|
|
121
|
+
install a discoverable skill projection. Existing unmanaged bundles, including
|
|
122
|
+
byte-identical bundles, are never adopted implicitly. Missing managed bundles
|
|
123
|
+
count as local drift. Source and target may not overlap. A confirmation is
|
|
124
|
+
bound to the workspace and source location as well as their observed content.
|
|
125
|
+
Location hashes are local identifiers, not anonymization or authentication.
|
|
126
|
+
Interrupted operations leave a lock and recovery state for inspection; do not
|
|
127
|
+
automatically clear them or overwrite a locally edited projection.
|
|
128
|
+
|
|
129
|
+
## Portable contracts
|
|
130
|
+
|
|
131
|
+
`contracts/atelier-skill-steward.v1.schema.json` defines four independently
|
|
132
|
+
addressable documents:
|
|
133
|
+
|
|
134
|
+
- `mnstry.atelier-skill-audit@v1` for catalog findings;
|
|
135
|
+
- `mnstry.atelier-skill-candidates@v1` for thresholded work;
|
|
136
|
+
- `mnstry.atelier-skill-sync-plan@v1` for review and exact confirmation; and
|
|
137
|
+
- `mnstry.atelier-skill-sync-lock@v1` for the managed projection inventory.
|
|
138
|
+
|
|
139
|
+
Fixtures cover valid and invalid examples, and the registry, compatibility,
|
|
140
|
+
disclosure, packaging, and release gates treat the contract and portable skill
|
|
141
|
+
bundles as public artifacts.
|
|
142
|
+
|
|
143
|
+
## Automation policy
|
|
144
|
+
|
|
145
|
+
The safe autonomous lane is deliberately narrower than everything an agent
|
|
146
|
+
could theoretically do:
|
|
147
|
+
|
|
148
|
+
1. record only enumerated, content-free outcomes during ordinary work;
|
|
149
|
+
2. audit and aggregate on a schedule;
|
|
150
|
+
3. author only evidence-backed, authority-neutral skill changes;
|
|
151
|
+
4. validate behavior, catalog integrity, disclosure, and package gates;
|
|
152
|
+
5. leave public source changes in Git for review; and
|
|
153
|
+
6. update a deployed projection only from a reviewed, exact digest plan.
|
|
154
|
+
|
|
155
|
+
This makes “self-improving” mean accumulated evidence plus reversible changes,
|
|
156
|
+
not silent memory, prompt harvesting, or unbounded self-modification.
|
package/docs/upgrade.md
CHANGED
|
@@ -1,10 +1,51 @@
|
|
|
1
1
|
# Upgrade Guide
|
|
2
2
|
|
|
3
|
+
For an owner asking their agent to prepare an update, start with
|
|
4
|
+
[guided upgrades](guided-upgrades.md). It separates release selection and staged
|
|
5
|
+
installation from the exact local transaction and the owner's adoption decision.
|
|
6
|
+
|
|
3
7
|
Use this guide when upgrading a copied private-domain or shared-project starter
|
|
4
8
|
workspace between Atelier package releases. The flow is local-only: it does not
|
|
5
9
|
provision repositories, contact a Git host, mutate the MNSTRY runtime, or write
|
|
6
10
|
through a browser view.
|
|
7
11
|
|
|
12
|
+
## Upgrading to 0.2.0-alpha.8
|
|
13
|
+
|
|
14
|
+
This release adds typed advisory decision contracts and an experimental,
|
|
15
|
+
opt-in Obsidian projection. Nothing is published for a project that does not
|
|
16
|
+
enable `ext["mnstry.atelier.obsidian"]`; see [obsidian.md](obsidian.md).
|
|
17
|
+
|
|
18
|
+
The link resolver that produces `links_to` edges changed in five classes
|
|
19
|
+
(links inside code and front matter, directory links, links that climb above
|
|
20
|
+
the repository root, malformed percent-encoding, and workspace-only wikilink
|
|
21
|
+
and cross-repository edges). Regenerate committed graph artifacts after
|
|
22
|
+
upgrading and review the difference; the classes are listed in the changelog
|
|
23
|
+
and in [obsidian-contract.md](obsidian-contract.md).
|
|
24
|
+
|
|
25
|
+
## Upgrading to 0.2.0-alpha.7
|
|
26
|
+
|
|
27
|
+
This release adds optional evidence-bound local review and the external-project
|
|
28
|
+
starter. Existing v1 locks and readers remain compatible. To use bound review,
|
|
29
|
+
explicitly qualify each pack for the new root version, regenerate the graph and
|
|
30
|
+
projection, and create a fresh run. Historical runs retain their original
|
|
31
|
+
snapshot and never acquire renewed approval from an upgrade. See
|
|
32
|
+
[local review](local-review.md) for the complete workflow.
|
|
33
|
+
|
|
34
|
+
## Upgrading to 0.2.0-alpha.6
|
|
35
|
+
|
|
36
|
+
This release adds Atelier Sync Deliverable Zero: a headless, local repository
|
|
37
|
+
supervisor with explicit enrollment, complete repository observations,
|
|
38
|
+
fast-forward-only reconciliation, pause/resume control, hash-chained local
|
|
39
|
+
operation traces, and two-phase user-confirmed commit and publication. It does
|
|
40
|
+
not add a desktop shell, semantic conflict resolution, force operations,
|
|
41
|
+
telemetry, or unattended semantic writes.
|
|
42
|
+
|
|
43
|
+
Consumers that adopt the new runtime should enroll one repository explicitly,
|
|
44
|
+
treat watchers as hints rather than truth, require a fresh complete observation
|
|
45
|
+
before each confirmed mutation, and keep commit and publication as separate
|
|
46
|
+
user decisions. Existing consumers that do not import the runtime subpaths are
|
|
47
|
+
contract-compatible and need only update their pinned dependency.
|
|
48
|
+
|
|
8
49
|
## Upgrading to 0.2.0-alpha.5
|
|
9
50
|
|
|
10
51
|
This release hardens public/private boundary enforcement, local serving,
|
|
@@ -117,7 +158,7 @@ For registry installs, pin the exact version and record the resolved version
|
|
|
117
158
|
in the lockfile:
|
|
118
159
|
|
|
119
160
|
```bash
|
|
120
|
-
npm install --save-dev @mnstry/atelier@0.2.0-alpha.
|
|
161
|
+
npm install --save-dev @mnstry/atelier@0.2.0-alpha.8
|
|
121
162
|
npx mnstry-atelier lock write --project ./atelier.project.json
|
|
122
163
|
```
|
|
123
164
|
|
|
@@ -125,7 +166,7 @@ For Git installs, pin the release tag rather than a branch, so the lock file
|
|
|
125
166
|
records exactly what was reviewed:
|
|
126
167
|
|
|
127
168
|
```bash
|
|
128
|
-
npm install --save-dev "git+https://github.com/MNSTRY/atelier.git#v0.2.0-alpha.
|
|
169
|
+
npm install --save-dev "git+https://github.com/MNSTRY/atelier.git#v0.2.0-alpha.8"
|
|
129
170
|
npx mnstry-atelier lock write --project ./atelier.project.json
|
|
130
171
|
```
|
|
131
172
|
|
|
@@ -177,3 +218,30 @@ older workspaces and should not be used in new docs or package scripts.
|
|
|
177
218
|
When unsure, fail closed: keep source in the private-domain workspace and move
|
|
178
219
|
only a reviewed summary into the shared-project workspace through ordinary Git
|
|
179
220
|
review.
|
|
221
|
+
|
|
222
|
+
## Exact installed source and review history
|
|
223
|
+
|
|
224
|
+
`atelier lock provenance --exact-source-required` and
|
|
225
|
+
`atelier lock check --exact-source-required` refuse unverified bindings.
|
|
226
|
+
Supported npm lock metadata is a declaration matched to the exact installation
|
|
227
|
+
slot, including nested instances; a SHA in that declaration is not proof of the
|
|
228
|
+
installed bytes. Linked/unsupported stores remain unresolved when no trustworthy
|
|
229
|
+
instance evidence is available. Tarball/registry integrity is reported when
|
|
230
|
+
available, without inventing a Git origin. Dirty, ignored or untracked executable
|
|
231
|
+
inputs prevent verified checkout qualification. Inventory excludes Git metadata
|
|
232
|
+
and dependency trees; two observed byte inventories must agree and match the commit tree, including when Git index hints conceal changes. A verified clean
|
|
233
|
+
checkout does not authenticate an upstream publisher.
|
|
234
|
+
|
|
235
|
+
Review snapshots and decisions are separate from historical v1 locks. See
|
|
236
|
+
[pack lifecycle](extension-pack-lifecycle.md) and
|
|
237
|
+
[inspection portability](review-portability.md) before replacing packs or moving
|
|
238
|
+
state. Updating a package or a digest never silently renews old approval.
|
|
239
|
+
|
|
240
|
+
## Exact local candidate transactions
|
|
241
|
+
|
|
242
|
+
For the bounded, manually confirmed single-repository workflow, see
|
|
243
|
+
[Local exact-plan upgrades](exact-upgrades.md). The `upgrade plan --save`,
|
|
244
|
+
`upgrade apply --plan ... --confirm ...`, `upgrade status`, and recovery dry-run
|
|
245
|
+
commands are separate from the legacy flag-based migration workflow above.
|
|
246
|
+
They preserve history and honor existing commit hooks; they do not install a
|
|
247
|
+
new package or activate a runtime.
|