@mnstry/atelier 0.2.0-alpha.12 → 0.2.0-alpha.14
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 +894 -0
- package/README.md +159 -6
- package/contracts/atelier-adoption-policy.v2.schema.json +55 -0
- package/contracts/atelier-architecture.v1.schema.json +258 -0
- package/contracts/atelier-boundary-delegations.v1.schema.json +161 -0
- package/contracts/atelier-boundary-owner-keys.v1.schema.json +98 -0
- package/contracts/atelier-build.v1.schema.json +1076 -0
- package/contracts/atelier-capability.v1.schema.json +1252 -0
- package/contracts/atelier-coordination.v1.schema.json +1050 -0
- package/contracts/atelier-evidence-navigation.v1.schema.json +603 -0
- package/contracts/atelier-harness.v1.schema.json +234 -0
- package/contracts/atelier-ingestion.v1.schema.json +806 -0
- package/contracts/atelier-inquiry.v1.schema.json +1772 -0
- package/contracts/atelier-instruction-adoption.v1.schema.json +490 -0
- package/contracts/atelier-interaction.v1.schema.json +553 -0
- package/contracts/atelier-judgment.v1.schema.json +690 -0
- package/contracts/atelier-knowledge.v1.schema.json +1512 -0
- package/contracts/atelier-learning.v1.schema.json +1095 -0
- package/contracts/atelier-migration.v3.schema.json +64 -0
- package/contracts/atelier-personal-workspace-manifest.v1.schema.json +87 -0
- package/contracts/atelier-personal-workspace-overlay.v1.schema.json +299 -0
- package/contracts/atelier-template-adoption.v1.schema.json +223 -0
- package/contracts/atelier-template-profile.v1.schema.json +1168 -0
- package/contracts/atelier-trackable.v1.schema.json +781 -0
- package/contracts/atelier-upgrade-plan.v3.schema.json +532 -0
- package/docs/architecture.md +89 -0
- package/docs/assurance-controls.md +2 -2
- package/docs/blocks/capability-stewardship.md +17 -0
- package/docs/blocks/claims.md +16 -3
- package/docs/blocks/inquiry-harnesses.md +19 -0
- package/docs/blocks/learning-harnesses.md +17 -0
- package/docs/capability-stewardship.md +267 -0
- package/docs/coordination.md +51 -0
- package/docs/decision-practices.md +111 -0
- package/docs/decisions.md +29 -0
- package/docs/evidence-navigation.md +237 -0
- package/docs/exact-upgrades.md +3 -2
- package/docs/ingestion.md +181 -0
- package/docs/inquiry-harnesses.md +210 -0
- package/docs/install.md +80 -3
- package/docs/intake-and-guides.md +5 -0
- package/docs/integration-contract-decisions.md +24 -2
- package/docs/interaction-and-reflection.md +72 -0
- package/docs/knowledge-graph.md +20 -0
- package/docs/knowledge-health/api.md +30 -0
- package/docs/knowledge-health/assessment/api.md +96 -0
- package/docs/knowledge-health/assessment/capabilities.md +40 -0
- package/docs/knowledge-health/assessment/evaluation.md +27 -0
- package/docs/knowledge-health/assessment/facilitator.md +30 -0
- package/docs/knowledge-health/assessment/quickstart.md +61 -0
- package/docs/knowledge-health/assessment/troubleshooting.md +23 -0
- package/docs/knowledge-health/devday/facilitator.md +16 -0
- package/docs/knowledge-health/devday/participant-response.md +22 -0
- package/docs/knowledge-health/devday/public-default.md +107 -0
- package/docs/knowledge-health/devday/quickstart.md +18 -0
- package/docs/knowledge-health/devday/support.md +22 -0
- package/docs/knowledge-health/exercise.md +17 -0
- package/docs/knowledge-health/facilitator.md +20 -0
- package/docs/knowledge-health/quickstart.md +94 -0
- package/docs/knowledge-health/readme.md +15 -0
- package/docs/knowledge-health/support.md +34 -0
- package/docs/knowledge-setup.md +248 -0
- package/docs/knowledge-workspace.md +264 -0
- package/docs/learning-harnesses.md +237 -0
- package/docs/learning.md +215 -0
- package/docs/local-services.md +223 -19
- package/docs/obsidian-contract.md +246 -15
- package/docs/obsidian-plugin.md +252 -7
- package/docs/obsidian.md +874 -52
- package/docs/optional-ingestion.md +83 -0
- package/docs/personal-workspace.md +266 -0
- package/docs/practical-judgment.md +92 -0
- package/docs/progressive-ingestion-acceptance.md +89 -0
- package/docs/progressive-ingestion.md +235 -0
- package/docs/project-command-inventory.md +1 -0
- package/docs/release-engineering.md +50 -0
- package/docs/repo-boundary-guard.md +120 -3
- package/docs/research-starter-quickstart.md +66 -0
- package/docs/research-starter.md +114 -0
- package/docs/semantic-ingestion.md +198 -0
- package/docs/semantic-operation.md +318 -0
- package/docs/skill-steward.md +6 -0
- package/docs/template-profile.md +164 -0
- package/docs/template-upgrades.md +114 -0
- package/docs/trackables.md +111 -0
- package/docs/upgrade.md +219 -2
- package/fixtures/atelier-architecture/binding/invalid/document.json +19 -0
- package/fixtures/atelier-architecture/binding/valid/document.json +19 -0
- package/fixtures/atelier-architecture/catalog/invalid/document.json +290 -0
- package/fixtures/atelier-architecture/catalog/valid/document.json +343 -0
- package/fixtures/atelier-build-contract/attempt/invalid/document.json +20 -0
- package/fixtures/atelier-build-contract/attempt/valid/document.json +19 -0
- package/fixtures/atelier-build-contract/candidate/invalid/document.json +24 -0
- package/fixtures/atelier-build-contract/candidate/valid/document.json +23 -0
- package/fixtures/atelier-build-contract/decision/invalid/document.json +31 -0
- package/fixtures/atelier-build-contract/decision/valid/document.json +30 -0
- package/fixtures/atelier-build-contract/delivery/invalid/document.json +18 -0
- package/fixtures/atelier-build-contract/delivery/valid/document.json +17 -0
- package/fixtures/atelier-build-contract/gate/invalid/document.json +22 -0
- package/fixtures/atelier-build-contract/gate/valid/document.json +21 -0
- package/fixtures/atelier-build-contract/ledger/invalid/document.json +270 -0
- package/fixtures/atelier-build-contract/ledger/valid/document.json +269 -0
- package/fixtures/atelier-build-contract/objective/invalid/document.json +73 -0
- package/fixtures/atelier-build-contract/objective/valid/document.json +72 -0
- package/fixtures/atelier-build-contract/progress/invalid/document.json +18 -0
- package/fixtures/atelier-build-contract/progress/valid/document.json +17 -0
- package/fixtures/atelier-capability-contract/adoption/invalid/document.json +71 -0
- package/fixtures/atelier-capability-contract/adoption/valid/document.json +70 -0
- package/fixtures/atelier-capability-contract/event/invalid/document.json +18 -0
- package/fixtures/atelier-capability-contract/event/valid/document.json +17 -0
- package/fixtures/atelier-capability-contract/journal/invalid/document.json +382 -0
- package/fixtures/atelier-capability-contract/journal/valid/document.json +381 -0
- package/fixtures/atelier-capability-contract/notice/invalid/document.json +8 -0
- package/fixtures/atelier-capability-contract/notice/valid/document.json +7 -0
- package/fixtures/atelier-capability-contract/package/invalid/document.json +59 -0
- package/fixtures/atelier-capability-contract/package/valid/document.json +58 -0
- package/fixtures/atelier-capability-contract/plan/invalid/document.json +107 -0
- package/fixtures/atelier-capability-contract/plan/valid/document.json +106 -0
- package/fixtures/atelier-capability-contract/release/invalid/document.json +85 -0
- package/fixtures/atelier-capability-contract/release/valid/document.json +84 -0
- package/fixtures/atelier-capability-contract/state/invalid/document.json +316 -0
- package/fixtures/atelier-capability-contract/state/valid/document.json +315 -0
- package/fixtures/atelier-coordination/dependency/invalid/document.json +37 -0
- package/fixtures/atelier-coordination/dependency/valid/document.json +36 -0
- package/fixtures/atelier-coordination/directive/invalid/document.json +25 -0
- package/fixtures/atelier-coordination/directive/valid/document.json +24 -0
- package/fixtures/atelier-coordination/disposition/invalid/document.json +34 -0
- package/fixtures/atelier-coordination/disposition/valid/document.json +33 -0
- package/fixtures/atelier-coordination/outcome/invalid/document.json +39 -0
- package/fixtures/atelier-coordination/outcome/valid/document.json +38 -0
- package/fixtures/atelier-coordination/recovery/invalid/document.json +34 -0
- package/fixtures/atelier-coordination/recovery/valid/document.json +33 -0
- package/fixtures/atelier-harness-contract/handoff/invalid/document.json +25 -0
- package/fixtures/atelier-harness-contract/handoff/valid/document.json +24 -0
- package/fixtures/atelier-ingestion/invalid/authority.json +19 -0
- package/fixtures/atelier-ingestion/semantic-baseline.json +26 -0
- package/fixtures/atelier-ingestion/semantic-operation.json +75 -0
- package/fixtures/atelier-ingestion/valid/plan-input.json +18 -0
- package/fixtures/atelier-inquiry-contract/assessment/invalid/document.json +41 -0
- package/fixtures/atelier-inquiry-contract/assessment/valid/document.json +40 -0
- package/fixtures/atelier-inquiry-contract/bundle/invalid/document.json +51 -0
- package/fixtures/atelier-inquiry-contract/bundle/valid/document.json +50 -0
- package/fixtures/atelier-inquiry-contract/campaign/invalid/document.json +17 -0
- package/fixtures/atelier-inquiry-contract/campaign/valid/document.json +16 -0
- package/fixtures/atelier-inquiry-contract/decision/invalid/document.json +22 -0
- package/fixtures/atelier-inquiry-contract/decision/valid/document.json +21 -0
- package/fixtures/atelier-inquiry-contract/feedback/invalid/document.json +19 -0
- package/fixtures/atelier-inquiry-contract/feedback/valid/document.json +18 -0
- package/fixtures/atelier-inquiry-contract/handoff/invalid/document.json +92 -0
- package/fixtures/atelier-inquiry-contract/handoff/valid/document.json +91 -0
- package/fixtures/atelier-inquiry-contract/hypothesis/invalid/document.json +20 -0
- package/fixtures/atelier-inquiry-contract/hypothesis/valid/document.json +19 -0
- package/fixtures/atelier-inquiry-contract/ledger/invalid/document.json +680 -0
- package/fixtures/atelier-inquiry-contract/ledger/valid/document.json +679 -0
- package/fixtures/atelier-inquiry-contract/legacy-assessment/invalid/document.json +19 -0
- package/fixtures/atelier-inquiry-contract/legacy-assessment/valid/document.json +18 -0
- package/fixtures/atelier-inquiry-contract/request/invalid/document.json +50 -0
- package/fixtures/atelier-inquiry-contract/request/valid/document.json +49 -0
- package/fixtures/atelier-inquiry-contract/source/invalid/document.json +18 -0
- package/fixtures/atelier-inquiry-contract/source/valid/document.json +17 -0
- package/fixtures/atelier-inquiry-contract/withdrawal/invalid/document.json +16 -0
- package/fixtures/atelier-inquiry-contract/withdrawal/valid/document.json +15 -0
- package/fixtures/atelier-instruction-adoption/context-receipt/invalid/document.json +18 -0
- package/fixtures/atelier-instruction-adoption/context-receipt/valid/document.json +17 -0
- package/fixtures/atelier-instruction-adoption/plan/invalid/document.json +63 -0
- package/fixtures/atelier-instruction-adoption/plan/valid/document.json +62 -0
- package/fixtures/atelier-instruction-adoption/receipt/invalid/document.json +22 -0
- package/fixtures/atelier-instruction-adoption/receipt/valid/document.json +21 -0
- package/fixtures/atelier-instruction-adoption/state/invalid/document.json +30 -0
- package/fixtures/atelier-instruction-adoption/state/valid/document.json +29 -0
- package/fixtures/atelier-interaction/act/invalid/document.json +25 -0
- package/fixtures/atelier-interaction/act/valid/document.json +24 -0
- package/fixtures/atelier-interaction/assessment/invalid/document.json +32 -0
- package/fixtures/atelier-interaction/assessment/valid/document.json +31 -0
- package/fixtures/atelier-interaction/observation/invalid/document.json +22 -0
- package/fixtures/atelier-interaction/observation/valid/document.json +21 -0
- package/fixtures/atelier-interaction/policy/invalid/document.json +20 -0
- package/fixtures/atelier-interaction/policy/valid/document.json +19 -0
- package/fixtures/atelier-judgment/case/invalid/document.json +76 -0
- package/fixtures/atelier-judgment/case/valid/document.json +75 -0
- package/fixtures/atelier-judgment/decision/invalid/document.json +38 -0
- package/fixtures/atelier-judgment/decision/valid/document.json +37 -0
- package/fixtures/atelier-judgment/native-decision.md +3 -0
- package/fixtures/atelier-judgment/practice-reconsideration/definition.json +92 -0
- package/fixtures/atelier-judgment/practice-reconsideration/scenario.json +435 -0
- package/fixtures/atelier-knowledge-contract/activation/invalid/document.json +26 -0
- package/fixtures/atelier-knowledge-contract/activation/valid/document.json +25 -0
- package/fixtures/atelier-knowledge-contract/contribution/invalid/document.json +34 -0
- package/fixtures/atelier-knowledge-contract/contribution/valid/document.json +33 -0
- package/fixtures/atelier-knowledge-contract/domain/invalid/document.json +41 -0
- package/fixtures/atelier-knowledge-contract/domain/valid/document.json +40 -0
- package/fixtures/atelier-knowledge-contract/domain-revision/invalid/document.json +46 -0
- package/fixtures/atelier-knowledge-contract/domain-revision/valid/document.json +45 -0
- package/fixtures/atelier-knowledge-contract/evaluation/invalid/document.json +21 -0
- package/fixtures/atelier-knowledge-contract/evaluation/valid/document.json +20 -0
- package/fixtures/atelier-knowledge-contract/ledger/invalid/document.json +318 -0
- package/fixtures/atelier-knowledge-contract/ledger/valid/document.json +317 -0
- package/fixtures/atelier-knowledge-contract/relation/invalid/document.json +25 -0
- package/fixtures/atelier-knowledge-contract/relation/valid/document.json +24 -0
- package/fixtures/atelier-knowledge-contract/review/invalid/document.json +18 -0
- package/fixtures/atelier-knowledge-contract/review/valid/document.json +17 -0
- package/fixtures/atelier-knowledge-contract/withdrawal/invalid/document.json +16 -0
- package/fixtures/atelier-knowledge-contract/withdrawal/valid/document.json +15 -0
- package/fixtures/atelier-learning/invalid/authority.json +14 -0
- package/fixtures/atelier-learning/valid/capture.json +13 -0
- package/fixtures/atelier-personal-workspace-contract/manifest/invalid/authority-key.json +17 -0
- package/fixtures/atelier-personal-workspace-contract/manifest/invalid/nonempty-ext.json +25 -0
- package/fixtures/atelier-personal-workspace-contract/manifest/invalid/wrong-schema.json +22 -0
- package/fixtures/atelier-personal-workspace-contract/manifest/valid/manifest.json +22 -0
- package/fixtures/atelier-personal-workspace-contract/overlay/invalid/authority-key.json +25 -0
- package/fixtures/atelier-personal-workspace-contract/overlay/invalid/unknown-top-level-field.json +27 -0
- package/fixtures/atelier-personal-workspace-contract/overlay/invalid/wrong-schema.json +24 -0
- package/fixtures/atelier-trackable/definition/invalid/document.json +15 -0
- package/fixtures/atelier-trackable/definition/valid/document.json +14 -0
- package/fixtures/atelier-trackable/request/invalid/document.json +23 -0
- package/fixtures/atelier-trackable/request/valid/document.json +22 -0
- package/fixtures/boundary-delegations/invalid/authority-key.v1.json +30 -0
- package/fixtures/boundary-delegations/invalid/push-operation.v1.json +28 -0
- package/fixtures/boundary-delegations/invalid/unsigned.v1.json +25 -0
- package/fixtures/boundary-delegations/valid/empty.v1.json +4 -0
- package/fixtures/boundary-delegations/valid/signed-operator.v1.json +30 -0
- package/fixtures/boundary-owner-keys/invalid/wrong-algorithm.v1.json +15 -0
- package/fixtures/boundary-owner-keys/invalid/wrong-curve.v1.json +15 -0
- package/fixtures/boundary-owner-keys/valid/one-owner.v1.json +17 -0
- package/fixtures/capability-packages/adoption.example.json +70 -0
- package/fixtures/capability-packages/evidence-review/capability-package.json +58 -0
- package/fixtures/capability-packages/evidence-review/capability-release.json +84 -0
- package/fixtures/capability-packages/evidence-review/evaluation.md +15 -0
- package/fixtures/capability-packages/evidence-review/skills/evidence-review/SKILL.md +22 -0
- package/fixtures/capability-packages/evidence-review/skills/evidence-review/references/ledger.md +7 -0
- package/fixtures/capability-packages/research/capability-package.json +88 -0
- package/fixtures/capability-packages/research/capability-release.json +134 -0
- package/fixtures/capability-packages/research/evaluation.md +15 -0
- package/fixtures/capability-packages/research/skills/research-integrate/SKILL.md +29 -0
- package/fixtures/capability-packages/research/skills/research-integrate/references/integration.md +10 -0
- package/fixtures/capability-packages/research/skills/research-plan/SKILL.md +27 -0
- package/fixtures/capability-packages/research/skills/research-plan/references/inquiries.md +26 -0
- package/fixtures/capability-packages/research/skills/research-synthesize/SKILL.md +23 -0
- package/fixtures/capability-packages/research/skills/research-synthesize/references/synthesis.md +12 -0
- package/fixtures/evidence-navigation/invalid/duplicate-operation.json +16 -0
- package/fixtures/evidence-navigation/invalid/instruction-kind.json +36 -0
- package/fixtures/evidence-navigation/invalid/invalid-digest.json +36 -0
- package/fixtures/evidence-navigation/invalid/invalid-time.json +36 -0
- package/fixtures/evidence-navigation/invalid/missing-attribution.json +35 -0
- package/fixtures/evidence-navigation/invalid/reserved-extension.json +19 -0
- package/fixtures/evidence-navigation/invalid/unattributed-acceptance.json +36 -0
- package/fixtures/evidence-navigation/invalid/uncoerced-version.json +16 -0
- package/fixtures/evidence-navigation/invalid/unknown-currency.json +17 -0
- package/fixtures/evidence-navigation/invalid/unknown-selector-field.json +37 -0
- package/fixtures/evidence-navigation/invalid/unsupported-operation.json +15 -0
- package/fixtures/evidence-navigation/valid/claim.json +36 -0
- package/fixtures/evidence-navigation/valid/host.json +16 -0
- package/fixtures/evidence-navigation/valid/profile.json +16 -0
- package/fixtures/evidence-navigation/valid/snapshot.json +17 -0
- package/fixtures/harness-packages/build-harness/capability-package.json +61 -0
- package/fixtures/harness-packages/build-harness/capability-release.json +82 -0
- package/fixtures/harness-packages/build-harness/evaluation.md +3 -0
- package/fixtures/harness-packages/build-harness/skills/atelier-build-harness/SKILL.md +59 -0
- package/fixtures/harness-packages/knowledge-harness/capability-package.json +61 -0
- package/fixtures/harness-packages/knowledge-harness/capability-release.json +82 -0
- package/fixtures/harness-packages/knowledge-harness/evaluation.md +3 -0
- package/fixtures/harness-packages/knowledge-harness/skills/atelier-knowledge-harness/SKILL.md +60 -0
- package/fixtures/harnesses/learning-cycle.json +780 -0
- package/fixtures/inquiry/workshop.json +675 -0
- package/fixtures/inquiry-packages/discovery-harness/capability-package.json +61 -0
- package/fixtures/inquiry-packages/discovery-harness/capability-release.json +82 -0
- package/fixtures/inquiry-packages/discovery-harness/evaluation.md +3 -0
- package/fixtures/inquiry-packages/discovery-harness/skills/atelier-discovery-harness/SKILL.md +48 -0
- package/fixtures/inquiry-packages/research-harness/capability-package.json +61 -0
- package/fixtures/inquiry-packages/research-harness/capability-release.json +82 -0
- package/fixtures/inquiry-packages/research-harness/evaluation.md +3 -0
- package/fixtures/inquiry-packages/research-harness/skills/atelier-research-harness/SKILL.md +43 -0
- package/fixtures/knowledge-health/calibration-suite.json +26 -0
- package/fixtures/knowledge-health/calibration-trial.json +37 -0
- package/fixtures/knowledge-health/corrected/checklist.md +18 -0
- package/fixtures/knowledge-health/devday/participant-record.json +19 -0
- package/fixtures/knowledge-health/expected-summary.json +27 -0
- package/fixtures/knowledge-health/workshop/README.md +20 -0
- package/fixtures/knowledge-health/workshop/atelier.project.json +7 -0
- package/fixtures/knowledge-health/workshop/knowledge-plan.json +65 -0
- package/fixtures/knowledge-health/workshop/records/checklist.md +18 -0
- package/fixtures/knowledge-health/workshop/records/workshop.md +18 -0
- package/fixtures/knowledge-health/workshop/repo-access.v1.json +5 -0
- package/fixtures/knowledge-health/workspace/atelier.project.json +18 -0
- package/fixtures/knowledge-health/workspace/knowledge-plan.json +74 -0
- package/fixtures/knowledge-health/workspace/records/checklist.md +18 -0
- package/fixtures/knowledge-health/workspace/records/pilot.md +16 -0
- package/fixtures/knowledge-health/workspace/repo-access.v1.json +9 -0
- package/fixtures/personal-workspace/overlay.json +24 -0
- package/fixtures/templates/local-library.v1.json +76 -0
- package/fixtures/templates/upgrade-contracts/adoption-policy.v2/invalid.json +16 -0
- package/fixtures/templates/upgrade-contracts/adoption-policy.v2/valid.json +13 -0
- package/fixtures/templates/upgrade-contracts/migration.v3/invalid.json +24 -0
- package/fixtures/templates/upgrade-contracts/migration.v3/valid.json +21 -0
- package/fixtures/templates/upgrade-contracts/template-adoption.v1/invalid.json +60 -0
- package/fixtures/templates/upgrade-contracts/template-adoption.v1/valid.json +57 -0
- package/fixtures/templates/upgrade-contracts/upgrade-plan.v3/invalid.json +85 -0
- package/fixtures/templates/upgrade-contracts/upgrade-plan.v3/valid.json +82 -0
- package/package.json +60 -5
- package/plugins/obsidian/main.js +57 -8
- package/plugins/obsidian/manifest.json +1 -1
- package/skills/claude/atelier-build-harness/SKILL.md +59 -0
- package/skills/claude/atelier-coordination/SKILL.md +32 -0
- package/skills/claude/atelier-discovery-harness/SKILL.md +48 -0
- package/skills/claude/atelier-guided-upgrade/SKILL.md +29 -0
- package/skills/claude/atelier-interaction/SKILL.md +34 -0
- package/skills/claude/atelier-knowledge-harness/SKILL.md +60 -0
- package/skills/claude/atelier-knowledge-setup/SKILL.md +72 -0
- package/skills/claude/atelier-practical-judgment/SKILL.md +64 -0
- package/skills/claude/atelier-research-harness/SKILL.md +43 -0
- package/skills/claude/atelier-skill-steward/SKILL.md +53 -0
- package/skills/claude/atelier-trackables/SKILL.md +40 -0
- package/skills/codex/atelier-build-harness/SKILL.md +59 -0
- package/skills/codex/atelier-coordination/SKILL.md +32 -0
- package/skills/codex/atelier-discovery-harness/SKILL.md +48 -0
- package/skills/codex/atelier-guided-upgrade/SKILL.md +29 -0
- package/skills/codex/atelier-interaction/SKILL.md +34 -0
- package/skills/codex/atelier-knowledge-harness/SKILL.md +60 -0
- package/skills/codex/atelier-knowledge-setup/SKILL.md +72 -0
- package/skills/codex/atelier-practical-judgment/SKILL.md +64 -0
- package/skills/codex/atelier-research-harness/SKILL.md +43 -0
- package/skills/codex/atelier-skill-steward/SKILL.md +53 -0
- package/skills/codex/atelier-trackables/SKILL.md +40 -0
- package/src/architecture/catalog.mjs +355 -0
- package/src/architecture/index.mjs +93 -0
- package/src/boundary/content-rules.mjs +536 -69
- package/src/boundary/delegation-command.mjs +158 -0
- package/src/boundary/delegation.mjs +396 -0
- package/src/boundary/policy.mjs +185 -64
- package/src/build/git.mjs +18 -0
- package/src/build/index.mjs +3 -0
- package/src/build/ledger.mjs +88 -0
- package/src/capabilities/adoption.mjs +381 -0
- package/src/capabilities/evidence.mjs +140 -0
- package/src/capabilities/files.mjs +124 -0
- package/src/capabilities/index.mjs +4 -0
- package/src/capabilities/instructions.mjs +250 -0
- package/src/capabilities/package.mjs +136 -0
- package/src/cli/command-failure.mjs +36 -0
- package/src/cli/execute-command.mjs +16 -2
- package/src/cli/run.mjs +66 -9
- package/src/coauthor/store.mjs +43 -2
- package/src/collaboration/proposals.mjs +189 -0
- package/src/commands/architecture.mjs +27 -0
- package/src/commands/boundary.mjs +3 -0
- package/src/commands/capability.mjs +73 -0
- package/src/commands/enroll.mjs +3 -0
- package/src/commands/harness.mjs +79 -0
- package/src/commands/ingest.mjs +39 -0
- package/src/commands/init.mjs +4 -1
- package/src/commands/inquiry.mjs +66 -0
- package/src/commands/knowledge-semantic.mjs +128 -0
- package/src/commands/knowledge.mjs +119 -0
- package/src/commands/learn.mjs +61 -0
- package/src/commands/obsidian.mjs +772 -65
- package/src/commands/practice.mjs +24 -0
- package/src/commands/setup.mjs +22 -2
- package/src/commands/trackable.mjs +19 -0
- package/src/contracts/corpus.mjs +30 -0
- package/src/coordination/index.mjs +110 -0
- package/src/evidence-navigation/contracts.mjs +60 -0
- package/src/evidence-navigation/evaluate.mjs +69 -0
- package/src/evidence-navigation/generation.mjs +22 -0
- package/src/evidence-navigation/index.mjs +2 -0
- package/src/evidence-navigation/local.mjs +167 -0
- package/src/evidence-navigation/schema.generated.mjs +604 -0
- package/src/evidence-navigation/types.mjs +12 -0
- package/src/export/atelier-export-contract.mjs +35 -8
- package/src/graph/enroll.mjs +248 -0
- package/src/graph/graph.mjs +30 -6
- package/src/graph/knowledge-graph.mjs +77 -9
- package/src/harnesses/contracts.mjs +41 -0
- package/src/harnesses/exchange.mjs +154 -0
- package/src/harnesses/feedback.mjs +16 -0
- package/src/harnesses/history.mjs +37 -0
- package/src/harnesses/index.mjs +4 -0
- package/src/harnesses/store.mjs +29 -0
- package/src/ingestion/contracts.mjs +41 -0
- package/src/ingestion/evaluation.mjs +119 -0
- package/src/ingestion/optional/composition/index.mjs +171 -0
- package/src/ingestion/optional/evaluation/index.mjs +219 -0
- package/src/ingestion/optional/graphify/composition-binding.mjs +60 -0
- package/src/ingestion/optional/graphify/composition_receiving.py +185 -0
- package/src/ingestion/optional/graphify/graphify_supplier.py +938 -0
- package/src/ingestion/optional/graphify/json_bridge.py +163 -0
- package/src/ingestion/optional/graphify/native-closure-pins.json +275 -0
- package/src/ingestion/optional/graphify/native-pins.json +306 -0
- package/src/ingestion/optional/graphify/query_receiving.py +209 -0
- package/src/ingestion/optional/index.mjs +9 -0
- package/src/ingestion/optional/jev/bridge.mjs +166 -0
- package/src/ingestion/optional/jev/composition-binding.mjs +116 -0
- package/src/ingestion/optional/jev/judgments.mjs +174 -0
- package/src/ingestion/optional/jev/native-translation.mjs +32 -0
- package/src/ingestion/optional/lightrag/atelier_lightrag_supplier/__init__.py +7 -0
- package/src/ingestion/optional/lightrag/atelier_lightrag_supplier/adapter.py +966 -0
- package/src/ingestion/optional/lightrag/atelier_lightrag_supplier/artifacts.py +101 -0
- package/src/ingestion/optional/lightrag/atelier_lightrag_supplier/projection.py +146 -0
- package/src/ingestion/optional/lightrag/composition-binding.mjs +67 -0
- package/src/ingestion/optional/vanilla/composition-binding.mjs +102 -0
- package/src/ingestion/optional/vanilla/index.mjs +218 -0
- package/src/ingestion/optional/vanilla/native-normalization.mjs +187 -0
- package/src/ingestion/processors.mjs +218 -0
- package/src/ingestion/semantic.mjs +203 -0
- package/src/ingestion/store.mjs +372 -0
- package/src/inquiry/beliefs.mjs +32 -0
- package/src/inquiry/contracts.mjs +23 -0
- package/src/inquiry/index.mjs +5 -0
- package/src/inquiry/ledger.mjs +135 -0
- package/src/inquiry/lenses.mjs +15 -0
- package/src/inquiry/projection.mjs +77 -0
- package/src/inquiry/store.mjs +35 -0
- package/src/intake/read-scope.mjs +12 -0
- package/src/intake/store.mjs +69 -6
- package/src/interaction/index.mjs +91 -0
- package/src/judgment/index.mjs +82 -0
- package/src/judgment/practice-evaluation.mjs +70 -0
- package/src/judgment/practice.mjs +144 -0
- package/src/knowledge/context.mjs +217 -0
- package/src/knowledge/index.mjs +5 -0
- package/src/knowledge/ingestion.mjs +79 -0
- package/src/knowledge/intake.mjs +33 -0
- package/src/knowledge/ledger.mjs +110 -0
- package/src/knowledge/participatory/guidance.mjs +36 -0
- package/src/knowledge/participatory/guided-contribution.mjs +44 -0
- package/src/knowledge/participatory/index.mjs +2 -0
- package/src/knowledge/participatory/installed-workshop.mjs +108 -0
- package/src/knowledge/plan.mjs +67 -0
- package/src/knowledge/projection.mjs +43 -0
- package/src/knowledge/semantic-operation.mjs +567 -0
- package/src/knowledge/sessions.mjs +467 -0
- package/src/knowledge/workspace.mjs +295 -0
- package/src/knowledge-health/assessment.mjs +165 -0
- package/src/knowledge-health/capabilities.mjs +350 -0
- package/src/knowledge-health/context.mjs +62 -0
- package/src/knowledge-health/example.mjs +47 -0
- package/src/knowledge-health/index.mjs +10 -0
- package/src/knowledge-health/owner-join.mjs +88 -0
- package/src/knowledge-health/proof/common.mjs +24 -0
- package/src/knowledge-health/proof/installed-check.mjs +100 -0
- package/src/knowledge-health/proof/native-readback.mjs +37 -0
- package/src/knowledge-health/proof/rehearse.mjs +68 -0
- package/src/knowledge-health/proof/validate-participant.mjs +17 -0
- package/src/knowledge-health/proof/verify-native-capture.mjs +14 -0
- package/src/knowledge-health/proof/workshop-check.mjs +36 -0
- package/src/knowledge-health/rule-identity.mjs +49 -0
- package/src/knowledge-health/workshop-composition.mjs +19 -0
- package/src/knowledge-health/workshop-profile.mjs +176 -0
- package/src/knowledge-health/workshop.mjs +99 -0
- package/src/learning/adapters.mjs +68 -0
- package/src/learning/assistance.mjs +127 -0
- package/src/learning/contracts.mjs +65 -0
- package/src/learning/store.mjs +272 -0
- package/src/personal-workspace/index.mjs +391 -0
- package/src/personal-workspace/selection.mjs +401 -0
- package/src/project/config.mjs +8 -0
- package/src/project/durable-state.mjs +3 -1
- package/src/project/file-class.mjs +1 -1
- package/src/project/path-match.mjs +2 -1
- package/src/projection/obsidian/edits/apply.mjs +55 -16
- package/src/projection/obsidian/materialize/prepare-view.mjs +87 -5
- package/src/projection/obsidian/personal-workspace.mjs +519 -0
- package/src/projection/obsidian/proposals/adapter.mjs +79 -17
- package/src/projection/obsidian/proposals/observation.mjs +50 -4
- package/src/projection/obsidian/publication/publisher.mjs +214 -18
- package/src/projection/obsidian/publication/vault-list.mjs +4 -3
- package/src/projection/obsidian/recovery/index.mjs +4 -1
- package/src/projection/obsidian/recovery/store.mjs +160 -7
- package/src/projection/obsidian/selection-ui/contribution.mjs +6 -5
- package/src/projection/project.mjs +3 -2
- package/src/readiness/readiness.mjs +10 -3
- package/src/reflection/index.mjs +56 -0
- package/src/runtime/obsidian/app-production-seams.mjs +48 -16
- package/src/runtime/obsidian/app-registration.mjs +175 -28
- package/src/runtime/obsidian/app-restart.mjs +154 -0
- package/src/runtime/obsidian/engine.mjs +437 -56
- package/src/runtime/obsidian/extension-points.mjs +1 -1
- package/src/runtime/obsidian/index.mjs +10 -7
- package/src/runtime/obsidian/launch-plan.mjs +7 -4
- package/src/runtime/obsidian/lifecycle.mjs +108 -23
- package/src/runtime/obsidian/login-item.mjs +335 -0
- package/src/runtime/obsidian/machine-settings.mjs +119 -12
- package/src/runtime/obsidian/observation.mjs +36 -4
- package/src/runtime/obsidian/opening.mjs +173 -38
- package/src/runtime/obsidian/personal-selection.mjs +125 -0
- package/src/runtime/obsidian/pipeline.mjs +115 -6
- package/src/runtime/obsidian/plugin-channel.mjs +11 -3
- package/src/runtime/obsidian/plugin-choice.mjs +16 -4
- package/src/runtime/obsidian/plugin-drift.mjs +59 -11
- package/src/runtime/obsidian/plugin-presence.mjs +14 -1
- package/src/runtime/obsidian/private-lock.mjs +39 -4
- package/src/runtime/obsidian/process-identity.mjs +20 -10
- package/src/runtime/obsidian/project-views.mjs +282 -0
- package/src/runtime/obsidian/questions.mjs +48 -0
- package/src/runtime/obsidian/release-watch.mjs +56 -0
- package/src/runtime/obsidian/service-main.mjs +148 -19
- package/src/runtime/obsidian/service-manager-production.mjs +61 -0
- package/src/runtime/obsidian/service-managers.mjs +275 -0
- package/src/runtime/obsidian/service-record.mjs +87 -23
- package/src/runtime/obsidian/service.mjs +102 -9
- package/src/runtime/obsidian/startup-adapters.mjs +59 -21
- package/src/runtime/obsidian/unheld-evidence.mjs +84 -0
- package/src/runtime/obsidian/vault-location.mjs +300 -0
- package/src/runtime/obsidian/view-counts.mjs +34 -0
- package/src/runtime/obsidian/view-permission.mjs +334 -0
- package/src/server/local-sidecar.mjs +169 -2
- package/src/server/server.mjs +28 -2
- package/src/template-bindings/project.mjs +92 -0
- package/src/templates/profile.mjs +225 -0
- package/src/trackables/domain.mjs +175 -0
- package/src/trackables/store.mjs +114 -0
- package/src/ui/control-system.mjs +201 -0
- package/src/ui/html-primitives.mjs +3 -0
- package/src/ui/knowledge-page.mjs +1388 -0
- package/src/upgrade/closure-diagnostics.mjs +135 -0
- package/src/upgrade/closure.mjs +649 -0
- package/src/upgrade/explanation.mjs +1 -1
- package/src/upgrade/template-participant.mjs +171 -0
- package/src/upgrade/transaction.mjs +72 -25
- package/src/upgrade/upgrade.mjs +20 -7
- package/templates/external-project-workspace/pack-lifecycle.json +7 -1
- package/templates/knowledge-workspace/.gitattributes +2 -0
- package/templates/knowledge-workspace/AGENTS.md +27 -0
- package/templates/knowledge-workspace/README.md +44 -0
- package/templates/knowledge-workspace/atelier.project.json +22 -0
- package/templates/knowledge-workspace/gitignore +6 -0
- package/templates/knowledge-workspace/knowledge-plan.json +111 -0
- package/templates/knowledge-workspace/knowledge-plan.schema.json +281 -0
- package/templates/knowledge-workspace/records/forecast.md +22 -0
- package/templates/knowledge-workspace/records/inspection.md +25 -0
- package/templates/knowledge-workspace/records/telescope.md +24 -0
- package/templates/knowledge-workspace/repo-access.v1.json +9 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# Portable template profiles
|
|
2
|
+
|
|
3
|
+
Status: Next-release package API. Import validators from
|
|
4
|
+
`@mnstry/atelier/templates` and canonical project binding from
|
|
5
|
+
`@mnstry/atelier/template-bindings`. The versioned schema is exported at
|
|
6
|
+
`@mnstry/atelier/contracts/atelier-template-profile.v1.schema.json`.
|
|
7
|
+
These APIs do not establish installed product-host acceptance.
|
|
8
|
+
|
|
9
|
+
A template profile names semantic roles, surface roles, supported carriers,
|
|
10
|
+
compatibility and limits. An adopter binds those roles to its own source. The
|
|
11
|
+
profile carries no project content, renderer, runtime handler or permission.
|
|
12
|
+
|
|
13
|
+
## Four independent grammars
|
|
14
|
+
|
|
15
|
+
- Semantic roles describe resource, relation, facet, asset, collection, sequence,
|
|
16
|
+
occurrence, offer and action-descriptor structure. Profiles choose a subset.
|
|
17
|
+
- Surface roles describe composition: Shell, region, collection, card, detail,
|
|
18
|
+
graph, filter, offer, status, refusal and receipt views. They reference semantic
|
|
19
|
+
role identifiers, not executable components.
|
|
20
|
+
- Runtime meaning is an optional opaque `RuntimeProfileRef`. A host must supply
|
|
21
|
+
the exact profile for runtime participation; ordinary local authoring needs
|
|
22
|
+
no runtime connection. The profile never creates an operation or receipt.
|
|
23
|
+
- Governance and release identities are typed digest-bound references. A
|
|
24
|
+
`TemplateRef` is not interchangeable with a source, policy, authority decision,
|
|
25
|
+
project binding, projection or release reference.
|
|
26
|
+
|
|
27
|
+
## Validation stages
|
|
28
|
+
|
|
29
|
+
| Entry point | Checks | Does not prove |
|
|
30
|
+
| --- | --- | --- |
|
|
31
|
+
| `validateTemplateDefinition(profile)` | Closed grammar, bounded data, unique roles, surface references and supported extension behavior | Adoption, content or host availability |
|
|
32
|
+
| `validateTemplateBinding(profile, binding, records)` | Exact template, role cardinality, required roles, resolved source digests | Source ownership or content truth |
|
|
33
|
+
| `validateTemplateRelease(profile, binding, release, records)` | Exact binding, projection/source/policy/decision/payload references, required carriers | Publication acceptance, rights or distribution |
|
|
34
|
+
| `validateTemplateHost(profile, host)` | Exact version/pack/runtime requirements, primitives and optional decision observations | Host authentication, actual renderer behavior or operation permission |
|
|
35
|
+
|
|
36
|
+
Every result includes `authority: structural-only`, `executionAuthority: false`
|
|
37
|
+
and `publicationAuthority: false`. No result authorizes a write, network request,
|
|
38
|
+
installation or publication. The implementation does not mutate inputs.
|
|
39
|
+
|
|
40
|
+
Reference inventories contain `{ ref, document }` entries. All entries are
|
|
41
|
+
bounded plain JSON; duplicate `(kind, id, version)` identities refuse even if
|
|
42
|
+
their digests differ. References must resolve to exact supplied bytes. No URL
|
|
43
|
+
fetching, path loading, provider call or dynamic extension code occurs.
|
|
44
|
+
|
|
45
|
+
`templateReference(kind, id, version, document)` hashes the existing Atelier
|
|
46
|
+
canonical JSON serialization of:
|
|
47
|
+
|
|
48
|
+
```json
|
|
49
|
+
{ "schema": "atelier-template-digest@v1", "kind": "SourceRef", "id": "sample", "version": "v1", "document": {} }
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The digest is `sha256:` plus lowercase hexadecimal. Kind, identifier and version
|
|
53
|
+
belong to the digest domain. Template, binding and release versions use SemVer;
|
|
54
|
+
other source-owned versions remain opaque strings. Pack versions retain their
|
|
55
|
+
existing `vN` contract. None of these digests is a signature or an authenticated
|
|
56
|
+
authority decision. This new domain does not reinterpret older artifact digests.
|
|
57
|
+
|
|
58
|
+
## Extensions and evolution
|
|
59
|
+
|
|
60
|
+
This is a separate versioned artifact; the closed extension-pack v1 schema is
|
|
61
|
+
unchanged. Profiles may link optional namespaced schema/payload references.
|
|
62
|
+
Their bytes must resolve at binding/release validation, but their meanings stay
|
|
63
|
+
opaque and inert. This version registers no required extension handlers and
|
|
64
|
+
refuses every required extension. Do not place required behavior in optional
|
|
65
|
+
annotations to evade admission.
|
|
66
|
+
|
|
67
|
+
Exact compatible Atelier versions and pack digests are explicit. There is no
|
|
68
|
+
automatic version coercion, range admission, migration or upgrade apply in this
|
|
69
|
+
module. A new contract version and the existing owner-controlled upgrade path
|
|
70
|
+
must govern changes. Keep prior source and profile artifacts for recovery.
|
|
71
|
+
|
|
72
|
+
The schema follows the contract epoch's optional `contractVersion` and `ext`
|
|
73
|
+
conventions. Its `ext` containers are reserved and permit no properties in this
|
|
74
|
+
revision. Optional extension data must use the explicit digest-bound namespaced
|
|
75
|
+
`extensions` list; required behavior cannot be smuggled through an ignored bag.
|
|
76
|
+
|
|
77
|
+
## Optional advisory decisions
|
|
78
|
+
|
|
79
|
+
`optionalDecisions` declares named tasks using `atelier-decision-request@v1`.
|
|
80
|
+
Each is explicitly optional; the schema refuses a required provider and provides
|
|
81
|
+
no vendor selector. `validateTemplateDecision` consumes the existing request and
|
|
82
|
+
result validators, checks the task binding, and retains proposal-only semantics.
|
|
83
|
+
It does not decide whether the answer is true or should influence the graph.
|
|
84
|
+
|
|
85
|
+
A host may report `absent`, `disabled`, `unqualified` or `available`. Available
|
|
86
|
+
requires an exact `CapabilityRef`; it remains an untrusted structural observation
|
|
87
|
+
until the host's existing capability and authority checks qualify it. Absence
|
|
88
|
+
leaves local reading and authoring usable. Every diagnostic retains a
|
|
89
|
+
deterministic/manual fallback and `invocationAuthorized: false`.
|
|
90
|
+
|
|
91
|
+
No decision SDK, credential, network access, provider selection or automatic
|
|
92
|
+
substitution is required. Actual consent, disclosure, execution, budgets,
|
|
93
|
+
revocation and qualification remain with the existing host/capability owners.
|
|
94
|
+
This module adds neither a capability registry nor a second decision ontology.
|
|
95
|
+
|
|
96
|
+
## Synthetic proof and remaining integration
|
|
97
|
+
|
|
98
|
+
```sh
|
|
99
|
+
node --test test/template-profile.test.mjs
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
The invented reading-shelf fixture exercises structural positive cases and
|
|
103
|
+
refusals. It is not a real publication, owner approval, visual baseline or
|
|
104
|
+
conformance certificate. Software/definition licensing never supplies content
|
|
105
|
+
rights or paid-service entitlement.
|
|
106
|
+
|
|
107
|
+
## Canonical project binding
|
|
108
|
+
|
|
109
|
+
`@mnstry/atelier/template-bindings` exports `createTemplateProjectView(project,
|
|
110
|
+
requestJson)`. Supply an existing loaded Atelier project and bounded JSON text
|
|
111
|
+
with `profile`, `projectRef`, `roleNodeIds`, `target` and optional `theme`.
|
|
112
|
+
For example, `roleNodeIds: { items: ['library:paper', 'library:thread'] }` binds
|
|
113
|
+
the synthetic shelf's role to existing source identities. The adapter calls the
|
|
114
|
+
canonical graph builder with its fresh file cache; each SourceRef binds the
|
|
115
|
+
exact Markdown byte digest used by that census, not metadata alone.
|
|
116
|
+
|
|
117
|
+
The initial adapter supports classified active Markdown sources bound as
|
|
118
|
+
Resource, with CollectionView/StatusView presentation. CollectionView is a view
|
|
119
|
+
of selected resources, not proof of a semantic Collection. An unused optional
|
|
120
|
+
Collection role reports unsupported without closing local Resource authoring;
|
|
121
|
+
binding it or requiring it refuses until an explicit canonical mapping exists.
|
|
122
|
+
Unknown targets,
|
|
123
|
+
missing or withheld selected sources, audience/repository-boundary widening,
|
|
124
|
+
unsupported views, missing required roles and runtime-profile requirements
|
|
125
|
+
refuse. Draft/archived sources do not appear. Local archival is not a governed
|
|
126
|
+
withdrawal receipt, and old exported copies are not remotely erased.
|
|
127
|
+
|
|
128
|
+
Presentation models, escaping, themes and static HTML come from the existing
|
|
129
|
+
presentation package. Web and document preview are the same read-only bytes;
|
|
130
|
+
no inert control pretends to be an implemented action. The adapter writes no
|
|
131
|
+
source, projection, lock or release and performs no provider call. Optional
|
|
132
|
+
decisions report absent with the deterministic/manual fallback.
|
|
133
|
+
|
|
134
|
+
`textPreview` provides the same selected titles, summaries, self-description
|
|
135
|
+
and status as plain text without CSS, script or media. It is a local low-bandwidth
|
|
136
|
+
preview, not an email/chat adapter, portable document package or publication.
|
|
137
|
+
|
|
138
|
+
```sh
|
|
139
|
+
node --test test/template-profile.test.mjs test/template-journey.test.mjs
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
The journey test uses disposable synthetic repositories, the actual local
|
|
143
|
+
maintenance engine and production `createSourceApply`, not an alternate source
|
|
144
|
+
writer. A simulated person's edit is held, applied to canonical source,
|
|
145
|
+
rebuilt and rendered; the old binding refuses against the new source, duplicate
|
|
146
|
+
apply is idempotent and an unrelated resource remains byte-identical. The test
|
|
147
|
+
does not open the desktop application, accept a release or prove accessibility
|
|
148
|
+
with assistive technology. On platforms without production atomic exchange,
|
|
149
|
+
the apply journey explicitly skips and must not count as platform acceptance.
|
|
150
|
+
|
|
151
|
+
`npm run consumer:smoke` installs the exact tarball offline and exercises the
|
|
152
|
+
template APIs by package name. Its synthetic journey binds canonical source,
|
|
153
|
+
checks provider absence and audience refusal, applies an edit through the
|
|
154
|
+
installed source-apply owner, rejects the stale binding, and checks idempotence
|
|
155
|
+
and preservation of an unrelated source. Atomic exchange is required for the
|
|
156
|
+
write portion; other platforms retain the read-only checks.
|
|
157
|
+
|
|
158
|
+
The built-in [template adoption participant](template-upgrades.md) connects local
|
|
159
|
+
profile adoption, exact locks, retained history and read-only projections to the
|
|
160
|
+
existing upgrade transaction engine. External packs, runtime extensions and
|
|
161
|
+
automatic restoration remain unsupported.
|
|
162
|
+
|
|
163
|
+
Remaining integration includes interactive host wiring, all-carrier conformance,
|
|
164
|
+
actual host/accessibility/visual proof, and receiving-owner acceptance.
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Local template adoption
|
|
2
|
+
|
|
3
|
+
The built-in `local-template-profile@1` participant prepares an inert template
|
|
4
|
+
profile, graph selection and read-only projection in the existing exact-plan
|
|
5
|
+
upgrade engine. It uses the same exclusive writer, exact preimages, saved bytes,
|
|
6
|
+
append-only private journal, backups, commit hooks and commit verification.
|
|
7
|
+
It is not a plugin registry or a second transaction engine.
|
|
8
|
+
|
|
9
|
+
## Prepare and inspect
|
|
10
|
+
|
|
11
|
+
Use an isolated linked worktree with one managed root repository. Commit the
|
|
12
|
+
profile and selection JSON inputs before preparing. Both paths must be literal,
|
|
13
|
+
distinct, root-relative regular non-executable files outside managed output.
|
|
14
|
+
The selection has exactly `projectRef`, `roleNodeIds`, `target`, and optional
|
|
15
|
+
`theme`. Source selection and disclosure are enforced by the existing canonical
|
|
16
|
+
graph, projection policy and template composition adapter.
|
|
17
|
+
|
|
18
|
+
Explicit enrollment uses `atelier.adoption-policy.json`:
|
|
19
|
+
|
|
20
|
+
```json
|
|
21
|
+
{
|
|
22
|
+
"schema": "mnstry.atelier-adoption-policy@v2",
|
|
23
|
+
"enabled": true,
|
|
24
|
+
"participant": "local-template-profile@1",
|
|
25
|
+
"mode": "manual-exact-plan",
|
|
26
|
+
"maxAgeSeconds": 86400,
|
|
27
|
+
"recoveryCoverage": "local-only",
|
|
28
|
+
"allowedEffects": ["template-adoption", "lock-and-projections", "git-commit"]
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The API is exported through the existing `@mnstry/atelier/upgrade` subpath:
|
|
33
|
+
|
|
34
|
+
```js
|
|
35
|
+
import { prepareTemplateUpgrade, explainSavedUpgrade, applySavedUpgrade }
|
|
36
|
+
from '@mnstry/atelier/upgrade'
|
|
37
|
+
|
|
38
|
+
const prepared = prepareTemplateUpgrade({
|
|
39
|
+
project,
|
|
40
|
+
profileFile: 'next-profile.json',
|
|
41
|
+
selectionFile: 'next-selection.json',
|
|
42
|
+
})
|
|
43
|
+
const explanation = explainSavedUpgrade({ project, planFile: prepared.savedPlan })
|
|
44
|
+
// Inspect the exact changes and obtain the owner's selection before applying.
|
|
45
|
+
// A digest identifies bytes; it does not authenticate a human decision.
|
|
46
|
+
const result = applySavedUpgrade({
|
|
47
|
+
project,
|
|
48
|
+
planFile: prepared.savedPlan,
|
|
49
|
+
confirm: prepared.plan.digest,
|
|
50
|
+
})
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
There is no new CLI command family. The existing saved-plan apply, explain,
|
|
54
|
+
status and recovery entry points understand the new v3 plan. Existing v2 plans
|
|
55
|
+
remain supported and still refuse execution when their pinned executor changes.
|
|
56
|
+
Policies are never silently converted.
|
|
57
|
+
|
|
58
|
+
## Installed state
|
|
59
|
+
|
|
60
|
+
The engine owns only these template paths:
|
|
61
|
+
|
|
62
|
+
- `atelier-template/profile.json` and `selection.json`: Exact inert input bytes.
|
|
63
|
+
- `atelier-template/adoption.json`: Validated installed state with typed refs,
|
|
64
|
+
raw input digests and the four managed-content digests/modes.
|
|
65
|
+
- `atelier-template/history/<digest>.json`: Exact immutable prior adoption
|
|
66
|
+
manifest on subsequent adoption.
|
|
67
|
+
- `atelier-output/template.html` and `template-binding.json`: Read-only
|
|
68
|
+
rendering and its validated source binding.
|
|
69
|
+
|
|
70
|
+
The existing lock and normal four graph/projection/readiness files are refreshed
|
|
71
|
+
through their original builders. The v1 lock keeps unrelated fields, provenance,
|
|
72
|
+
migration history, historical success metadata, and the complete workspace
|
|
73
|
+
template lineage in `lock.template`. Only package and generated information
|
|
74
|
+
are refreshed. The separate adoption document owns the profile's typed identity,
|
|
75
|
+
version, and digest. A profile adoption never replaces the workspace template
|
|
76
|
+
identity or version. The adoption document does not hash itself recursively.
|
|
77
|
+
|
|
78
|
+
First adoption refuses orphan reserved state. Later adoption verifies every
|
|
79
|
+
managed preimage and the complete prior-manifest chain. Committed local changes
|
|
80
|
+
to managed files refuse rather than being overwritten. Source documents and
|
|
81
|
+
ordinary local configuration are never template write targets.
|
|
82
|
+
|
|
83
|
+
Repeating the same valid inputs is another explicit adoption, not an implicit
|
|
84
|
+
no-op: it appends a new adoption manifest linked to the previous one. Identical
|
|
85
|
+
profile, selection and projection bytes are not rewritten. Existing history is
|
|
86
|
+
verified and retained. Empty reserved root/history directories are harmless;
|
|
87
|
+
unknown reserved child directories are refused, including empty ones.
|
|
88
|
+
|
|
89
|
+
Before mutation the engine recomputes the template output using current canonical
|
|
90
|
+
source and compares it to the saved bytes. After writes it verifies the installed
|
|
91
|
+
profile, selection, binding and rendering against that same source. A partial or
|
|
92
|
+
failed operation never reports completed adoption.
|
|
93
|
+
|
|
94
|
+
## Limits and recovery
|
|
95
|
+
|
|
96
|
+
External packs, runtime profiles, extension handlers, local overlays, custom
|
|
97
|
+
callbacks, package installation, network retrieval, source migrations and
|
|
98
|
+
automatic consent remain unsupported. This first participant does not claim
|
|
99
|
+
full template migration or all-carrier conformance.
|
|
100
|
+
|
|
101
|
+
The exact-plan POSIX, clean-worktree, path, Git, hook, expiry, bounded-inventory
|
|
102
|
+
and local-evidence controls still apply. Only regular create/update writes are
|
|
103
|
+
supported; no deletion, rename, executable mode change or arbitrary scaffolding
|
|
104
|
+
is added. An accepted attempt consumes its plan, including an interrupted attempt.
|
|
105
|
+
|
|
106
|
+
Use the existing operation status and recovery dry-run API. Recovery describes
|
|
107
|
+
verified backups and conflicts; it never restores files, resets history, clears
|
|
108
|
+
a lease, resumes a consumed plan or supplies new consent automatically. A later
|
|
109
|
+
restoration needs a separately reviewed operation. Corrupted or missing evidence
|
|
110
|
+
cannot become success.
|
|
111
|
+
|
|
112
|
+
A completed transaction means a local candidate commit only. Independent review,
|
|
113
|
+
CI, merge, publisher authentication, package release, recipient adoption,
|
|
114
|
+
runtime activation and human acceptance remain separate.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Trackables: one definition, one domain writer
|
|
2
|
+
|
|
3
|
+
A Trackable follows an identifiable subject or pursuit over time. Its adopted
|
|
4
|
+
definition, instance, occurrences, evidence and qualified views retain separate
|
|
5
|
+
meanings. Following a practice, completing a milestone and recording a reflection
|
|
6
|
+
use different profiles. A recorded result does not establish independent ability.
|
|
7
|
+
|
|
8
|
+
The portable `@mnstry/atelier/trackables` API exports one domain reducer used by
|
|
9
|
+
`previewTrackable` and the private `createTrackableStore` reference adapter.
|
|
10
|
+
Product hosts adapt this reducer through their existing authenticated domain
|
|
11
|
+
writer. They must not copy member state into a Witness-specific store.
|
|
12
|
+
|
|
13
|
+
## Supported reference profile
|
|
14
|
+
|
|
15
|
+
| Profile | Occurrence | Evidence | Domain fulfillment |
|
|
16
|
+
| --- | --- | --- | --- |
|
|
17
|
+
| Recurring practice | Local calendar day in an explicit IANA timezone | Completed, partial, skipped, waived, not applicable | Separate from completing an occurrence |
|
|
18
|
+
| Milestone | One opportunity for the adopted definition | Same explicit result states | Explicit open, fulfilled or released disposition |
|
|
19
|
+
| Qualitative series | Unscheduled source event | Attributed text observation | Unscored |
|
|
20
|
+
|
|
21
|
+
Missing evidence is `unobserved`, never zero or automatic failure. Several
|
|
22
|
+
matching reports of one occurrence count once; conflicting reports remain
|
|
23
|
+
`disputed`. Manual and session records retain separate source identities and
|
|
24
|
+
assistance. A source event cannot be recaptured under another evidence ID for the
|
|
25
|
+
same instance. Different instances and days remain distinct.
|
|
26
|
+
|
|
27
|
+
This bounded profile supports daily calendars, not arbitrary recurrence,
|
|
28
|
+
quantitative meters, streaks or a universal progress score. It uses the host's
|
|
29
|
+
installed IANA timezone data for new records, previews and current windows.
|
|
30
|
+
Journal replay preserves each recorded occurrence's original local day. Native
|
|
31
|
+
schedulers retain calendar ownership and
|
|
32
|
+
must qualify their mappings, including timezone database version where needed.
|
|
33
|
+
|
|
34
|
+
`releaseTrackable` validates and hashes a definition. Releasing new bytes does
|
|
35
|
+
not change existing instances. `adopt` requires a later compatible revision and
|
|
36
|
+
an explicit effective instant; it refuses changes that reinterpret recorded
|
|
37
|
+
occurrences. Late reports resolve the definition applicable at occurrence time.
|
|
38
|
+
DST changes preserve local-day identity. A timezone change uses a new definition.
|
|
39
|
+
|
|
40
|
+
The immutable journal records every command, actor assertion, recording time,
|
|
41
|
+
source time and resulting state digest. New events use `atelier-trackable-event@v2`;
|
|
42
|
+
record events also pin the resolved occurrence, source instant/reference and host
|
|
43
|
+
timezone-data version (`null` if unavailable). Replay checks these against the
|
|
44
|
+
adopted definition, scope, instance and command, without recalculating the stored
|
|
45
|
+
local day. Event-chain and resulting-state digest checks still apply. This is
|
|
46
|
+
local integrity checking, not authentication of the host calendar or recorder.
|
|
47
|
+
Corrections preserve original events and
|
|
48
|
+
invalidate dependent fulfillment evidence. Lifecycle, domain fulfillment,
|
|
49
|
+
evidence quality and attention remain independent. Pausing prevents new capture;
|
|
50
|
+
retirement is terminal. Views describe current corrected knowledge about the
|
|
51
|
+
selected occurrence time, not historical knowledge as it was then understood.
|
|
52
|
+
|
|
53
|
+
## Local use and ownership
|
|
54
|
+
|
|
55
|
+
Run `atelier trackable preview|release|execute|snapshot|view|export` with JSON stdin.
|
|
56
|
+
The existing workspace must ignore `.atelier-local/`. Local identity is asserted,
|
|
57
|
+
not authenticated. `scope` selects a private store; operating-system access is
|
|
58
|
+
its trust boundary, so this is not multi-tenant access control. Exports are
|
|
59
|
+
private and require deliberate handling. Withdrawal and correction retain
|
|
60
|
+
history; this adapter does not claim secure erasure or automated retention.
|
|
61
|
+
|
|
62
|
+
A command has `schema: "atelier-trackable-command@v1"`, `requestId`,
|
|
63
|
+
`expectedRevision`, `operation` and `input`. Operations are `release`,
|
|
64
|
+
`instantiate`, `adopt`, `record`, `correct`, `lifecycle` and `disposition`.
|
|
65
|
+
The exported [schema](../contracts/atelier-trackable.v1.schema.json) and
|
|
66
|
+
[fixtures](../fixtures/atelier-trackable) specify exact fields.
|
|
67
|
+
|
|
68
|
+
`execute` locks the selected scope, verifies history, applies the shared reducer,
|
|
69
|
+
atomically publishes one event and reads it back. Replaying the same request and
|
|
70
|
+
actor returns the original receipt; changed input under that identity refuses.
|
|
71
|
+
A lost response can therefore be reconciled by retrying the original command.
|
|
72
|
+
Dead process locks use the existing private-state custody mechanism. Journal
|
|
73
|
+
capacity reserves room for correction and retirement; full histories remain
|
|
74
|
+
available for explicit export. No automatic archive or compaction is performed.
|
|
75
|
+
|
|
76
|
+
Older `atelier-trackable-event@v1` events remain readable and can precede new v2
|
|
77
|
+
events without rewriting history. They lack the original calendar observation,
|
|
78
|
+
so replay still needs compatible timezone data. If replay of a legacy record
|
|
79
|
+
produces a different state digest, snapshot, view and execute refuse.
|
|
80
|
+
`exportHistory()` remains available after verifying the full event chain and
|
|
81
|
+
returns `stateVerified: false` plus `replayError`; these raw events are not a
|
|
82
|
+
verified reconstructed state. Restore the original calendar environment before
|
|
83
|
+
resuming that store. Do not infer a timezone change from this diagnostic alone,
|
|
84
|
+
or rewrite old digests to make them pass. Other replay and integrity failures
|
|
85
|
+
still refuse; a valid reconstruction exports `stateVerified: true`.
|
|
86
|
+
|
|
87
|
+
## Authoring and host adoption
|
|
88
|
+
|
|
89
|
+
Definition fields `profile` and `schedule` are enforced by the reducer and
|
|
90
|
+
occurrence resolver. `id` and `revision` pin meaning; `purpose` is rationale;
|
|
91
|
+
`interpretationLimits` are surfaced guidance. The engine revision appears in
|
|
92
|
+
release and view outputs. Host binding must additionally name immutable source
|
|
93
|
+
resolution, authentication, operation authorization, evidence-source validation,
|
|
94
|
+
storage and rendering. Caller-supplied source digests are provenance assertions,
|
|
95
|
+
not proof that a session or instrument reported them.
|
|
96
|
+
|
|
97
|
+
The reducer's optional `occurrenceResolution` context is for replay of a
|
|
98
|
+
previously verified journal, never user-authored command input. Native writers
|
|
99
|
+
that use it must persist and verify the command, complete resolution and state
|
|
100
|
+
digest together. The local adapter derives it from the new state and never
|
|
101
|
+
accepts a caller override. Existing recorded evidence keeps its occurrence when
|
|
102
|
+
current rules change; new evidence and the current-window view can consequently
|
|
103
|
+
resolve the same instant to a different day. The API does not silently merge or
|
|
104
|
+
reinterpret those occurrences.
|
|
105
|
+
|
|
106
|
+
Reference tests exercise preview/runtime parity, durable reload, scoped stores,
|
|
107
|
+
correction, duplicate transport/source events, same-day instances, late evidence,
|
|
108
|
+
DST, timezone adoption, simulated timezone-data drift, legacy export-only
|
|
109
|
+
recovery and refusal of inconsistent replay metadata. These establish the portable subset. Authenticated
|
|
110
|
+
member-host adoption, actual UI refresh and broader calendar profiles require
|
|
111
|
+
separate receiving-host evidence.
|
package/docs/upgrade.md
CHANGED
|
@@ -9,6 +9,104 @@ workspace between Atelier package releases. The flow is local-only: it does not
|
|
|
9
9
|
provision repositories, contact a Git host, mutate the MNSTRY runtime, or write
|
|
10
10
|
through a browser view.
|
|
11
11
|
|
|
12
|
+
## Upgrading to 0.2.0-alpha.14
|
|
13
|
+
|
|
14
|
+
`atelier upgrade closure --npm-root ABSOLUTE_NPM_ROOT` plans a check of a staged
|
|
15
|
+
candidate's own dependency closure before an upgrade. It reads the candidate's
|
|
16
|
+
lockfile and manifests only and runs no npm command. Exit code 3 is a completed
|
|
17
|
+
plan and exit code 2 a refusal; the command never exits 0, because a plan is not
|
|
18
|
+
proof of an offline reinstall. It refuses `--__proto__` as an unsupported flag.
|
|
19
|
+
See [Consumer dependency closure plan](#consumer-dependency-closure-plan).
|
|
20
|
+
|
|
21
|
+
This release also introduces `@mnstry/atelier/ui`, a tenant-neutral control
|
|
22
|
+
grammar for local Atelier tooling and compatible downstream interfaces. Existing
|
|
23
|
+
consumers do not need to change. Consumers that adopt it map the
|
|
24
|
+
`--system-control-*` custom properties to their own theme.
|
|
25
|
+
|
|
26
|
+
No schema or stored record format changes in this release. The boundary checks
|
|
27
|
+
now judge work they used to miss, so a commit or push that passed on
|
|
28
|
+
0.2.0-alpha.13 can be refused, and a few other results change:
|
|
29
|
+
|
|
30
|
+
- Reinstall the boundary hooks with `atelier boundary install-hooks`. The new
|
|
31
|
+
pre-push hook passes the remote Git names, so history held only by another
|
|
32
|
+
remote is judged on its way to a new one. The push check judges every commit
|
|
33
|
+
the remote's tracking refs do not hold, each against its parent, binaries
|
|
34
|
+
included. A push carrying more than 1000 such commits or more than the
|
|
35
|
+
evidence budget is refused with `content-scan-incomplete`; push it in
|
|
36
|
+
smaller parts.
|
|
37
|
+
- The pre-commit check reads the index and work tree Git names, so
|
|
38
|
+
`git commit -a`, `git commit <paths>` and commits from a linked worktree are
|
|
39
|
+
judged. It blocks with `pre-commit-repo-unresolved` when no single declared
|
|
40
|
+
repository is being committed, as the push check does.
|
|
41
|
+
- The content scan pins its diff format, so an external diff, a textconv
|
|
42
|
+
driver, changed prefixes or quoted paths no longer leave a change unscanned.
|
|
43
|
+
A staged or pushed deletion of a binary file no longer blocks.
|
|
44
|
+
- The semantic-field review takes only an added review marker as approval; a
|
|
45
|
+
removed marker, or one in a file name, approves nothing. `atelier upgrade`
|
|
46
|
+
applies the same rule.
|
|
47
|
+
- `extract-structure` refuses `parallel: true` with `NATIVE_WORKERS_UNATTESTED`.
|
|
48
|
+
- Knowledge Health regenerates its rule identity for the two graph files: the
|
|
49
|
+
`check` each assessment carries names a new `version`, `sourceTree` and
|
|
50
|
+
`graphBlob`. The rule it applies is unchanged. A workshop contribution
|
|
51
|
+
started on 0.2.0-alpha.13, completed or not, cannot start Review on this
|
|
52
|
+
release (`finding changed; refresh before selecting a new draft`); start
|
|
53
|
+
Review before upgrading, or record a new contribution.
|
|
54
|
+
- `runMaintenanceService` from `@mnstry/atelier/obsidian` refuses a project
|
|
55
|
+
loader that answers with a promise when no `locateProject` is given
|
|
56
|
+
(`service-loader-not-synchronous`); on 0.2.0-alpha.13 such a service
|
|
57
|
+
protected no repository. Pass a synchronous `locateProject`, which answers
|
|
58
|
+
a project naming its folder, to keep an asynchronous loader (see
|
|
59
|
+
[Obsidian](obsidian.md)).
|
|
60
|
+
|
|
61
|
+
A package update supplies no interpretation approval, source-write permission,
|
|
62
|
+
publication authority or runtime activation. Rehearse this exact installed
|
|
63
|
+
version in a disposable workspace before client use.
|
|
64
|
+
|
|
65
|
+
## Upgrading to 0.2.0-alpha.13
|
|
66
|
+
|
|
67
|
+
The public [Knowledge Health workshop](knowledge-health/devday/public-default.md)
|
|
68
|
+
uses an invented local workspace. Participants can retain their original words,
|
|
69
|
+
a separate interpretation and a `note`, `perspective-only`, `disagreement` or
|
|
70
|
+
`pause` response. Review is a separate optional session. A selected draft can
|
|
71
|
+
produce one retained copy-only source-owner proposal; retries and reopen read
|
|
72
|
+
back its original receipt instead of appending another proposal. A source owner
|
|
73
|
+
reviews the proposal and edits the declaration with normal repository tools,
|
|
74
|
+
then reads it back and reassesses. The browser host grants no source-apply route.
|
|
75
|
+
|
|
76
|
+
`atelier knowledge semantic` exposes the existing semantic runner's eleven
|
|
77
|
+
operations through JSON stdin. It retains the runner's refusal codes and saved
|
|
78
|
+
failure details. The [semantic operation contract](semantic-operation.md)
|
|
79
|
+
remains authoritative; this release adds no schema or package export.
|
|
80
|
+
|
|
81
|
+
Existing source and local history remain owned by their original repositories.
|
|
82
|
+
A package update supplies no interpretation approval, source-write permission,
|
|
83
|
+
Obsidian host qualification, publication authority or runtime activation. Rehearse
|
|
84
|
+
this exact installed version in a disposable workspace before client use.
|
|
85
|
+
|
|
86
|
+
## Unreleased
|
|
87
|
+
|
|
88
|
+
The bundled readiness pack retains its original v1 content and digest. Existing
|
|
89
|
+
locks, including the prior alpha.10 release fixture, can prepare and apply both
|
|
90
|
+
ordinary v2 and template v3 exact plans without first rewriting the lock.
|
|
91
|
+
Discovery Harness is the architecture name; the persisted readiness entry still
|
|
92
|
+
uses Discovery Engine. Actual external pack changes still require their own
|
|
93
|
+
adoption procedure and are not accepted by either participant.
|
|
94
|
+
|
|
95
|
+
The next release adds the responsibility workflows, source-current ingestion,
|
|
96
|
+
Trackables, governed instruction adoption and local template profiles. Template
|
|
97
|
+
adoption uses the existing exact-plan transaction engine with explicit v2 policy
|
|
98
|
+
and v3 plans; existing policies are never converted automatically. See
|
|
99
|
+
[template profiles](template-profile.md) and [template adoption](template-upgrades.md).
|
|
100
|
+
Optional advisory decisions require no provider installation or activation.
|
|
101
|
+
|
|
102
|
+
New Trackable journals retain resolved calendar occurrences and byte-bound state.
|
|
103
|
+
Legacy v1 journals remain available as chain-verified exports when state replay
|
|
104
|
+
cannot be established. Preserve historical records and use the documented
|
|
105
|
+
[Trackables](trackables.md) host limits before adopting a new profile.
|
|
106
|
+
Regenerate local graph/projection artifacts through the ordinary upgrade process
|
|
107
|
+
and qualify each consuming host independently. A package update supplies no
|
|
108
|
+
publication permission or runtime activation.
|
|
109
|
+
|
|
12
110
|
## Upgrading to 0.2.0-alpha.12
|
|
13
111
|
|
|
14
112
|
This release makes the first open of an Obsidian view automatic and ships
|
|
@@ -205,7 +303,7 @@ For registry installs, pin the exact version and record the resolved version
|
|
|
205
303
|
in the lockfile:
|
|
206
304
|
|
|
207
305
|
```bash
|
|
208
|
-
npm install --save-dev @mnstry/atelier@0.2.0-alpha.
|
|
306
|
+
npm install --save-dev @mnstry/atelier@0.2.0-alpha.14
|
|
209
307
|
npx mnstry-atelier lock write --project ./atelier.project.json
|
|
210
308
|
```
|
|
211
309
|
|
|
@@ -213,7 +311,7 @@ For Git installs, pin the release tag rather than a branch, so the lock file
|
|
|
213
311
|
records exactly what was reviewed:
|
|
214
312
|
|
|
215
313
|
```bash
|
|
216
|
-
npm install --save-dev "git+https://github.com/MNSTRY/atelier.git#v0.2.0-alpha.
|
|
314
|
+
npm install --save-dev "git+https://github.com/MNSTRY/atelier.git#v0.2.0-alpha.14"
|
|
217
315
|
npx mnstry-atelier lock write --project ./atelier.project.json
|
|
218
316
|
```
|
|
219
317
|
|
|
@@ -292,3 +390,122 @@ For the bounded, manually confirmed single-repository workflow, see
|
|
|
292
390
|
commands are separate from the legacy flag-based migration workflow above.
|
|
293
391
|
They preserve history and honor existing commit hooks; they do not install a
|
|
294
392
|
new package or activate a runtime.
|
|
393
|
+
|
|
394
|
+
## Consumer dependency closure plan
|
|
395
|
+
|
|
396
|
+
`atelier upgrade closure --npm-root ABSOLUTE_NPM_ROOT` plans a check of a staged
|
|
397
|
+
candidate's own dependency closure. A consumer does not inherit a dependency
|
|
398
|
+
publisher's npm `overrides`, so the candidate's own lockfile is what counts.
|
|
399
|
+
|
|
400
|
+
The command reads these files and no others:
|
|
401
|
+
|
|
402
|
+
- the candidate's `package.json` and `package-lock.json`;
|
|
403
|
+
- the installed `package.json` of every lockfile copy of the selected package;
|
|
404
|
+
- `package.json` in each directory above the npm root, up to the filesystem
|
|
405
|
+
root, to refuse a parent that declares workspaces. When the npm root is under
|
|
406
|
+
your home directory, that includes a `package.json` in the home directory;
|
|
407
|
+
- Atelier's own `package.json`. The CLI reads it on every run for its version;
|
|
408
|
+
this plan also takes the default package name from it when `--package` is
|
|
409
|
+
not given.
|
|
410
|
+
|
|
411
|
+
It does not run npm, use the network, read npm configuration or credentials, or
|
|
412
|
+
write anything. The directory need not be an Atelier workspace, and `--npm-root`
|
|
413
|
+
has no default.
|
|
414
|
+
|
|
415
|
+
Every run prints exactly one JSON document with `"proof": "not-run"`, including
|
|
416
|
+
a run whose arguments are refused. A completed plan holds:
|
|
417
|
+
|
|
418
|
+
- the lockfile's SHA-256, version and entry count;
|
|
419
|
+
- entries by source (`npm`, `git`, `local_path`, `link`, `bundled` and
|
|
420
|
+
`unclassified`, an installed entry with no `resolved`); the counts add up to
|
|
421
|
+
the entry count;
|
|
422
|
+
- the registry hosts the lockfile names, and separately the URL schemes (`http`,
|
|
423
|
+
`https`) it uses;
|
|
424
|
+
- the number of registry tarballs an offline proof would need;
|
|
425
|
+
- lockfile entries whose `os`, `cpu` or `libc` excludes this host;
|
|
426
|
+
- the selected package's lockfile copies, and under `manifests` the path, name,
|
|
427
|
+
version and SHA-256 of each installed manifest that was read;
|
|
428
|
+
- the selected package's exact `overrides` that were checked against every
|
|
429
|
+
installed copy, the ones with no copy, and the ones left unchecked: a
|
|
430
|
+
version-selector key, a nested override, a value that is not an exact
|
|
431
|
+
version, or a package that a link provides (`link-only`, or `linked-copy`
|
|
432
|
+
when a registry copy is installed beside the link);
|
|
433
|
+
- every refusal, with its code, one `reason`, a message and a next step.
|
|
434
|
+
|
|
435
|
+
A refused plan holds its refusals and whatever else was established. A refusal
|
|
436
|
+
of the arguments, the npm root or the shape of the lockfile stops the plan
|
|
437
|
+
there, so it holds nothing about the lockfile's entries; any other refusal is
|
|
438
|
+
listed beside the rest of the classification.
|
|
439
|
+
|
|
440
|
+
Exit code 3 means a completed plan. Exit code 2 means a refusal: the JSON
|
|
441
|
+
document, then `[code] message` with a `Next:` step on standard error. The
|
|
442
|
+
command never exits 0: a plan is not a pass, and this command does not prove an
|
|
443
|
+
offline reinstall.
|
|
444
|
+
|
|
445
|
+
Overrides are taken from the installed manifest only when it is the package the
|
|
446
|
+
lockfile records: each copy's manifest must declare the selected name and the
|
|
447
|
+
version of its own lockfile entry, and all copies must be at one version with
|
|
448
|
+
the same overrides. Otherwise the plan is refused and no override is reported
|
|
449
|
+
as checked.
|
|
450
|
+
|
|
451
|
+
Refusals reuse existing codes:
|
|
452
|
+
|
|
453
|
+
- `usage`: the input is not supported. Reasons: `npm-root-required`,
|
|
454
|
+
`npm-root-not-absolute`, `npm-root-not-directory`, `npm-root-linked` (the
|
|
455
|
+
path is a link or passes through one; the refusal prints the directory's
|
|
456
|
+
`realPath` to pass instead), `argument-unsupported` (an unknown flag, an
|
|
457
|
+
extra argument, a flag with no value, an empty `--package` or
|
|
458
|
+
`--registry-host`, or a flag given more than once; an empty value after
|
|
459
|
+
`--npm-root=` is `npm-root-required`), `manifest-missing`, `lockfile-missing`,
|
|
460
|
+
`lockfile-invalid` (not a JSON object, or a `packages` entry that is not an
|
|
461
|
+
object), `lockfile-version` (version 1, or no `packages` map), `workspaces`,
|
|
462
|
+
`prefix-mismatch` (a parent directory declares workspaces) and
|
|
463
|
+
`linked-node-modules`.
|
|
464
|
+
- `consumer-closure-incomplete`: an offline reinstall could not be proven for a
|
|
465
|
+
lockfile entry. Reasons: `missing-integrity`, `git-source`, `other-host`,
|
|
466
|
+
`outside-project`, `link-target-missing` (a link that names no folder),
|
|
467
|
+
`zero-copies`, `selected-package-unreadable`, `selected-package-mismatch`
|
|
468
|
+
(an installed manifest that is not the package its lockfile entry records)
|
|
469
|
+
and `selected-copies-differ`.
|
|
470
|
+
- `override-not-inherited`: reason `copy-off-pin`. A copy is installed at a
|
|
471
|
+
version other than the selected package's exact pin. More than one copy, all
|
|
472
|
+
at the pin, is reported and not refused.
|
|
473
|
+
|
|
474
|
+
Options:
|
|
475
|
+
|
|
476
|
+
- `--package NAME` selects the package whose overrides are checked. It defaults
|
|
477
|
+
to `@mnstry/atelier`.
|
|
478
|
+
- `--registry-host HOST[,HOST]` names the approved registry hosts. A tarball on
|
|
479
|
+
any other host, or at a URL with no readable host, is then refused. Without
|
|
480
|
+
it, hosts are reported and `approvedRegistryVerified` is `false`, because the
|
|
481
|
+
plan does not read npm configuration.
|
|
482
|
+
|
|
483
|
+
Give each option once, with a value, after the word `closure`. An option with
|
|
484
|
+
an empty value is refused; leave the option out to use its default.
|
|
485
|
+
|
|
486
|
+
Limits:
|
|
487
|
+
|
|
488
|
+
- The plan cannot run `npm prefix`, so `prefixVerified` is always `false`.
|
|
489
|
+
Instead it requires `--npm-root` to be the directory's real path and refuses
|
|
490
|
+
any parent directory of it that declares workspaces, whether or not that
|
|
491
|
+
parent's workspaces include the candidate. A path that is a link, or passes
|
|
492
|
+
through one, is refused, with its `realPath` in the JSON result. On macOS,
|
|
493
|
+
`/tmp` is a link into `/private` and `$TMPDIR` passes through `/var`, another
|
|
494
|
+
such link, so a candidate staged there needs its real path (for example
|
|
495
|
+
`pwd -P` from inside it).
|
|
496
|
+
- Containment of links and local files is checked by path, without following
|
|
497
|
+
links. The folder a link points to is not opened: an override for a package
|
|
498
|
+
that a link provides is listed as unchecked, never as checked.
|
|
499
|
+
- Approving a host does not verify the transport. A host is matched by its
|
|
500
|
+
exact name and port, whatever the scheme; `registrySchemes` counts `http`
|
|
501
|
+
and `https` separately.
|
|
502
|
+
- The manifest binding compares the name and version the installed manifest
|
|
503
|
+
declares. It does not verify the installed files against the lockfile's
|
|
504
|
+
`integrity`.
|
|
505
|
+
- Platform evidence uses this process's `os` and `cpu`; `libc` is unknown
|
|
506
|
+
unless a caller of `planConsumerClosure` supplies it.
|
|
507
|
+
- A flag with no value placed before the word `closure` (for example
|
|
508
|
+
`atelier upgrade --package closure`) takes `closure` as its value, so the
|
|
509
|
+
ordinary upgrade command runs instead of this one.
|
|
510
|
+
- `lockTreeDifferences`, the comparison of two `npm ls` trees, is in the source
|
|
511
|
+
but is not exported from the package and no command uses it.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "atelier-behavior-binding@v1",
|
|
3
|
+
"definition": {
|
|
4
|
+
"ref": "definitions/weekly-note.json",
|
|
5
|
+
"digest": "sha256:0000000000000000000000000000000000000000000000000000000000000000"
|
|
6
|
+
},
|
|
7
|
+
"fields": [
|
|
8
|
+
{
|
|
9
|
+
"pointer": "/question",
|
|
10
|
+
"classification": "implicit",
|
|
11
|
+
"required": true,
|
|
12
|
+
"consumer": {
|
|
13
|
+
"id": "reference-note",
|
|
14
|
+
"profile": "note-v1",
|
|
15
|
+
"revision": "1"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
}
|