@mnstry/atelier 0.2.0-alpha.12 → 0.2.0-alpha.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +661 -0
- package/README.md +142 -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 +269 -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 +211 -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 +238 -0
- package/docs/learning.md +215 -0
- package/docs/local-services.md +181 -16
- package/docs/obsidian-contract.md +223 -15
- package/docs/obsidian-plugin.md +38 -4
- package/docs/obsidian.md +613 -51
- package/docs/optional-ingestion.md +83 -0
- package/docs/personal-workspace.md +257 -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 +49 -0
- package/docs/repo-boundary-guard.md +94 -0
- 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 +317 -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 +47 -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 +75 -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 +59 -5
- 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 +4 -2
- package/src/boundary/delegation-command.mjs +158 -0
- package/src/boundary/delegation.mjs +396 -0
- package/src/boundary/policy.mjs +52 -10
- 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 +65 -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 +754 -63
- 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 +17 -1
- package/src/graph/knowledge-graph.mjs +58 -8
- 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 +933 -0
- package/src/ingestion/optional/graphify/json_bridge.py +163 -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 +44 -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 +385 -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/projection/obsidian/edits/apply.mjs +55 -16
- package/src/projection/obsidian/personal-workspace.mjs +436 -0
- package/src/projection/obsidian/proposals/adapter.mjs +47 -8
- package/src/projection/obsidian/proposals/observation.mjs +10 -2
- package/src/projection/obsidian/publication/publisher.mjs +142 -13
- 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/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 +163 -20
- 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 +92 -12
- package/src/runtime/obsidian/login-item.mjs +332 -0
- package/src/runtime/obsidian/machine-settings.mjs +119 -12
- package/src/runtime/obsidian/opening.mjs +171 -37
- package/src/runtime/obsidian/pipeline.mjs +71 -3
- 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/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 +99 -16
- 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 +36 -3
- 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/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/knowledge-page.mjs +1388 -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 +1 -0
- package/templates/external-project-workspace/pack-lifecycle.json +6 -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
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,666 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.0-alpha.13
|
|
4
|
+
|
|
5
|
+
- Add the public Knowledge Health workshop on the existing local Knowledge
|
|
6
|
+
host: original wording, separate interpretation and four distinct responses;
|
|
7
|
+
optional Review in a separate session; a selected-draft copy-only handoff
|
|
8
|
+
retained with its original receipt. Exact retries do not append duplicates,
|
|
9
|
+
and reopening after restart reads the same proposal. The source owner edits
|
|
10
|
+
through ordinary repository tooling and reassesses; no browser source-apply
|
|
11
|
+
endpoint is added. Include the installed workshop kit and receiving guidance.
|
|
12
|
+
- `atelier knowledge semantic` exposes the internal semantic operation runner
|
|
13
|
+
(`docs/semantic-operation.md`) as eleven operations: `begin`, `status`,
|
|
14
|
+
`reconcile`, `complete`, `proposals`, `contribution`, `relation`, `record`,
|
|
15
|
+
`cascade`, `context` and `project`. Each reads one JSON object
|
|
16
|
+
`{workspaceId, run, request}` from stdin, at most 256 KiB, in the workspace
|
|
17
|
+
`atelier ingest` uses. Each operation accepts exactly its documented request
|
|
18
|
+
fields, each of a declared kind; an unknown or missing field, a null
|
|
19
|
+
required field or a value of the wrong kind refuses as
|
|
20
|
+
`SEMANTIC_OPERATION_INVALID` before any store is opened, so nothing is
|
|
21
|
+
written. Formats such as timestamps are checked by the runner. Atelier calls no model: the host supplies its raw output, candidates
|
|
22
|
+
and usage (`null` when unknown), and interpretations stay pending until
|
|
23
|
+
receiver records, which are caller assertions, accept them. Failures print
|
|
24
|
+
`{ok:false, code, error}` with the runner's own `SEMANTIC_*` code,
|
|
25
|
+
`SEMANTIC_OPERATION_INTERRUPTED` for an uncoded error, or
|
|
26
|
+
`SEMANTIC_OPERATION_REFUSED` for Atelier's other refusals; `recorded` or
|
|
27
|
+
`captured` details are included whenever the runner attached them. No package export
|
|
28
|
+
or schema changes.
|
|
29
|
+
|
|
30
|
+
## Unreleased
|
|
31
|
+
|
|
32
|
+
- Patch the fast-uri dependency and override from 3.1.7 to 3.1.8, the patched
|
|
33
|
+
3.x release for GHSA-hrr3-gc8f-f4qj (3.1.7 is in the affected range; whether
|
|
34
|
+
Atelier's use was exploitable is not established). The direct dependency
|
|
35
|
+
keeps packed consumers on one deduplicated copy: Ajv's own `^3.0.1` range
|
|
36
|
+
resolves to it, so a bare consumer installs 3.1.8 only.
|
|
37
|
+
- Personal workspaces gain an explicit selection record, a read-only inventory of
|
|
38
|
+
the private home, and a restore of authored inputs from an earlier generation:
|
|
39
|
+
`selectPersonalGeneration`, `selectionConfirmDigest`, `readPersonalSelection`,
|
|
40
|
+
`inventoryPersonalHome`, `planPersonalRestore` and `restorePersonalInputs`. A
|
|
41
|
+
selection is a confirmed, hash-chained choice of the eligible generation. A
|
|
42
|
+
restore accepts only a plan from `planPersonalRestore`, re-checks the exact
|
|
43
|
+
current bytes, keeps them, and never widens enrollment or bindings:
|
|
44
|
+
re-admitting a withdrawn repository, a changed repository identity, or a
|
|
45
|
+
re-added binding refuses before any write. Each file is replaced by
|
|
46
|
+
compare-and-swap, so a write that replaces or recreates the file by path
|
|
47
|
+
during the restore is kept and the restore refuses; an interrupted swap
|
|
48
|
+
refuses `restore-interrupted` until the listed moved copy is put back.
|
|
49
|
+
Authored inputs, generations and records are never deleted; only temporary
|
|
50
|
+
files are removed.
|
|
51
|
+
- A private-domain repository owner can let one named operator pass the local
|
|
52
|
+
boundary actor check by signing a delegation
|
|
53
|
+
(`docs/repo-boundary-guard.md`). It covers only `atelier boundary check` and
|
|
54
|
+
the `pre-commit` path, for listed repositories, for at most 90 days. It never
|
|
55
|
+
changes ownership, audiences, paths, content rules, promotion, push-content
|
|
56
|
+
checks or publication. It applies only when all of these hold:
|
|
57
|
+
- its ed25519 signature verifies against the owner's key in the host file
|
|
58
|
+
`/etc/atelier/boundary-owner-keys.json`, owned by root in root-owned
|
|
59
|
+
directories (Windows is not supported yet);
|
|
60
|
+
- it is current and not revoked in that file;
|
|
61
|
+
- the whole boundary policy, the managed repository set and each repository's
|
|
62
|
+
root commit match what the owner signed.
|
|
63
|
+
|
|
64
|
+
It records consent for a cooperating operator; the actor check stays
|
|
65
|
+
attribution, not authentication. Delegations live in
|
|
66
|
+
`boundary-delegations.v1.json` beside the policy, under the new
|
|
67
|
+
`atelier-boundary-delegations@v1` and `atelier-boundary-owner-keys@v1`
|
|
68
|
+
contracts; the boundary policy contract is unchanged.
|
|
69
|
+
`atelier boundary delegation draft|sign|verify` prepares, signs (after
|
|
70
|
+
recomputing the bindings) and inspects them. The policy validator now accepts
|
|
71
|
+
the `contractVersion` and `ext` members its schema already declared; `ext` is
|
|
72
|
+
ignored.
|
|
73
|
+
- A capability operation that has committed no longer reports `EEXIST` ("not
|
|
74
|
+
entered") when its lock is removed or replaced while cleanup inspects it.
|
|
75
|
+
Cleanup preserves the other file and returns the operation's result. Lock
|
|
76
|
+
races in reclamation, readback and cleanup are each covered by a test.
|
|
77
|
+
- `src/judgment/practice.mjs` and `src/judgment/practice-evaluation.mjs` keep a
|
|
78
|
+
reusable decision practice inside an ordinary Knowledge contribution
|
|
79
|
+
(`docs/decision-practices.md`). They are internal: the
|
|
80
|
+
`atelier.decision-practice/v0` format is experimental, not a registered public
|
|
81
|
+
contract, and has no package export, CLI command, adoption store, scheduler or
|
|
82
|
+
model route. A definition is prepared as a captured contribution for the
|
|
83
|
+
existing Knowledge review path, and is read as adopted only from an exact
|
|
84
|
+
contribution digest with a current accepted review and activation in the
|
|
85
|
+
supplied history. `evaluateDecisionPractice` returns `proceed`, `stop`,
|
|
86
|
+
`escalate` or `refuse` with a typed reason from declared prerequisites, count
|
|
87
|
+
budgets, exact current evidence and an existing decision request and result.
|
|
88
|
+
It calls no provider, and an abstention escalates. A proceeding outcome
|
|
89
|
+
prepares an unaccepted reconsideration draft; nothing is appended, accepted or
|
|
90
|
+
activated by the module. Inputs are bounded to a portable profile, and a
|
|
91
|
+
larger history refuses `practice-input-exceeds-bounds`. The instruction
|
|
92
|
+
adoption command `atelier practice` is a separate concept.
|
|
93
|
+
`atelier architecture entry practical-judgment` lists both modules.
|
|
94
|
+
- `src/ingestion/semantic.mjs` prepares source-bound entity and assertion
|
|
95
|
+
proposals from a host's extractor output, one source per input
|
|
96
|
+
(`docs/semantic-ingestion.md`). It is an internal module: its `v0` formats are
|
|
97
|
+
not public contracts, and it has no package export or CLI command. The host
|
|
98
|
+
must already hold whole-plan read permission, which the module does not grant,
|
|
99
|
+
and chooses and runs its extractor. The module makes no provider call, durable
|
|
100
|
+
write or graph change, and claims no extraction quality. `readSemanticProposals`
|
|
101
|
+
gives a search view that rereads the cited evidence. Proposals and identity
|
|
102
|
+
mappings stay pending and carry no authority: identity, semantic acceptance and
|
|
103
|
+
activation remain separate decisions of the existing knowledge review owner, and
|
|
104
|
+
this release maps nothing into knowledge review or activation records.
|
|
105
|
+
`atelier architecture entry knowledge-stewardship` lists the module.
|
|
106
|
+
- A personal workspace bound to the Obsidian projection is served from the
|
|
107
|
+
canonical build, with the composition's link-target rule and the engine's file
|
|
108
|
+
cache. A graph is used only under a validity key the composition confirmed.
|
|
109
|
+
Its inputs are read before the composition runs. The engine, and the
|
|
110
|
+
proposal adapter it runs, compose in a worker with a two-minute deadline: at
|
|
111
|
+
load (`loadBoundProjectOffThread`), after a change, and at every full
|
|
112
|
+
reconciliation, which prepares nothing again when nothing changed. A bound
|
|
113
|
+
project is loaded once. Authored and generation files the key reads are
|
|
114
|
+
opened without following links or waiting on them. The adapter builds only
|
|
115
|
+
when it looks at a newly observed edit. The proposal adapter answers a vault edit to a private
|
|
116
|
+
note with `personal-overlay-not-proposed`, and `personal-binding-lost` now
|
|
117
|
+
names the reserved settings key.
|
|
118
|
+
|
|
119
|
+
- Evidence navigation is exported as `@mnstry/atelier/evidence-navigation`
|
|
120
|
+
(the pure contract checks and currency assessments) and
|
|
121
|
+
`@mnstry/atelier/evidence-navigation/local` (the Node local reader, kept
|
|
122
|
+
separate), with its schema at
|
|
123
|
+
`@mnstry/atelier/contracts/atelier-evidence-navigation.v1.schema.json`. The
|
|
124
|
+
schema and its fixtures join the contract corpus. There is no CLI command:
|
|
125
|
+
search and get need a host to construct the reader with its exact plan,
|
|
126
|
+
workspace and current whole-plan admission, and Atelier ships no issuer of that
|
|
127
|
+
authority.
|
|
128
|
+
- The Obsidian projection has one route for a personal workspace. A binding
|
|
129
|
+
names a private home and a generation explicitly. Every caller that builds
|
|
130
|
+
the graph (the engine, view counts, source apply, the proposal adapter and the
|
|
131
|
+
selection operation) then reads the composed graph, which composition checks
|
|
132
|
+
again at every build. The overlay's saved views become scopes, plus an
|
|
133
|
+
`everything` view. Composition refusals keep their codes, at load and at
|
|
134
|
+
every build, and no view is current under one. The engine observes the
|
|
135
|
+
person's manifest and overlay, so a generation that stops holding is refused
|
|
136
|
+
at the next tick. A copy of a bound project that lost its binding is refused.
|
|
137
|
+
`view add`, `audience` and `location` refuse on a bound project and write
|
|
138
|
+
nothing, and a vault edit to a private note is refused, never applied. A
|
|
139
|
+
theme is never written, and coverage is passed through unread. No command or
|
|
140
|
+
service binds a personal workspace yet.
|
|
141
|
+
|
|
142
|
+
- The knowledge workspace states its supported interfaces
|
|
143
|
+
(`docs/knowledge-workspace.md`).
|
|
144
|
+
- Two outputs are versioned contracts: the context packet
|
|
145
|
+
(`atelier-knowledge-context@v1`) and the evaluation report
|
|
146
|
+
(`atelier-knowledge-evaluation@v1`).
|
|
147
|
+
- The other CLI outputs, the browser routes and the sidecar's `knowledgeProject`
|
|
148
|
+
option are experimental.
|
|
149
|
+
- The workspace modules have no library export. `@mnstry/atelier/knowledge`
|
|
150
|
+
keeps its existing exports.
|
|
151
|
+
- `atelier architecture entry knowledge-stewardship` lists the workspace modules
|
|
152
|
+
and the `knowledge` command.
|
|
153
|
+
- `npm run knowledge:consumer-proof` installs a packed tarball into a clean
|
|
154
|
+
consumer and checks the documented CLI paths, writing a receipt bound to the
|
|
155
|
+
tarball SHA-256.
|
|
156
|
+
- Personal workspaces are exported as `@mnstry/atelier/personal-workspace`,
|
|
157
|
+
with their manifest and overlay schemas under `@mnstry/atelier/contracts/`. The
|
|
158
|
+
public API is these nine exports: `MANIFEST_SCHEMA`, `OVERLAY_SCHEMA`,
|
|
159
|
+
`PersonalWorkspaceRefusal`, `loadPersonalManifest`, `loadPersonalOverlay`,
|
|
160
|
+
`resolvePersonalWorkspace`, `planPersonalGeneration`,
|
|
161
|
+
`materializePersonalGeneration` and `composePersonalWorkspace`. The composition
|
|
162
|
+
is manifest-only, with enforcement `none`: filesystem access, disclosure,
|
|
163
|
+
effects and the host sandbox are reported as uncovered, and no consent or
|
|
164
|
+
effect enforcement is claimed. The manifest and overlay schemas join the
|
|
165
|
+
contract corpus.
|
|
166
|
+
|
|
167
|
+
- The ingestion store adds `getEvidence`, which returns one exact evidence span
|
|
168
|
+
after rechecking only that source and its stored attempt. Query and
|
|
169
|
+
`getEvidence` both report `readScope: "all-plan"`: they read at the scope of
|
|
170
|
+
the whole plan and grant or narrow no permission.
|
|
171
|
+
- Preserve workspace template lineage during profile adoption and updates.
|
|
172
|
+
Keep profile identity in its typed adoption manifest, and refuse saved plans
|
|
173
|
+
that replace the workspace lineage before installing any managed content.
|
|
174
|
+
- Verify exact upgrades from a real 0.2.0-alpha.12 lock as well as the
|
|
175
|
+
alpha.10 lock, and check that the upgraded lock records the installed version.
|
|
176
|
+
- A long-lived reader of verified history (learning and ingestion stores) no
|
|
177
|
+
longer wedges after one refused read; it replays from a clean copy.
|
|
178
|
+
- Ingestion reads take no lock and bind no workspace identity; only `plan`
|
|
179
|
+
binds it, so reads work during a run and a mistyped id is not recorded.
|
|
180
|
+
- Inquiry graph proposals label each file, and the proposal, with the most
|
|
181
|
+
restrictive audience of the sources whose material they carry.
|
|
182
|
+
- Coordination reports every dependency cycle regardless of record order, and a
|
|
183
|
+
superseded directive stays superseded when its replacement goes stale.
|
|
184
|
+
- Reflective and coaching acts require Reflection, an assessment and a request
|
|
185
|
+
whatever their origin.
|
|
186
|
+
- The responsibility commands print only their own refusals; Node, git and
|
|
187
|
+
parser errors go through the typed-code rule and never show paths or input.
|
|
188
|
+
|
|
189
|
+
- Preserve the bundled readiness pack's immutable v1 content and digest so
|
|
190
|
+
previous release locks can use both exact upgrade participants without a
|
|
191
|
+
separate lock rewrite. Keep Discovery Harness naming in the architecture
|
|
192
|
+
catalog; retain Discovery Engine in the persisted readiness pack. Add a
|
|
193
|
+
real alpha.10 lock fixture, plan/application regressions and digest refusal
|
|
194
|
+
controls.
|
|
195
|
+
|
|
196
|
+
- Add portable template profiles, digest-bound project bindings, staged structural
|
|
197
|
+
validation and canonical read-only presentation through installed package APIs.
|
|
198
|
+
- Add explicit local template adoption and updates through the existing exact-plan
|
|
199
|
+
upgrade engine, preserving source, local customization and adoption history.
|
|
200
|
+
- Reuse Git placement checks within synchronous ingestion read operations;
|
|
201
|
+
recheck at operation boundaries and around writes without caching source bytes
|
|
202
|
+
or integrity verdicts.
|
|
203
|
+
|
|
204
|
+
- Preserve recorded Trackable calendar resolutions across host timezone-data changes; retain verified-chain export when legacy replay cannot reconstruct state.
|
|
205
|
+
|
|
206
|
+
- Correct unchanged instruction re-adoption and preserve literal replacement text during revisions; add recovery and neighboring-slot regressions.
|
|
207
|
+
- Recover recognized dead capability operation locks without requiring an adoption journal; preserve live, uncertain and replacement owners.
|
|
208
|
+
- Add portable Trackable definitions, shared preview/runtime rules, durable scoped reference storage and correction.
|
|
209
|
+
- Add evidence-qualified Reflection, one-authority Interaction delivery, and bounded cross-repository Coordination views.
|
|
210
|
+
|
|
211
|
+
- Reconcile eight responsibility names and typed consumer bindings; preserve historical aliases.
|
|
212
|
+
- Connect durable ingestion to source-current knowledge context and graph proposals.
|
|
213
|
+
- Add situated judgment and native ADR adapters, capability feedback, and recoverable scoped instruction adoption.
|
|
214
|
+
- Include a provider-agnostic research starter and Practical Judgment operating skill.
|
|
215
|
+
|
|
216
|
+
- Add Knowledge Harness, Fabric-derived Build Harness and shared typed handoffs, with immutable local history, intake and inquiry bridges, graph activation, correction propagation and version-bound skill feedback.
|
|
217
|
+
|
|
218
|
+
- Add local Discovery and Research Harnesses with versioned inquiry records,
|
|
219
|
+
portable research handoffs, reproducible basic belief calculations, evidence
|
|
220
|
+
dependence and withdrawal checks, and reviewable graph proposals. Add separate
|
|
221
|
+
capability packages and version-bound Skill Steward feedback. Rename the
|
|
222
|
+
discovery workflow through the architecture catalog while retaining the
|
|
223
|
+
bundled readiness pack's persisted title, identifiers and digest.
|
|
224
|
+
- Add an experimental progressive local ingestion runner with exact plans,
|
|
225
|
+
bounded deterministic text/CSV/JSON extraction, immutable intake reuse,
|
|
226
|
+
resumable attempt accounting and source-verified lexical queries. Add a
|
|
227
|
+
JSON stdin CLI and structural evaluation that retains missing cases and
|
|
228
|
+
unknown costs. No model dispatch, automatic semantic acceptance or native
|
|
229
|
+
desktop admission is provided by the portable runner.
|
|
230
|
+
|
|
231
|
+
- Add a portable local learning lifecycle: Evidence, proposals, exact decisions,
|
|
232
|
+
explicit harness activation, withdrawal and retained history. Include a JSON
|
|
233
|
+
stdin CLI, private graph/export projections, bounded proposal-assistance
|
|
234
|
+
adapters and compatibility with existing skill observations. Local actor
|
|
235
|
+
assertions do not authenticate users; check artifacts remain inert and hosts
|
|
236
|
+
retain execution and access authority.
|
|
237
|
+
|
|
238
|
+
- Recompile cached JSON Schema validators when caller-owned schemas change; preserve unchanged-schema reuse and fresh compilation for non-JSON schemas.
|
|
239
|
+
|
|
240
|
+
### Added
|
|
241
|
+
|
|
242
|
+
- Add opt-in knowledge dashboards and source-bound coauthor flows, sharing private drafts between the local browser and CLI, with evidence comparison and restart recovery.
|
|
243
|
+
|
|
244
|
+
- A `knowledge-workspace` starter, mirrored `atelier-knowledge-setup` agent
|
|
245
|
+
skills, and `atelier knowledge check|context|evaluate`: question-led ontology
|
|
246
|
+
coverage, complete source context within an exact byte budget, and a lexical
|
|
247
|
+
versus graph comparison with source-digest and directed-relation checks.
|
|
248
|
+
Local operator output carries no expression or execution permission. Token
|
|
249
|
+
estimates remain distinct from measured usage and accepted work.
|
|
250
|
+
|
|
251
|
+
- `atelier enroll documents [--audience private] [--dry-run] [--json]` writes
|
|
252
|
+
a minimal `<file>.kg.json` sidecar next to every `.html`, `.pdf` and
|
|
253
|
+
`.docx` document the knowledge graph reads that has none, so an adopted
|
|
254
|
+
vault with attachments, a static website or a folder of documents can pass
|
|
255
|
+
`atelier graph` without hand-written sidecars. Each sidecar carries the
|
|
256
|
+
document's title, the domain, lifecycle and status the graph infers, the id
|
|
257
|
+
`<repo>:asset:<path>` (with a short digest when two paths fold to one id)
|
|
258
|
+
and the audience `private`. `--audience` picks another, which the
|
|
259
|
+
repository's boundary policy must allow; a refusal is typed
|
|
260
|
+
(`enroll-audience-not-allowed`) and names the allowed audiences before
|
|
261
|
+
anything is written. An existing sidecar, including one Git ignores or a
|
|
262
|
+
link with the sidecar's name, is never changed, and sources are never
|
|
263
|
+
changed. See `docs/install.md`.
|
|
264
|
+
- `atelier adopt --enroll-documents [--audience AUDIENCE]` adopts and enrolls
|
|
265
|
+
in one step, checking the audience against the policy before adoption
|
|
266
|
+
writes anything.
|
|
267
|
+
- A login item keeps a workspace's vaults fresh after you log in:
|
|
268
|
+
`atelier obsidian service unit --install [--consent-actor ID]
|
|
269
|
+
[--adapter=obsidian-cli]` installs a launchd agent on macOS
|
|
270
|
+
(`~/Library/LaunchAgents/ai.mnstry.atelier.<project>.<workspace-id>.plist`)
|
|
271
|
+
or a systemd user unit on Linux
|
|
272
|
+
(`~/.config/systemd/user/atelier-obsidian-<workspace-id>.service`), after
|
|
273
|
+
recording a consent that covers startup (`--consent-actor ID`; at a
|
|
274
|
+
terminal, the actor already recorded or else the account's name). A
|
|
275
|
+
service of an earlier release still running is stopped just before the
|
|
276
|
+
unit is loaded, so the unit's first start runs the installed release.
|
|
277
|
+
`service unit --remove` lowers the consent to the service alone, removes
|
|
278
|
+
the item and starts the service again at once for this session only;
|
|
279
|
+
`service unit --print` shows what `--install` writes. The answer is
|
|
280
|
+
remembered as the machine settings' `loginItem` decision (`on`, `off`), and
|
|
281
|
+
`atelier obsidian settings` names these commands as the way to change it. The unit runs the package installed in the project,
|
|
282
|
+
by its path, with the Node that installed it (its real path), the search
|
|
283
|
+
path you had (absolute, non-temporary entries), in `/`, and names the data
|
|
284
|
+
root the workspace was resolved under and the workspace
|
|
285
|
+
(`--data-root`, `--workspace-id`), so the service at login finds that
|
|
286
|
+
workspace whatever its manager's environment carries, and records a refusal
|
|
287
|
+
there when the project no longer leads to it. launchd: `Standard`
|
|
288
|
+
process type, `RunAtLoad`, `KeepAlive` `SuccessfulExit` false,
|
|
289
|
+
`ThrottleInterval` 60, `ExitTimeOut` 60, output to
|
|
290
|
+
`state/service/login-item.log`. From `npx` without a package installed in
|
|
291
|
+
the project it refuses (`login-item-needs-installed-package`); Windows is not
|
|
292
|
+
offered (`startup-platform-unqualified`); without a user systemd the answer
|
|
293
|
+
is `login-item-unavailable`. The installed item is recorded in
|
|
294
|
+
`state/service/login-item.json` (`atelier-obsidian-login-item/v1`).
|
|
295
|
+
- Once a login item is installed, `service start`, `open` and the replacement
|
|
296
|
+
of an outdated service start the service through launchd or systemd
|
|
297
|
+
(`kickstart -p`, `systemctl --user start`) instead of as a child, and accept
|
|
298
|
+
the service that proves itself with the entry the item runs. A unit that
|
|
299
|
+
differs from what would be written now is written again and reloaded, and
|
|
300
|
+
`open` says `login item refreshed`. An item switched off in System Settings
|
|
301
|
+
or with `systemctl --user disable` is not forced: it is neither written
|
|
302
|
+
again nor started through its manager, and the service is started for that
|
|
303
|
+
command only.
|
|
304
|
+
- A service started by a login item (`--startup`) keeps its own bounded
|
|
305
|
+
`service.log`, exits 0 on a refusal as well, so it is not restarted every
|
|
306
|
+
minute, and records how its start ended in `state/service/last-startup.json`
|
|
307
|
+
(`atelier-obsidian-last-startup/v1`); `status` shows the login item and
|
|
308
|
+
`the login item did not start the service: <code>` with the next step. After
|
|
309
|
+
each tick it compares its package on disk with the release it started with
|
|
310
|
+
(file status first, then a digest of `src/`, `contracts/` and `plugins/`
|
|
311
|
+
and the version) and exits 75 after the tick when it changed, which its
|
|
312
|
+
manager restarts on the new release.
|
|
313
|
+
- `atelier obsidian uninstall` removes the login item and stops the proven
|
|
314
|
+
service, and starts nothing. Vaults, private state, the project file and
|
|
315
|
+
Obsidian's vault list are kept, and it prints where each is.
|
|
316
|
+
- `readReleaseIdentity({ root })` reads a package's release identity now,
|
|
317
|
+
uncached; `releaseIdentity()` stays its cached form.
|
|
318
|
+
- The production service manager refuses under the Node test runner
|
|
319
|
+
(`real-login-item-under-test`) and when HOME is not the account's own home
|
|
320
|
+
directory (`login-item-home-mismatch`), since launchd and systemd register a
|
|
321
|
+
unit in the account's real session whatever HOME says.
|
|
322
|
+
- `atelier obsidian open` gets through the Obsidian states it used to stop
|
|
323
|
+
at. For an Obsidian that is installed and never started (no
|
|
324
|
+
`obsidian.json`), and only while the process table shows that no Obsidian
|
|
325
|
+
runs, it creates the settings file with the view's vault flagged open and
|
|
326
|
+
the command line on, exclusively (a file the app wrote first is kept), in a
|
|
327
|
+
settings folder made private to you when it is missing; Obsidian then opens
|
|
328
|
+
the vault at a plain start (`registration.how: created-settings`). Whenever
|
|
329
|
+
it writes Obsidian's vault list with the app quit, it also turns the
|
|
330
|
+
command line on (`cli: true`) in the same guarded write, with the backup of
|
|
331
|
+
the file as it was; a listed vault whose switch is off is written for the
|
|
332
|
+
switch alone. With `--restart-obsidian`, a running Obsidian that cannot be
|
|
333
|
+
reached (its command line off, or no vault open and the view's vault not in
|
|
334
|
+
its list) is quit with SIGTERM to its proven main process only, the vault
|
|
335
|
+
and the switch are written once it has gone, and it is started again
|
|
336
|
+
plainly, reopening the vaults it had open (macOS only). Without the flag,
|
|
337
|
+
those states answer `app-cli-unavailable` / `cli-turned-off` and
|
|
338
|
+
`app-version-unsupported` / `no-vault-open`, naming it. The flag is never
|
|
339
|
+
implied and every other operation refuses it. Every write and the restart
|
|
340
|
+
are shown in the answer (`obsidianSettings`, `restart`). Before any signal,
|
|
341
|
+
`open` checks, reading only, that the write can succeed (otherwise it
|
|
342
|
+
answers that refusal and leaves Obsidian running; an Obsidian at its
|
|
343
|
+
starter window with no `obsidian.json` yet is the create case) and, right
|
|
344
|
+
before the first signal, keeps a copy of `obsidian.json` that the same
|
|
345
|
+
run's write does not prune. On macOS the main process can stay after the first
|
|
346
|
+
SIGTERM, with its windows closed; Electron handles only the first SIGTERM as
|
|
347
|
+
a quit, and a second one ends the process at once, without its quit
|
|
348
|
+
handlers. `open` sends that second one only when the same process has
|
|
349
|
+
stayed alone, with no window or helper, at two readings at least 5 seconds
|
|
350
|
+
apart; never a third, and never another kind. `atelier obsidian --help` names every option of the
|
|
351
|
+
command, `--wait-ms` included. See "What `open` does in each state of
|
|
352
|
+
Obsidian" in `docs/obsidian.md` and "Obsidian's vault list" in
|
|
353
|
+
`docs/obsidian-contract.md`.
|
|
354
|
+
- Views can be declared without editing JSON:
|
|
355
|
+
`atelier obsidian view add ID (--all | --folder PATH [--folder PATH ...] [--repo R] | --tag T) [--expand DEPTH:MAX] [--default]`
|
|
356
|
+
adds a view to `atelier.project.json` (and `.atelier-local/` to
|
|
357
|
+
`.gitignore` when that folder is not ignored), and never commits. It shows
|
|
358
|
+
the change as a diff and how many notes the view would show on this machine,
|
|
359
|
+
with how many of the notes it selects are withheld for carrying no
|
|
360
|
+
classification or an audience that is not admitted. A view that would show
|
|
361
|
+
no note is refused with `view-would-be-empty` unless `--allow-empty`. A
|
|
362
|
+
person at a terminal is asked before anything is written (`--yes` answers
|
|
363
|
+
beforehand; no answer within 10 minutes writes nothing); for anyone else the
|
|
364
|
+
command is the consent. The file is rewritten only when it is in the form
|
|
365
|
+
Atelier writes JSON in, so the change is the view and nothing else
|
|
366
|
+
(`project-config-format-unknown` names the member to add by hand
|
|
367
|
+
otherwise), atomically, keeping its mode, and only over the bytes it read
|
|
368
|
+
(`project-config-changed`). A file that is not UTF-8 is never rewritten
|
|
369
|
+
(`gitignore-not-utf8`, or `project-config-format-unknown`). Every new text
|
|
370
|
+
is written and synced to disk before any file is replaced; a failure after
|
|
371
|
+
that says which files changed (`project-files-partly-written`), and no
|
|
372
|
+
temporary file is left beside them. The first view is the default. `view list` and
|
|
373
|
+
`view show ID` are `scope list` and `scope show ID`.
|
|
374
|
+
|
|
375
|
+
### Changed
|
|
376
|
+
|
|
377
|
+
- Where a workspace's vaults live can be decided, and a visible folder can
|
|
378
|
+
hold them: `atelier obsidian location set DIR` (`~/Atelier`, say) records
|
|
379
|
+
the `location` decision. Each view not published yet is then given its own
|
|
380
|
+
folder there at its first publication, `<project> (<view>)`, which is also
|
|
381
|
+
the vault's name in Obsidian (`harbor-notes (everything)`; a number inside the
|
|
382
|
+
parentheses when that name is taken on the disk or by a vault the app lists).
|
|
383
|
+
The folder is created exclusively and private to this user, and its
|
|
384
|
+
allocation is recorded once in the workspace's private state
|
|
385
|
+
(`atelier-obsidian-vault-allocation/v1`, `state/allocations/<view>.json`,
|
|
386
|
+
with the folder's real path, device and inode, which the maintenance service
|
|
387
|
+
checks at every tick and the publisher before it writes, before each note
|
|
388
|
+
and before its commit: another folder put
|
|
389
|
+
where the one made was is not published into, `vault-allocation-replaced`,
|
|
390
|
+
nor is the same folder reached through a link put on the way since,
|
|
391
|
+
`vault-allocation-moved`; on Linux a folder made after the original was
|
|
392
|
+
removed can be given its inode number, see Known limits in
|
|
393
|
+
`docs/obsidian.md`. A folder that has gone is made again by the next tick,
|
|
394
|
+
only where its recorded real path leads and only where a location would be
|
|
395
|
+
accepted: never inside a repository, the project, the private state, a vault
|
|
396
|
+
Atelier publishes or one the app lists; a vault removed, moved or replaced
|
|
397
|
+
while it was being published stops that publication (`vault-root-moved` for
|
|
398
|
+
a vault under the data root), and the running service, without a restart,
|
|
399
|
+
publishes into it again once it is put back or made again: at once, or, for
|
|
400
|
+
a folder made again after a publication stopped just before its commit, at
|
|
401
|
+
the next change at its sources (`vault-note-missing` until then). A published view whose vault cannot
|
|
402
|
+
be found (its record was lost, or a view published under the data root lost
|
|
403
|
+
its `vaults/<view>` folder, which was made again before) is refused,
|
|
404
|
+
`vault-allocation-lost`, never published again into a new, empty vault;
|
|
405
|
+
`status` and `open` name the way back),
|
|
406
|
+
which the recovery store reads: the engine, source apply, the proposal
|
|
407
|
+
adapter, `open` and the plugin's service paths (its hello, the person's
|
|
408
|
+
choice to turn it off, drift) all find the same vault. So does
|
|
409
|
+
`viewVaultRoot` of `@mnstry/atelier/obsidian`, which answers the allocated
|
|
410
|
+
folder now, and may refuse, typed (a record that cannot be read, or was
|
|
411
|
+
lost); pass the workspace id as its third argument: without it the name of
|
|
412
|
+
the workspace's private-state folder is taken as the id, as before, and a
|
|
413
|
+
record that does not match it is refused. A vault published before stays
|
|
414
|
+
under the data root, and a workspace that decides nothing publishes there as
|
|
415
|
+
before. A folder inside a repository or the project, inside a vault Atelier
|
|
416
|
+
publishes or one the app lists, or on another volume than the data root is
|
|
417
|
+
refused, through links and in any letter case; a synced one needs
|
|
418
|
+
`--allow-synced-location`; a macOS-protected one is warned about. The app's
|
|
419
|
+
list is read through the app when it answers, else from its settings file;
|
|
420
|
+
while it cannot be read, no folder is allocated (`app-vault-list-unreadable`,
|
|
421
|
+
tried again at the next tick). A view whose folder cannot be allocated is not published
|
|
422
|
+
and its freshness says why, while the other views go on: a folder that
|
|
423
|
+
cannot be made (`vault-location-unusable`: a file in the way, no
|
|
424
|
+
permission), one inside Atelier's private state
|
|
425
|
+
(`vault-location-inside-private-state`, refused by `location set` too), an
|
|
426
|
+
allocation record that cannot be read or names a folder inside a
|
|
427
|
+
repository, each stops its own view only. `location show`
|
|
428
|
+
and `status` (`scopes[].vault`) say where each view's vault is, or why it
|
|
429
|
+
cannot be read. Consent to a synced folder is not recorded, so it is not
|
|
430
|
+
checked again when a folder is allocated or made again; a link on the way is
|
|
431
|
+
followed only at a view's first allocation (Known limits).
|
|
432
|
+
- A vault that is only yours shows the notes that carry no classification:
|
|
433
|
+
`atelier obsidian audience set me` now records `unclassified: shown` with
|
|
434
|
+
"only you", and every path that builds a view (the engine, source apply,
|
|
435
|
+
the proposal adapter, `selection`) admits them through one rule,
|
|
436
|
+
`eligibilityFor`. A list of audiences never shows them, even one that names
|
|
437
|
+
every audience "only you" stands for. Such a note is shown only when its
|
|
438
|
+
bytes read as a note the way the emitter reads every note, so a file that
|
|
439
|
+
cannot be published stays withheld instead of stopping the vault. Deciding
|
|
440
|
+
it changes the eligibility revision, so every view is rebuilt at the next
|
|
441
|
+
tick. A decision recorded as "only you" with them withheld keeps them
|
|
442
|
+
withheld until `audience set me` is run again. `view add` counts what a
|
|
443
|
+
view would show the same way, as "only you" while nobody decided. Since
|
|
444
|
+
the maintenance service publishes no note until someone decides who may
|
|
445
|
+
see, `view add` then names `atelier obsidian audience set me` as the next
|
|
446
|
+
step, before `open`; and a view refused as empty because no audience is
|
|
447
|
+
admitted (`audience clear`) is told to decide who may see, not to classify
|
|
448
|
+
notes. A note whose labels cannot be known is never shown: front matter
|
|
449
|
+
Atelier cannot read, or a top-level `kg` key that is not a block, may say
|
|
450
|
+
`sensitive`.
|
|
451
|
+
- A view's first publication into its allocated folder no longer waits for an
|
|
452
|
+
Obsidian that runs and cannot be coordinated with (a vault open, its command
|
|
453
|
+
line off, no vault open, or a version below the floor). While the app's own
|
|
454
|
+
settings file names neither the folder, a folder above it nor one inside it
|
|
455
|
+
(read, not guessed: a missing or unreadable file, an entry with a `..`
|
|
456
|
+
segment, or a Flatpak or snap build, gives no such evidence), the publisher fills the vault in its own process by
|
|
457
|
+
creating files only (journal `mode: 'direct-unheld'`). Anything that would
|
|
458
|
+
replace or remove a file, or write a settings file over one that is there,
|
|
459
|
+
refuses as `editor-uncoordinated` and writes nothing. The evidence is read
|
|
460
|
+
again before the first file and every two seconds, and once it is gone
|
|
461
|
+
nothing more is written or committed. A run that completes is committed
|
|
462
|
+
before `open` adds the vault to Obsidian and opens it. A run that stops
|
|
463
|
+
partway commits nothing: the list names the folder meanwhile, a settings
|
|
464
|
+
file with other bytes is already there, or an interrupted run left a
|
|
465
|
+
replacement or a removal. The view then falls back to the coordinated path,
|
|
466
|
+
so `open` may add the vault to Obsidian and open it before it is complete,
|
|
467
|
+
and the rest, every replacement and removal included, is published through
|
|
468
|
+
the app with its usual checks. While the app does not qualify, a run stopped
|
|
469
|
+
that way reports the app's own refusal (`app-cli-unavailable`, say), and
|
|
470
|
+
`open` answers it without adding the vault unless asked to restart
|
|
471
|
+
Obsidian; with the app running and no vault open, a vault the app already
|
|
472
|
+
lists is still opened by its path, as before. The plugin's entry written this way counts as offered until the
|
|
473
|
+
plugin says hello. A later generation, a vault under the data root, and
|
|
474
|
+
every other case publish and refuse as before.
|
|
475
|
+
- The Obsidian machine settings of a workspace remember what a person decided
|
|
476
|
+
once, so no later run has to ask again or be told again: who may see the
|
|
477
|
+
vaults, where they live, whether maintenance starts at login, and that the
|
|
478
|
+
installed app may be reached. The document is now
|
|
479
|
+
`atelier-obsidian-machine-settings/v2`, with a closed `decisions` member,
|
|
480
|
+
one entry per decision (`audience`, `location`, `loginItem`, `adapter`),
|
|
481
|
+
each null until decided and otherwise stamped with when, by whom when known,
|
|
482
|
+
and how (`question`, `command`, `defaults`, `v1`). The audience decision
|
|
483
|
+
also says whether notes that carry no classification are `shown` or
|
|
484
|
+
`withheld`: only an "only you" decision may show them, and every decision
|
|
485
|
+
made today withholds them. A v1 document is read as the v2 document it
|
|
486
|
+
stands for and stays v1 on disk until the next write, which writes v2; an
|
|
487
|
+
audience list set before is carried over as that person's decision, with
|
|
488
|
+
unclassified notes withheld as they were. A release up to 0.2.0-alpha.12 refuses a v2 document
|
|
489
|
+
(`invalid-machine-settings`), so after an upgrade a maintenance service
|
|
490
|
+
still running the earlier release fails its ticks until it is replaced:
|
|
491
|
+
`atelier obsidian open` and `service start` replace it. `atelier obsidian settings` shows what is remembered and
|
|
492
|
+
how each answer is changed; `status` carries the decisions and a one-line
|
|
493
|
+
summary.
|
|
494
|
+
- `--adapter=obsidian-cli` is needed once per workspace. Given to `open` or
|
|
495
|
+
`service start` of an enabled project, it is remembered before anything
|
|
496
|
+
starts, and later runs of the real command-line entry reach the app without
|
|
497
|
+
it (`service unit --print` too). A remembered adapter is never used under
|
|
498
|
+
the Node test runner (`remembered-adapter-under-test`), and never by a
|
|
499
|
+
caller that passes its own seams; the decision is one pure rule,
|
|
500
|
+
`selectAdapter`.
|
|
501
|
+
- The first start of the maintenance service records who allowed it: still
|
|
502
|
+
`--consent-actor ID`, or now, for a person at a terminal, the name of the
|
|
503
|
+
account the command runs as, which the command says it recorded. A person
|
|
504
|
+
is at a terminal when standard input and output are both terminals and
|
|
505
|
+
nothing says otherwise: `--json`, the new `--no-input`, a `CI` environment
|
|
506
|
+
or `ATELIER_NONINTERACTIVE=1` mean nobody is (`isInteractive`). A consent
|
|
507
|
+
recorded already is never replaced by a derived one, and a program still
|
|
508
|
+
names its actor.
|
|
509
|
+
- `atelier obsidian audience set me` admits "only you": every audience of a
|
|
510
|
+
note (`public`, `team`, `operator`, `staff`, `private`) except `sensitive`,
|
|
511
|
+
which a vault takes only when it is named (`audience set me,sensitive`).
|
|
512
|
+
Any other list is the person's own; either is remembered as their decision.
|
|
513
|
+
Notes without a classification are still withheld from every vault,
|
|
514
|
+
"only you" included; a later change lets an "only you" vault show them.
|
|
515
|
+
|
|
516
|
+
- `setup.include` and `setup.exclude` in `atelier.project.json` now scope
|
|
517
|
+
what the knowledge graph reads. `adopt --include` and `--exclude` recorded
|
|
518
|
+
them, and the `monorepo` profile required `--include`, but nothing read
|
|
519
|
+
them, so a tracked build folder could not be left out and every tracked
|
|
520
|
+
page needed a sidecar. Each is a path pattern relative to the project
|
|
521
|
+
config's folder, in the boundary policy's `forbiddenPaths` dialect; a path
|
|
522
|
+
outside the scope is treated exactly like a Git-ignored one, and a sidecar
|
|
523
|
+
follows its source. A project that already sets either field gets a graph
|
|
524
|
+
over that scope from this release: run `atelier graph` and commit the
|
|
525
|
+
result. Both values must now be relative (the contract's `pathString`), and
|
|
526
|
+
`adopt` no longer writes them as `null`. The decision is recorded in
|
|
527
|
+
`docs/install.md`.
|
|
528
|
+
- `atelier graph` ends its error list with a `Next:` line naming
|
|
529
|
+
`atelier enroll documents` when a document has no sidecar.
|
|
530
|
+
- `service unit --print` prints the unit `--install` writes: on macOS under
|
|
531
|
+
the label `ai.mnstry.atelier.<project>.<workspace-id>`, with process type
|
|
532
|
+
`Standard` instead of `Background`, the search path, `WorkingDirectory` `/`
|
|
533
|
+
and output to `login-item.log` instead of `service.log`; on Linux with
|
|
534
|
+
`Environment="PATH=…"`, `WorkingDirectory=/` and `TimeoutStopSec=60`.
|
|
535
|
+
`buildStartupAdapter` takes `searchPath`, and its working directory is `/`
|
|
536
|
+
unless one is given. A service records the path it was started by beside its
|
|
537
|
+
real path (`executable.ext.invokedAs`), and the busy proof accepts a process
|
|
538
|
+
table that names the entry through it.
|
|
539
|
+
- Whether a running maintenance service is of an earlier, the same or a
|
|
540
|
+
later release is measured against the entry that would be started: its
|
|
541
|
+
digest and the release of the package that entry's path names, read now.
|
|
542
|
+
With a login item that is the project's own package, whatever package the
|
|
543
|
+
command runs from, and a re-pointed link or `file:` install is read where
|
|
544
|
+
it leads.
|
|
545
|
+
|
|
546
|
+
### Fixed
|
|
547
|
+
|
|
548
|
+
- `atelier obsidian open` with a view the maintenance service did not publish
|
|
549
|
+
because Obsidian's command line is off now answers `app-cli-unavailable` /
|
|
550
|
+
`cli-turned-off` with its next step, instead of the view's own
|
|
551
|
+
`not-prepared` or `stale-readable`: such a view counts as one the app kept
|
|
552
|
+
from publication, which `open` publishes once the app holds the vault.
|
|
553
|
+
- `atelier obsidian service start` replaces a maintenance service of an
|
|
554
|
+
earlier release still running after an upgrade, as `open` does (stopped
|
|
555
|
+
through its own listener, the installed release started under the consent
|
|
556
|
+
already recorded, `replaced: 'outdated'`), instead of answering that it is
|
|
557
|
+
already running while that service fails every tick on the new machine
|
|
558
|
+
settings. A service of a later release is left running (`release:
|
|
559
|
+
'later'`).
|
|
560
|
+
- `atelier obsidian open` no longer answers `app-cli-unavailable` /
|
|
561
|
+
`vault-open-cli-silent` on the first silent round after it launched the
|
|
562
|
+
vault. A version only Atelier's plugin gave, with no answer for the vault,
|
|
563
|
+
now has to be seen in two rounds in a row: one version call that timed out
|
|
564
|
+
while Obsidian was busy opening its window made `open` report a command
|
|
565
|
+
line that was only slow as switched off. A wait that ends right after one
|
|
566
|
+
such round still gives that answer, not `launch-failed`.
|
|
567
|
+
- A view kept `current` while a plugin file it pins waits for Obsidian (a
|
|
568
|
+
drifted `data.json`, say, while the app cannot be coordinated with) now
|
|
569
|
+
says so. Its reason is `verified-by-read-back-plugin-waits-for-app`
|
|
570
|
+
instead of the `verified-by-read-back` of a view whose plugin files are all
|
|
571
|
+
there, and `status` and `open` add `plugin files wait for the app` to the
|
|
572
|
+
plugin line, with a next step (`files: "waits-for-app"` and `next` on
|
|
573
|
+
`plugin` in `--json`). A drift that publishing would only leave for the
|
|
574
|
+
person again (the data file of a vault root that is a link or not private,
|
|
575
|
+
a folder where a file goes) is no longer a reason to publish a committed
|
|
576
|
+
generation again, so it never waits for the app and never gets that
|
|
577
|
+
reason; the path is left as it is (nothing names it in `status` yet, and
|
|
578
|
+
the plugin shows as not present).
|
|
579
|
+
- A view held because a plugin file (`plugin-file-changed`) or a settings
|
|
580
|
+
file (`settings-changed`) changed while it was published, by another
|
|
581
|
+
program or by the person, is still `publisher-conflict`, but its next step
|
|
582
|
+
no longer tells the person to close another publisher: it names the file
|
|
583
|
+
that stopped the publication and says that the view is retried
|
|
584
|
+
automatically.
|
|
585
|
+
- A plugin-file drift that publishing cannot repair (the data file of a vault
|
|
586
|
+
root that is a link, say) was published twice whenever the maintenance
|
|
587
|
+
service started: once by the start's own tick and once more when the
|
|
588
|
+
service first compared the plugin files with the disk, or when that tick's
|
|
589
|
+
publication changed the pinned files. What that publication could not
|
|
590
|
+
change (a file as pinned, or one that holds what it held before the tick
|
|
591
|
+
under the same pin and vault root) is now taken as seen, and such a drift
|
|
592
|
+
is no longer a reason to publish a committed generation again, so asking
|
|
593
|
+
about it at most once more writes no vault file. A plugin file another
|
|
594
|
+
writer removes or changes after the publication, even during the same tick
|
|
595
|
+
(brought back to its old bytes after a publication that changed its pin,
|
|
596
|
+
say), unless it holds again what it held before the tick under the same
|
|
597
|
+
pin and vault root, and a path the person repairs before the tick ends,
|
|
598
|
+
are still written at the next tick.
|
|
599
|
+
- `atelier obsidian open` with Obsidian quit and the view's vault already in
|
|
600
|
+
Obsidian's list but closed: Obsidian started plainly does not reopen such a
|
|
601
|
+
vault, so a link it refused just after starting left `open` to wait and
|
|
602
|
+
answer `launch-failed` / `app-did-not-answer-for-this-vault`. `open` now
|
|
603
|
+
hands the link once more to the Obsidian that now runs, through its
|
|
604
|
+
command-line tool only (never the operating system, since this `open`
|
|
605
|
+
started it), before it answers that. A vault the list flags open is not
|
|
606
|
+
asked twice.
|
|
607
|
+
- `atelier obsidian --help` lists `plugin show | on` and `policy digest`, which
|
|
608
|
+
0.2.0-alpha.12 ships but left out of that help (the operations themselves
|
|
609
|
+
worked, and `atelier obsidian help` showed them). A test now fails when a
|
|
610
|
+
built-in obsidian operation is missing from it.
|
|
611
|
+
- The project readiness artifact (`atelier-output/atelier-readiness.json` by
|
|
612
|
+
default) records `graph.path`, `projection.outputRoot` and
|
|
613
|
+
`projection.entry` relative to the project configuration directory, in POSIX
|
|
614
|
+
form, instead of as absolute paths. `atelier readiness --check` and
|
|
615
|
+
`atelier generated check` now accept an artifact written in another checkout
|
|
616
|
+
of the same project, and the artifact no longer names the machine's
|
|
617
|
+
directories (which could include the account name). An exact upgrade
|
|
618
|
+
candidate's readiness bytes now match what `atelier readiness` regenerates
|
|
619
|
+
there; before, when the path to the candidate passed through a symlink (as
|
|
620
|
+
macOS temporary directories do), the check reported the new candidate
|
|
621
|
+
stale. `atelier upgrade explain` no longer warns that readiness bytes can
|
|
622
|
+
contain absolute host paths. An artifact written by an earlier version is
|
|
623
|
+
reported stale once; run `atelier readiness` to rewrite it and review the
|
|
624
|
+
difference.
|
|
625
|
+
- `atelier dev` run before `atelier build` (straight after `atelier init`,
|
|
626
|
+
for example) printed Node's raw `[ENOENT] ... lstat '<absolute path>'`
|
|
627
|
+
with no next step, and after `atelier graph` alone a redacted
|
|
628
|
+
`[internal-error]`. Both are now `projection-output-missing`, naming the
|
|
629
|
+
output folder relative to the project config (never as an absolute path)
|
|
630
|
+
and the next step: run `atelier graph`, then `atelier build`, with the same
|
|
631
|
+
`--project` path. `atelier dev --help` (and `server --help`) now documents
|
|
632
|
+
`--port=PORT`, the `PORT` variable, the 8137 default, and `--review`.
|
|
633
|
+
- The CLI printed any error that carried a string code verbatim, so Node's own
|
|
634
|
+
errors (`ENOENT`, `EACCES`, `ERR_*`) reached the terminal with the absolute
|
|
635
|
+
path Node puts in their message, no next step, and exit 2. Only Atelier's
|
|
636
|
+
typed codes (lowercase words joined by hyphens) are now printed verbatim.
|
|
637
|
+
Any other error is `[internal-error]` with exit 1, naming only Node's code
|
|
638
|
+
and system call, for example `(ENOENT from lstat)`. `ATELIER_DEBUG=1` still
|
|
639
|
+
prints the full error.
|
|
640
|
+
- Obsidian source apply could reject with an untyped `ELEAFCHANGED` error. This
|
|
641
|
+
happened when another program renamed a new file over the source while the
|
|
642
|
+
published note was being prepared again, between the look at the path and its
|
|
643
|
+
open. That is a source being written: the apply now refuses `stale-source`
|
|
644
|
+
(cause `changed-while-reading`) and writes nothing. A preparation that fails
|
|
645
|
+
for any tolerated reason is no longer kept for its scope and generation; only
|
|
646
|
+
one that succeeded is reused.
|
|
647
|
+
- Obsidian source apply answers three more races with another program typed.
|
|
648
|
+
An enrolled source removed while apply builds the graph used to reject with
|
|
649
|
+
an untyped `ENOENT`; it now refuses `corpus-unreadable`, with the system code
|
|
650
|
+
as the cause, and writes nothing. When a publication replaced the pointer to
|
|
651
|
+
the current manifest during an apply, the read used to reject with an untyped
|
|
652
|
+
`ELEAFCHANGED`. The pointer is now read again, up to five times, and one that
|
|
653
|
+
keeps changing refuses `manifest-unavailable` (cause `changed-while-reading`).
|
|
654
|
+
A source replaced while the published note is prepared again now leads to a
|
|
655
|
+
fresh preparation, up to three in all. If the source was saved with the same
|
|
656
|
+
bytes, or another source of the scope was replaced, the edit applies instead
|
|
657
|
+
of refusing `published-note-unavailable`. Observation of pending edits on a
|
|
658
|
+
tick had the same gap: a source replaced while its note was prepared again
|
|
659
|
+
raised an untyped `ELEAFCHANGED` from the tick. It now refuses that edit
|
|
660
|
+
`stale-source` when its own source bytes changed, and otherwise refuses
|
|
661
|
+
`published-note-unavailable`. The failed preparation is no longer kept, so the
|
|
662
|
+
other edits of that generation in the tick are still observed.
|
|
663
|
+
|
|
3
664
|
## 0.2.0-alpha.12
|
|
4
665
|
|
|
5
666
|
### Added
|