@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
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
# External-project integration and human review implementation plan
|
|
2
|
+
|
|
3
|
+
Status: local implementation candidate. See the feature guides for implemented behavior; final source-bound review, release and human acceptance remain separate gates.
|
|
4
|
+
Baseline: `58895eafbd980ae131d8c5f2d1882ac34f5c08b9`, tree `72f06c2aa8183f93dc2b49066a5c4e55d1c2f336`.
|
|
5
|
+
|
|
6
|
+
<!-- mnstry-review-request: atelier-integration-plan-r1 gate: plan-readiness -->
|
|
7
|
+
<!-- mnstry-review-workflow: atelier-integration-plan-fable-low-r3 gate: plan-readiness stage: planning -->
|
|
8
|
+
|
|
9
|
+
## Outcome and authority
|
|
10
|
+
|
|
11
|
+
A domain owner can connect an established repository through a bounded adapter,
|
|
12
|
+
run its declared method, inspect proposed claims and their evidence, retain
|
|
13
|
+
individual review decisions, and resume without losing authorship or historical
|
|
14
|
+
meaning. Canon stays in the domain repository. The root supplies generic
|
|
15
|
+
contracts, validators, local review behavior, templates, and synthetic proof.
|
|
16
|
+
|
|
17
|
+
Implementation is authorized as local pre-production work. This plan introduces
|
|
18
|
+
no publication, remote deployment, collaborator enrollment, remote access,
|
|
19
|
+
automatic canonical writes, or member/tenant activation. Approval of a proposal
|
|
20
|
+
does not authorize publication, runtime admission, or consent changes. Existing
|
|
21
|
+
consumer reading and meeting workflows do not depend on this full programme.
|
|
22
|
+
|
|
23
|
+
All fixtures must be independently invented. Do not copy private correspondence,
|
|
24
|
+
domain names, vocabulary, methods, information architecture, or operational
|
|
25
|
+
details into this repository. Review packets and implementation branches must
|
|
26
|
+
respect the same boundary.
|
|
27
|
+
|
|
28
|
+
## Baseline findings and evidence
|
|
29
|
+
|
|
30
|
+
1. `src/project/config.mjs` resolves repository paths in this order: CLI
|
|
31
|
+
`--repo-path`, ignored local overlay, tracked relative path, sibling discovery.
|
|
32
|
+
Discovery checks the declared remote when supplied. Command resolution also
|
|
33
|
+
ensures local state, so describe its possible filesystem writes accurately.
|
|
34
|
+
2. `src/commands/extension-pack.mjs` has a separate option allowlist that rejects
|
|
35
|
+
`--repo-path` before `commandProject()` executes. Reproduction on Node 22.18.0:
|
|
36
|
+
`node bin/atelier.mjs extension-pack list --repo-path=sample=.`.
|
|
37
|
+
3. `src/upgrade/upgrade.mjs:packageSource()` captures HEAD only when the installed
|
|
38
|
+
package directory is itself the Git top-level. Repository metadata without
|
|
39
|
+
that checkout becomes `private_github` with a null SHA. The lock schema already
|
|
40
|
+
permits `gitSha`; repository metadata alone cannot prove installation type.
|
|
41
|
+
4. `src/collaboration/proposals.mjs`, `src/collaboration/event-ledger.mjs`, and
|
|
42
|
+
`src/server/local-sidecar.mjs` provide review records, concurrency machinery,
|
|
43
|
+
and proposal pages. Readiness proposals currently carry claims as JSON.
|
|
44
|
+
5. `src/readiness-protocols/runtime.mjs:evaluateProtocolAnswers()` measures
|
|
45
|
+
required-answer presence. `claimsForProtocolRun()` assigns 0.7 or 0.2 based on
|
|
46
|
+
whether any answer is present, and references a run rather than specific
|
|
47
|
+
supporting source evidence. Neither is calibrated evidence confidence.
|
|
48
|
+
6. `atelier-claim@v1` fixes `status: proposed` and `promoted: false`.
|
|
49
|
+
`atelier-readiness-run@v1` identifies a protocol but does not itself establish
|
|
50
|
+
a complete source/pack/evaluator snapshot for historical reproduction.
|
|
51
|
+
7. Existing distribution/private-domain/shared-project templates, normative
|
|
52
|
+
audience guidance, extension pack versions/digests and migration declarations
|
|
53
|
+
provide foundations. They do not constitute a demonstrated end-to-end
|
|
54
|
+
external-project review experience.
|
|
55
|
+
|
|
56
|
+
These are bounded source observations, not an exhaustive implementation review.
|
|
57
|
+
Other branches are not assumed landed. Refresh main and reconcile owner changes
|
|
58
|
+
before each implementation stage.
|
|
59
|
+
|
|
60
|
+
## Design decisions for the first implementation
|
|
61
|
+
|
|
62
|
+
- Reuse the proposal ledger and local sidecar; do not create a second review
|
|
63
|
+
database or weaken their current authentication, origin, CSRF, path, private
|
|
64
|
+
file, or concurrency controls. Validate reusable fit before adding UI.
|
|
65
|
+
- Preserve immutable v1 claim records. Add a separate versioned review-decision
|
|
66
|
+
contract and derived views. Authoritative new semantics belong in a real
|
|
67
|
+
contract, not in an unvalidated `ext` member that old consumers ignore.
|
|
68
|
+
- Acceptance prepares an explicit change proposal for the source owner. The
|
|
69
|
+
source owner applies it through its own workflow. No automatic apply action.
|
|
70
|
+
- Initially make portable bundles inspection-only. Imported review decisions
|
|
71
|
+
remain attributed historical assertions, never current local approval.
|
|
72
|
+
- Preserve local-only defaults. Export is an explicit local operation, not sync
|
|
73
|
+
or upload. A later encrypted bundle must identify its recipient and selected
|
|
74
|
+
disclosure scope without exposing private content in logs.
|
|
75
|
+
- Preserve established CLI aliases and exit codes unless a documented,
|
|
76
|
+
versioned change is unavoidable. No new runtime dependency is assumed.
|
|
77
|
+
- External-project is an architecture pattern, not an instruction to use
|
|
78
|
+
`repos[].kind: external`: that kind is unmanaged and supplies no read boundary.
|
|
79
|
+
The adapter must explicitly declare the actual read authority and allowed refs.
|
|
80
|
+
|
|
81
|
+
## Work packages and dependency order
|
|
82
|
+
|
|
83
|
+
### W0 — Baseline, ownership, contracts, and plan disposition
|
|
84
|
+
|
|
85
|
+
Own an isolated root worktree; keep the ordinary checkout and other writers
|
|
86
|
+
untouched. Record base SHA/tree, clean status, current branch work and any
|
|
87
|
+
overlapping unlanded changes. Resolve overlap through evidence and the source
|
|
88
|
+
owner before editing the same boundary. Never import sibling private data.
|
|
89
|
+
|
|
90
|
+
Disposition every plan finding as accepted, rejected with evidence, or deferred
|
|
91
|
+
with a bounded reason. Blocking design findings precede dependent implementation.
|
|
92
|
+
Prepare a contract compatibility decision for each new schema and public API.
|
|
93
|
+
Do not silently widen existing v1 contracts or rewrite historical runs.
|
|
94
|
+
|
|
95
|
+
For every proposed artifact, record reuse, compatible extension, or a separate
|
|
96
|
+
versioned contract with its reason. Inventory existing JCS, attestation,
|
|
97
|
+
support-preview/disclosure, export and migration facilities before adding new
|
|
98
|
+
machinery. Shared hashing or validation does not imply shared artifact semantics.
|
|
99
|
+
Resolve claim-decision aggregate identity, required concurrency version,
|
|
100
|
+
idempotency and full-history retention before implementing the review endpoint.
|
|
101
|
+
Legacy proposal readers must never encounter new event types in their proposal
|
|
102
|
+
aggregates; prove compatibility against the actual pre-change reader.
|
|
103
|
+
|
|
104
|
+
### W1 — Shared project options and transparent resolution
|
|
105
|
+
|
|
106
|
+
Files: `src/project/config.mjs`, `src/cli/`, all project-aware command entry
|
|
107
|
+
points in `src/commands/`, command help, project/config tests.
|
|
108
|
+
|
|
109
|
+
Inventory commands first: classify project-aware versus standalone commands,
|
|
110
|
+
direct-module versus wrapper entry, accepted aliases, environment inputs, and
|
|
111
|
+
side effects. Introduce a shared option definition/parser for project location
|
|
112
|
+
and repo overrides. Unknown command-specific options still fail; a shared
|
|
113
|
+
parser must not accept every argument everywhere. Keep both `--flag=value` and
|
|
114
|
+
`--flag value`, repeated named overrides, missing values, and malformed entries
|
|
115
|
+
explicit. Choose and document duplicate override behavior from current callers.
|
|
116
|
+
|
|
117
|
+
Document precedence and provide resolution diagnostics showing logical repo,
|
|
118
|
+
resolution source, and declared identity without leaking machine paths in
|
|
119
|
+
portable output. Preserve required-repo failure and all boundary validation.
|
|
120
|
+
Test each command family against a moved two-repository fixture, both through
|
|
121
|
+
the published CLI and an invented wrapper. Include missing/malformed values,
|
|
122
|
+
unresolved required repos, identity mismatch, and unchanged read scope.
|
|
123
|
+
|
|
124
|
+
### W2 — Installed-package provenance
|
|
125
|
+
|
|
126
|
+
Files: `src/upgrade/upgrade.mjs`, lock tests, consumer/distribution smoke,
|
|
127
|
+
`docs/install.md`, `docs/upgrade.md`; schema change only if the compatibility
|
|
128
|
+
decision requires it.
|
|
129
|
+
|
|
130
|
+
Distinguish installed package source from consumer-project source. For a Git
|
|
131
|
+
checkout use its own commit plus dirty-state qualification. For an npm Git
|
|
132
|
+
dependency inspect supported install-lock metadata and match the exact package
|
|
133
|
+
instance, including nested installs and workspace/symlink resolution; never
|
|
134
|
+
borrow the consumer repo HEAD or trust a URL/ref as an immutable commit.
|
|
135
|
+
Registry/tarball installs record available integrity/provenance without inventing
|
|
136
|
+
a Git SHA. Define metadata precedence and refuse conflicting provenance.
|
|
137
|
+
|
|
138
|
+
Distinguish a declared install origin, observed installed-byte identity, and
|
|
139
|
+
verified source binding. Lock metadata alone is a declaration. An installed-tree
|
|
140
|
+
digest can detect change against a trusted earlier inventory, but cannot prove
|
|
141
|
+
that the declared commit produced those bytes. Define the inventory, links,
|
|
142
|
+
excluded generated files and trust anchor before claiming exact source. A clean
|
|
143
|
+
checkout establishes its tracked commit only; separately account for untracked,
|
|
144
|
+
ignored or generated files that may affect execution. An exact-source check
|
|
145
|
+
must refuse an unverified binding even when a locally recorded digest matches.
|
|
146
|
+
|
|
147
|
+
Keep historical locks readable. Report legacy/unresolved provenance explicitly;
|
|
148
|
+
an exact-source-required check must fail for unresolved or dirty source. A
|
|
149
|
+
missing Git SHA must not imply private Git origin. Never write credential-bearing
|
|
150
|
+
remote URLs into locks or logs. Test local Git dependency installation with Git
|
|
151
|
+
metadata stripped, tagged/branch inputs, registry-shaped and tarball fixtures,
|
|
152
|
+
multiple package instances, symlinks, dirty checkout and contradictory metadata.
|
|
153
|
+
Use local synthetic repositories and package archives; no registry/network test
|
|
154
|
+
is required to prove these cases.
|
|
155
|
+
Include a declared Git revision with modified installed bytes, and verify that
|
|
156
|
+
neither the declaration nor a newly computed digest reports verified origin.
|
|
157
|
+
|
|
158
|
+
### W3 — Official external-project starter and audience guidance
|
|
159
|
+
|
|
160
|
+
Files: `templates/`, `src/commands/setup.mjs` or existing setup owner,
|
|
161
|
+
`docs/install.md`, `docs/distributions.md`, `docs/blocks/audience-visibility.md`,
|
|
162
|
+
template and consumer smoke tests.
|
|
163
|
+
|
|
164
|
+
Compose existing templates into an invented two-repository example with project
|
|
165
|
+
config, bounded source contract, strict policy, namespaced pack, synthetic
|
|
166
|
+
protocol/answers, local-state exclusions, and documented validation commands.
|
|
167
|
+
No proprietary domain shape may be used as the fixture scaffold. Configuration
|
|
168
|
+
must state which repository owns facts, proposed changes, run state and outputs.
|
|
169
|
+
|
|
170
|
+
Reference and compose existing CI, consumer-smoke and distribution-smoke paths
|
|
171
|
+
for graph, pack, boundary, readiness and lock proof; add only missing coverage
|
|
172
|
+
under the current execution policy. Documentation does not dispatch CI.
|
|
173
|
+
Setup refuses overwrite and unsafe destination paths. Inspect and test
|
|
174
|
+
reference traversal, symlinks and path escape using existing defensive controls.
|
|
175
|
+
Make source audience, review acceptance, publication eligibility and runtime
|
|
176
|
+
visibility separate in the starter and review copy. A public source is not a
|
|
177
|
+
publication consent or runtime access grant.
|
|
178
|
+
|
|
179
|
+
### W4 — Evidence-bound runs and honest evaluation
|
|
180
|
+
|
|
181
|
+
Files: `src/readiness-protocols/runtime.mjs`, affected contracts, validators,
|
|
182
|
+
readiness CLI/renderers and tests.
|
|
183
|
+
|
|
184
|
+
Separate input completeness, executable rule checks, unresolved evidence,
|
|
185
|
+
human judgment and runtime readiness. Preserve the legacy score as documented
|
|
186
|
+
input completeness; do not silently change the meaning of old results. New
|
|
187
|
+
claims omit unsupported confidence or explicitly identify the method and its
|
|
188
|
+
limits. No calibrated confidence claim without a defined evaluation dataset.
|
|
189
|
+
Apply these distinctions to rendered labels, examples and screenshots as well
|
|
190
|
+
as stored fields. A completed answer form must never appear to establish
|
|
191
|
+
evidence strength, human acceptance or runtime readiness.
|
|
192
|
+
Inventory the run, journey, packet and summary surfaces together. Preserve
|
|
193
|
+
legacy field/status meanings where contracts require them, and explain them in
|
|
194
|
+
the view rather than silently changing existing status literals.
|
|
195
|
+
|
|
196
|
+
Bind each new run to exact relevant source revisions/content digests, bounded
|
|
197
|
+
reference set, answers digest, protocol digest/version, pack digest/version,
|
|
198
|
+
evaluator identity and applicable policy digest. Reuse `src/attestation/jcs.mjs`
|
|
199
|
+
for canonical JSON and specify the byte/hash envelope. Evidence digests must identify the content
|
|
200
|
+
actually read; a clean repository HEAD alone is insufficient for dirty sources.
|
|
201
|
+
Do not create a timing gap between inspected bytes and recorded identity.
|
|
202
|
+
|
|
203
|
+
Show field-level evidence links for mapped claims, missing evidence and unresolved
|
|
204
|
+
references. Separate source-backed assertions from an operator's recorded answer.
|
|
205
|
+
Historical v1 runs remain readable but are labeled provenance-incomplete. New
|
|
206
|
+
source/protocol/policy changes invalidate current eligibility for affected reviews
|
|
207
|
+
without changing old records. Test changed source, dirty source, changed pack,
|
|
208
|
+
policy change, absent evidence, migration and deterministic replay under pinned
|
|
209
|
+
inputs; timestamps/run IDs need not match for semantic replay.
|
|
210
|
+
The current run ID hashes project name, protocol ID, normalized answers and
|
|
211
|
+
time; it does not bind protocol content, source bytes, pack or policy. It may
|
|
212
|
+
identify a historical run but cannot replace evidence binding or justify moving
|
|
213
|
+
current decision eligibility ahead of this prerequisite. Revalidate the bound
|
|
214
|
+
evidence inside the decision mutation, not solely when rendering its form.
|
|
215
|
+
|
|
216
|
+
### W5 — Structured claim decisions and owner handoff
|
|
217
|
+
|
|
218
|
+
Files: `src/collaboration/`, proposal rendering modules located from sidecar
|
|
219
|
+
imports, `src/server/local-sidecar.mjs`, new review contract and tests.
|
|
220
|
+
|
|
221
|
+
Render subject/predicate/object with readable labels, original IDs, evidence
|
|
222
|
+
excerpts/links within the read boundary, limitations, conflict indicators,
|
|
223
|
+
source/run identity, and current decision eligibility. Accept, reject and revise
|
|
224
|
+
operate per claim with reviewer attribution, rationale and an exact expected
|
|
225
|
+
revision. Required optimistic concurrency checks must apply at the mutation
|
|
226
|
+
boundary, not just the UI. Explicitly describe local asserted identity versus
|
|
227
|
+
authenticated reviewer identity; typed names alone do not prove human approval.
|
|
228
|
+
Record and render an explicit local-asserted identity kind. Require a client
|
|
229
|
+
decision ID and expected aggregate version; an identical retry returns the
|
|
230
|
+
existing decision, while reuse of the ID with different content fails.
|
|
231
|
+
|
|
232
|
+
The rendered acceptance check must let a reader identify the proposed change,
|
|
233
|
+
its rationale, supporting evidence, uncertainty or conflicts, intended effect
|
|
234
|
+
of acceptance, and the person or source workflow authorized to apply it.
|
|
235
|
+
An identifier or an accept button alone does not satisfy this check.
|
|
236
|
+
|
|
237
|
+
Revision creates a linked successor rather than overwriting the original claim.
|
|
238
|
+
Decisions are separate append-only records with verifiable links to claim and
|
|
239
|
+
evidence identity. Retries are idempotent. A change during review refuses stale
|
|
240
|
+
acceptance. Crash recovery reconstructs views from the ledger without silently
|
|
241
|
+
losing or duplicating decisions. Bulk review is not part of the first slice.
|
|
242
|
+
New decisions use distinct aggregates and a versioned contract, sharing proven
|
|
243
|
+
persistence primitives without inserting unsupported events into legacy proposal
|
|
244
|
+
aggregates. Define retention that preserves every decision: current generic
|
|
245
|
+
compaction keeps only selected events, so a latest-state checkpoint alone is
|
|
246
|
+
not a complete decision audit history. Test compaction beyond count/time limits,
|
|
247
|
+
replay, and the old proposal reader against the resulting store.
|
|
248
|
+
|
|
249
|
+
An accepted decision creates a reviewable owner handoff showing intended source
|
|
250
|
+
edits, affected IDs and required source revision. It grants no canonical write,
|
|
251
|
+
publication or runtime capability. Promotion status is shown only from a
|
|
252
|
+
separate source-owner receipt; absent receipt means not established.
|
|
253
|
+
Evaluate `git-promote-event@v1` for actual cross-repository disclosure events.
|
|
254
|
+
It does not by itself prove that an accepted semantic edit was applied; any
|
|
255
|
+
owner-application receipt must bind the decision, intended edit and resulting
|
|
256
|
+
source revision, with authority appropriate to that workflow.
|
|
257
|
+
|
|
258
|
+
Tests: claim-level mixed decisions, stale views, concurrent requests, retries,
|
|
259
|
+
crash/restart, missing evidence, source movement, hostile display text, unauthorized
|
|
260
|
+
review, unchanged canonical bytes, and accepted-without-promotion behavior.
|
|
261
|
+
|
|
262
|
+
### W6 — Reusable document response and resume slice
|
|
263
|
+
|
|
264
|
+
Dependencies: W4/W5 review identity and persistence contracts, but ship a bounded
|
|
265
|
+
local slice independently of pack migration and portable bundles.
|
|
266
|
+
|
|
267
|
+
Use one invented document to prove a reader can open a passage, leave a question
|
|
268
|
+
or correction, see save state, close, reopen and find the same response and
|
|
269
|
+
reading position. Bind response to document identity, exact revision and stable
|
|
270
|
+
anchor; retain the original wording and distinguish generated summaries.
|
|
271
|
+
Changed document revisions retain prior responses and require explicit
|
|
272
|
+
reassociation. Aggregate unresolved responses and explicitly recorded decisions
|
|
273
|
+
into a discussion view. Reading/scrolling/no response never means agreement.
|
|
274
|
+
|
|
275
|
+
The root owns generic passage references, response records and UI primitives;
|
|
276
|
+
consumer repositories own content, reading order, prompts and delivery/access.
|
|
277
|
+
Do not convert packet responses into semantic claims automatically. Verify
|
|
278
|
+
keyboard operation, visible focus, save failure/retry and two-view conflicts.
|
|
279
|
+
Use the established loopback local-service contract for browser proof. No
|
|
280
|
+
physical device, remote collaborator access or onboarding is implied.
|
|
281
|
+
|
|
282
|
+
Qualify save/resume as one required sequence: contribute a response, observe
|
|
283
|
+
durable save acknowledgement, close, reopen, and recover both original wording
|
|
284
|
+
and reading position. Exercise failed save/retry and changed document revision
|
|
285
|
+
in that sequence; a pending or failed write must never display as saved.
|
|
286
|
+
Include the existing ledger's 423 lock-contention response and retry path.
|
|
287
|
+
Presence/seen records with no responses must still render as unanswered.
|
|
288
|
+
|
|
289
|
+
Evaluate first use with an unfamiliar reader and an invented document: can
|
|
290
|
+
they make one useful question or correction without prior installation,
|
|
291
|
+
ontology or agent-skill instruction? Record the assistance required and any
|
|
292
|
+
point where they cannot proceed. Technical setup completion is a separate
|
|
293
|
+
result; actual adopter usefulness still needs its own human acceptance record.
|
|
294
|
+
|
|
295
|
+
### W7 — Extension-pack lifecycle
|
|
296
|
+
|
|
297
|
+
Files: extension loader, pack/protocol contracts, migration checks, fixtures and
|
|
298
|
+
new lifecycle documentation.
|
|
299
|
+
|
|
300
|
+
Define substrate compatibility ranges, pack content identity, deprecation and
|
|
301
|
+
replacement terms, protocol version changes and migration modes. Reject an
|
|
302
|
+
unsupported combination before new execution. Preserve old term meaning and
|
|
303
|
+
source/run records; never silently reinterpret them with the newest pack.
|
|
304
|
+
Migration is dry-run first with a report and explicit owner application. Do not
|
|
305
|
+
execute arbitrary extension code or install dependencies as part of loading.
|
|
306
|
+
Historical inspection uses pinned content or marks missing historic dependencies.
|
|
307
|
+
Reuse existing pack digest/lock validation and the upgrade migration registry.
|
|
308
|
+
A required compatibility range cannot be added silently to the closed v1 pack
|
|
309
|
+
contract; record a compatible representation or explicit new-version migration.
|
|
310
|
+
|
|
311
|
+
Specify the legacy-pack policy: readable and inspectable does not automatically
|
|
312
|
+
mean admitted for new exact-reproducibility execution. Include a compatibility
|
|
313
|
+
matrix for old/current root, old/current pack, historical/new run and migration
|
|
314
|
+
availability. Test refusal, deprecation reporting, replay and rollback.
|
|
315
|
+
|
|
316
|
+
### W8 — Private run-state policy and portable inspection bundles
|
|
317
|
+
|
|
318
|
+
Document state classes first: tracked contracts/configuration; ignored local
|
|
319
|
+
answers, runs and decisions; regenerable views/caches; ephemeral sessions/nonces;
|
|
320
|
+
secrets/grants that are never transferable. Git checkout portability is distinct
|
|
321
|
+
from active review portability. Backups are explicit owner-managed actions.
|
|
322
|
+
|
|
323
|
+
Specify the inspection-bundle manifest after the W0 reuse decision, including
|
|
324
|
+
selected members, sizes/digests, format version, source/pack identities, disclosure
|
|
325
|
+
classification and verification result. Evaluate existing export and support-preview contracts. Reuse their
|
|
326
|
+
primitives where suitable; a runtime export and a private historical inspection
|
|
327
|
+
bundle have different authority and must not be forced into one schema merely
|
|
328
|
+
because both carry provenance. Reuse the existing disclosure scanner and preview
|
|
329
|
+
controls, and the attestation verification path where an applicable trusted
|
|
330
|
+
signature exists. A valid signature still requires signer authorization and
|
|
331
|
+
does not import current approval. Signing is not encryption.
|
|
332
|
+
Export only selected bounded artifacts after an inspectable disclosure preview
|
|
333
|
+
and required disclosure check. Fail closed when the check is unavailable; do not
|
|
334
|
+
label an unchecked export safe. Omit auth/session/grant material and absolute
|
|
335
|
+
machine paths. No silent synchronization or upload.
|
|
336
|
+
|
|
337
|
+
Import first validates bounded sizes/counts, member digests, paths, duplicates,
|
|
338
|
+
links, versions and content rendering, then exposes an isolated inspection view.
|
|
339
|
+
It cannot overwrite active local state, install packs, execute content or import
|
|
340
|
+
approval authority. Keep foreign decisions visibly attributed and unverified
|
|
341
|
+
unless their actual signature/trust policy is verified.
|
|
342
|
+
|
|
343
|
+
Encrypted export is a distinct substage: select a maintained local encryption
|
|
344
|
+
mechanism with an explicit recipient/key custody contract, dependency rationale
|
|
345
|
+
and failure tests. Do not invent encryption or claim hashes authenticate a
|
|
346
|
+
sender. Complete manifest/inspection behavior first; encryption and external
|
|
347
|
+
sharing stay unavailable until that mechanism is explicitly selected and proved.
|
|
348
|
+
Test disclosure failures, tampering, truncated archives, unknown versions,
|
|
349
|
+
oversized content, traversal/symlink refusal, duplicate members and inert import.
|
|
350
|
+
|
|
351
|
+
### W9 — Installed workflow, release evidence and consumer handoff
|
|
352
|
+
|
|
353
|
+
Test the exact packed artifact in a fresh synthetic two-repository workspace:
|
|
354
|
+
setup -> resolution -> bounded graph/pack checks -> readiness -> claim review ->
|
|
355
|
+
owner handoff -> close/reopen. Repeat under different local folder structures,
|
|
356
|
+
then an explicit pack upgrade. Include the document response slice, source
|
|
357
|
+
immutability, stale-decision refusal and inspection-only bundle behavior.
|
|
358
|
+
|
|
359
|
+
Use Node 22.18.0. Run focused regression suites, syntax, complete discoverable
|
|
360
|
+
tests, contract and public API compatibility, migrations, disclosure and exact
|
|
361
|
+
tarball/consumer checks. Verify test discovery includes new nested tests; either
|
|
362
|
+
place tests under current discovery or reconcile the separate discovery work.
|
|
363
|
+
Use the maintained private disclosure lane, never substitute structural-only
|
|
364
|
+
results. Existing global failures are reported separately with exact evidence.
|
|
365
|
+
|
|
366
|
+
An implementation review binds the final candidate and changed contracts. Valid
|
|
367
|
+
review findings are dispositioned and fixed before closeout; a plan review is
|
|
368
|
+
not implementation proof. Refresh main and prove required checks before landing.
|
|
369
|
+
Publishing a package, deployment, consumer activation and human acceptance remain
|
|
370
|
+
separate gates requiring their own authority and evidence.
|
|
371
|
+
|
|
372
|
+
## Proposed delivery cuts and acceptance gates
|
|
373
|
+
|
|
374
|
+
1. Reliability: W0-W3. External adapter setup works from the installed artifact
|
|
375
|
+
on two layouts; every documented project-aware invocation accepts the shared
|
|
376
|
+
options; source identity is exact or visibly unresolved. No canonical writes.
|
|
377
|
+
2. Human review: W4-W6. A domain owner can understand each claim, inspect evidence,
|
|
378
|
+
record a decision, retain an attributed response and resume. Stale acceptance
|
|
379
|
+
fails; original source and historical claims remain unchanged.
|
|
380
|
+
3. Lifecycle: W7-W8 plus W9. Upgrade preserves historical meaning; selected state
|
|
381
|
+
travels only through validated inspection bundles. Imported evidence never
|
|
382
|
+
becomes approval. Encryption is qualified separately before availability.
|
|
383
|
+
|
|
384
|
+
Each cut has focused local proof, exact source identity, review disposition,
|
|
385
|
+
rollback and a clear remaining-gates statement. Consumer human acceptance is
|
|
386
|
+
obtained separately; synthetic/browser proof cannot substitute for it.
|
|
387
|
+
|
|
388
|
+
## Rollback and recovery
|
|
389
|
+
|
|
390
|
+
Pin the prior package and packs; retain original documents and append-only
|
|
391
|
+
responses/decisions. Disable optional new views/exports without deleting state.
|
|
392
|
+
Old versions must reject unknown authoritative records or ignore them only when
|
|
393
|
+
that cannot grant authority. Demonstrate rollback with historical data before
|
|
394
|
+
shipping migrations. Import never writes into the active state directory.
|
|
395
|
+
|
|
396
|
+
## Reviewer challenge and open decisions
|
|
397
|
+
|
|
398
|
+
Prefer static inspection and existing defensive tests. Challenge dependency
|
|
399
|
+
order, contract evolution, exact provenance, stale acceptance, local reviewer
|
|
400
|
+
identity, disclosure, import authority, legacy compatibility and scope growth.
|
|
401
|
+
Return evidence, files, severity, confidence, impact, remediation order and
|
|
402
|
+
testable acceptance changes. Do not execute new live abuse paths or edit source.
|
|
403
|
+
|
|
404
|
+
The review must distinguish plan completeness from implementation correctness.
|
|
405
|
+
Known decisions: owner-applied canon and inspection-only imports are first-cut
|
|
406
|
+
defaults; authenticated multi-user approval, cross-computer continuation of active
|
|
407
|
+
authority, concrete encryption/key custody, remote onboarding and any calibrated
|
|
408
|
+
diagnostic scoring require explicit later design decisions. Their absence does
|
|
409
|
+
not block the independent reliability and local review cuts.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Integration contract decisions
|
|
2
|
+
|
|
3
|
+
<!-- mnstry-review-workflow: atelier-integration-implementation-r1 gate: implementation-readiness stage: closing -->
|
|
4
|
+
|
|
5
|
+
These decisions implement the first local integration cut. They do not satisfy
|
|
6
|
+
independent review, publication or human acceptance.
|
|
7
|
+
|
|
8
|
+
| Artifact | Decision | Compatibility and authority |
|
|
9
|
+
| --- | --- | --- |
|
|
10
|
+
| Package provenance | Separate versioned diagnostic; retain v1 lock fields | Declared origin and observed bytes do not authenticate an upstream publisher. Exact checks require verified binding. |
|
|
11
|
+
| Evidence snapshot | Separate content-addressed record using existing JCS | Existing v1 runs stay readable; missing snapshot means no current decision eligibility. |
|
|
12
|
+
| Claim decision | Separate immutable decision aggregate and contract | Never insert new event types into legacy proposal aggregates. Stable request identity and expected version are mandatory. |
|
|
13
|
+
| Document response | Separate passage-bound record | A question/correction is not a semantic claim or agreement. |
|
|
14
|
+
| Owner handoff | Derived proposed change | No canonical apply or publication authority; cross-repository Git disclosure is a distinct event. |
|
|
15
|
+
| Inspection bundle | Separate inert artifact; reuse disclosure/JCS | No active-state overwrite, execution, secret transfer or approval import. |
|
|
16
|
+
| Pack compatibility | New versioned lifecycle declaration | Legacy packs remain inspectable; closed v1 contracts are not silently widened. |
|
|
17
|
+
|
|
18
|
+
Reuse existing private-file, ledger, origin/nonce, JSON validation and
|
|
19
|
+
attestation primitives where applicable. Decisions retain complete history;
|
|
20
|
+
latest-state compaction alone is not an audit archive. Local typed identity is
|
|
21
|
+
explicitly asserted, not authenticated. Encryption and transfer of active
|
|
22
|
+
authority require a separate custody design before availability.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Local source review
|
|
2
|
+
|
|
3
|
+
The optional review workspace helps a reader inspect claims, ask a question or
|
|
4
|
+
propose a correction, and retain that contribution. It records **locally asserted
|
|
5
|
+
identity**. A typed name is not an authenticated approver. Acceptance does not
|
|
6
|
+
edit source, publish content, grant access or admit a runtime.
|
|
7
|
+
|
|
8
|
+
Start with `atelier init --template external-project --target NEW_DIRECTORY`.
|
|
9
|
+
Use a destination whose ancestors are real directories, not symlinks. The
|
|
10
|
+
starter refuses existing destinations and does not initialize Git or install
|
|
11
|
+
hooks. Initialize its adapter and synthetic source as separate repositories when
|
|
12
|
+
ready. An established repository can replace the synthetic source through
|
|
13
|
+
`--repo-path source=PATH`; this changes location, never read authority.
|
|
14
|
+
|
|
15
|
+
From the adapter, run `atelier graph`, then `atelier project`, followed by:
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
atelier review packs
|
|
19
|
+
atelier review run sample.readiness:contract-gate --answers answers.example.json
|
|
20
|
+
atelier dev --review
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Open `/review` on the loopback address printed by the foreground sidecar. Enter
|
|
24
|
+
repository `source` and path `README.md`, copy an exact passage, type a question
|
|
25
|
+
or correction, and choose **Save response**. Save is confirmed only after the
|
|
26
|
+
ledger acknowledges the write. On contention, stale content or service failure,
|
|
27
|
+
the wording remains in the form and the page does not claim success. Retry an
|
|
28
|
+
unchanged contribution after restoring service. A changed draft is a new request.
|
|
29
|
+
Unsaved browser drafts are not durable across tab closure.
|
|
30
|
+
|
|
31
|
+
To resume, save a reading position using the exact passage. Close the page,
|
|
32
|
+
reopen it, enter the same asserted name and choose the recorded **Resume** button.
|
|
33
|
+
The response history remains visible. A position is restored only against the
|
|
34
|
+
same document digest. After a source edit, earlier responses retain their exact
|
|
35
|
+
wording, anchor and original digest; explicitly select a passage in the new
|
|
36
|
+
revision and contribute a new response. Reading and scrolling never imply agreement.
|
|
37
|
+
|
|
38
|
+
Enter the returned run ID to review individual subject/predicate/object claims.
|
|
39
|
+
Each shows its ID, mapped answer fields, source-reference resolution, source
|
|
40
|
+
identity and a bounded excerpt. References in this first cut resolve exact graph
|
|
41
|
+
node IDs. Free text, URLs and other reference schemes remain unresolved; they
|
|
42
|
+
are never silently treated as source evidence. A linked source establishes
|
|
43
|
+
which bytes were read, not whether they logically support the proposed claim.
|
|
44
|
+
Read the document and record your judgment. Missing mapped sources or required
|
|
45
|
+
answers prevent acceptance. Rejection and revision remain available against
|
|
46
|
+
current evidence, so missing evidence can be discussed honestly.
|
|
47
|
+
|
|
48
|
+
Accept/reject/revise requires a reason, request ID and expected version. Every
|
|
49
|
+
contribution is immutable. Subsequent versions link through the same claim/run
|
|
50
|
+
identity and target version; proposed successor wording is retained without
|
|
51
|
+
rewriting the original claim. A later rejection supersedes an earlier acceptance
|
|
52
|
+
for current handoff. An identical retry returns the prior record. Another
|
|
53
|
+
reader's intervening contribution refuses a stale version; reopen the run before
|
|
54
|
+
making a new decision. Previous history remains visible rather than being
|
|
55
|
+
collapsed into a single latest-state approval.
|
|
56
|
+
|
|
57
|
+
**Inspect owner handoff**, or `atelier review handoff REQUEST_ID`, displays the
|
|
58
|
+
proposed relationship, rationale, affected IDs and required evidence digest.
|
|
59
|
+
The source owner decides the concrete edit in its own workflow. Source changes
|
|
60
|
+
remain unapplied and promotion remains unestablished. No owner-application receipt
|
|
61
|
+
or publication authorization is fabricated. Changed source/configuration,
|
|
62
|
+
policy, pack or evaluator inputs make current handoff ineligible.
|
|
63
|
+
|
|
64
|
+
The legacy readiness score and `ready`-shaped packet fields retain their existing
|
|
65
|
+
contract meanings: input completion and draft preparation. They are not evidence
|
|
66
|
+
confidence, independent rule execution, human acceptance or runtime readiness.
|
|
67
|
+
New claims omit the former arbitrary numeric confidence. Bound snapshots store
|
|
68
|
+
protocol content, normalized answers, pack identity, declared source byte digests,
|
|
69
|
+
policy identity, and the shipped source/schema evaluator inventory. Dependency
|
|
70
|
+
bytes and upstream publisher authentication need separate installation proof.
|
|
71
|
+
Historic v1 runs without snapshots remain available through the existing readiness
|
|
72
|
+
commands, but cannot be accepted as current evidence through this review surface.
|
|
73
|
+
|
|
74
|
+
The existing sidecar supplies loopback host/origin checks, session nonce checks
|
|
75
|
+
and private-file protection. `--review` is opt-in. The new ledgers live separately
|
|
76
|
+
from legacy proposals under `.atelier-local/review/`. Each record occupies its own
|
|
77
|
+
immutable event aggregate, so existing compaction retains the complete audit
|
|
78
|
+
history. Per-target versions are checked while holding the ledger write lock.
|
|
79
|
+
Local files and locally asserted identities are not protection from an operator
|
|
80
|
+
who controls that same account and its filesystem.
|
|
81
|
+
|
|
82
|
+
Synthetic installed and browser checks establish software behavior. An unfamiliar
|
|
83
|
+
reader's useful question or correction, assistance required, and actual adopter
|
|
84
|
+
acceptance still need a human observation; automated tests cannot supply it.
|