@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
|
@@ -35,6 +35,11 @@ Portable shapes refuse absolute paths. `atelier-project-config.v1` is
|
|
|
35
35
|
unchanged: extension settings are validated by their own schema, and an
|
|
36
36
|
unknown extension key refuses in the adapter, not in the project validator.
|
|
37
37
|
|
|
38
|
+
The `ext-settings` key `ext["mnstry.atelier.personal-workspace"]` is reserved.
|
|
39
|
+
Only a personal-workspace binding sets it, in memory, to name its generation.
|
|
40
|
+
A project whose settings declare it without a binding is refused at every
|
|
41
|
+
build with `personal-binding-lost`.
|
|
42
|
+
|
|
38
43
|
## Selection
|
|
39
44
|
|
|
40
45
|
`selectScope({ canonicalSnapshot, profile, selector, expansion })` is the only
|
|
@@ -47,6 +52,31 @@ proceeds in canonical-identity order and reports truncation. Relation types are
|
|
|
47
52
|
`contradicts`, `belongs_to` and the derived `links_to`. Literal oracles and
|
|
48
53
|
refusals live in `fixtures/obsidian/contracts/oracles/scope-cases.json`.
|
|
49
54
|
|
|
55
|
+
### Which notes are eligible
|
|
56
|
+
|
|
57
|
+
The eligibility a view is built with is decided by the machine settings of
|
|
58
|
+
the workspace (`eligibilityFor` in `src/runtime/obsidian/pipeline.mjs`), and
|
|
59
|
+
the engine, source apply, the proposal adapter and the selection operation
|
|
60
|
+
all ask it, so they agree on what a view holds. By default
|
|
61
|
+
(`DEFAULT_ELIGIBILITY`, revision
|
|
62
|
+
`classified-documents/v2+assets-embedded-by-eligible-documents/v1`) a node is
|
|
63
|
+
eligible only when the census classified it. When the audience decision is
|
|
64
|
+
`only-you` with `unclassified: shown`, and only then, an unclassified note is
|
|
65
|
+
eligible too, provided its bytes pass the byte lens the emitter reads notes
|
|
66
|
+
with, and it has no front matter or front matter whose every top-level line
|
|
67
|
+
starts at column 0 with a plain `key:` (an ASCII letter or `_`, then ASCII
|
|
68
|
+
letters, digits, `_` and `-`), none of them `kg`, with indented lines only as
|
|
69
|
+
the values of such keys, and in which the graph's own reading finds no `kg`
|
|
70
|
+
key either. A quoted key, a flow or JSON mapping, a complex key, a top-level
|
|
71
|
+
list, an indented root mapping or front matter the graph could not read keeps
|
|
72
|
+
it withheld, since it may carry a `kg.audience` such as `sensitive`
|
|
73
|
+
(`onlyYouEligibility`, revision
|
|
74
|
+
`classified-documents/v2+unclassified-notes-read-as-notes-for-only-you/v4+assets-embedded-by-eligible-documents/v1`).
|
|
75
|
+
An unclassified note carries the `private` audience, which "only you" admits.
|
|
76
|
+
An admitted note is an ordinary member of the view for the redaction guard:
|
|
77
|
+
its identity may appear in generated bytes of that view, and stays forbidden
|
|
78
|
+
in every view it is not part of. Assets follow the documents that embed them.
|
|
79
|
+
|
|
50
80
|
### What redaction covers
|
|
51
81
|
|
|
52
82
|
The guarantee: Atelier never generates a reference to a note outside the
|
|
@@ -635,6 +665,29 @@ again, so bytes that drift under an unchanged pinned digest are not seen by
|
|
|
635
665
|
describes, and the next observation by digest sees the drift. A note whose pin
|
|
636
666
|
changed is read and verified against the pin as always.
|
|
637
667
|
|
|
668
|
+
The maintenance engine prepares a view cooperatively (the
|
|
669
|
+
`prepareViewCooperatively` production seam): it waits between notes so that
|
|
670
|
+
the service keeps answering. The bound above holds there too. After a
|
|
671
|
+
cooperative preparation, and again while the publisher holds its locks,
|
|
672
|
+
before the journal entry that says the publication settled and before the
|
|
673
|
+
commit, the engine checks every selected source as observation does: a source
|
|
674
|
+
that still has the stat hint it was indexed with is taken as unchanged and is
|
|
675
|
+
not opened, and one whose hint moved is read and must still be the pinned
|
|
676
|
+
bytes. A source that changed during the tick, or was removed, refuses the
|
|
677
|
+
generation as `mixed-read`: its manifest is not committed, at that tick or by the restart
|
|
678
|
+
recovery of a later one, and the next tick observes in full and prepares the
|
|
679
|
+
view again. The same waits check that the configuration files, the machine
|
|
680
|
+
settings and the eligibility revision are still the ones the tick read. A
|
|
681
|
+
configuration file that cannot be read at such a check (no permission, an I/O
|
|
682
|
+
error) refuses the view as `mixed-read` too, and the tick goes on to its
|
|
683
|
+
other views.
|
|
684
|
+
|
|
685
|
+
Called on its own, a cooperative preparation reads every selected source
|
|
686
|
+
against its pin once more before it returns, a reused note's included, unless
|
|
687
|
+
its caller says it checks them itself (`scheduling.recheckSources: false`, as
|
|
688
|
+
the engine does). A preparation refused or cancelled on the way leaves the
|
|
689
|
+
preparation cache as it was.
|
|
690
|
+
|
|
638
691
|
The engine holds one graph file cache and one preparation cache per scope for
|
|
639
692
|
its lifetime and hands them through the `createGraphCache` and
|
|
640
693
|
`createPreparationCache` production seams; a test replaces either with
|
|
@@ -740,6 +793,77 @@ Before 0.2.0-alpha.10 no production reading was ever absent, because the probe
|
|
|
740
793
|
found Atelier's own service; from that release this path, and this window, are
|
|
741
794
|
live.
|
|
742
795
|
|
|
796
|
+
### First publication into a vault no Obsidian lists
|
|
797
|
+
|
|
798
|
+
A running or unknowable app that cannot be coordinated with still refuses the
|
|
799
|
+
whole publication, with one exception, the `direct-unheld` path. It is chosen
|
|
800
|
+
at path selection only when all of these hold:
|
|
801
|
+
|
|
802
|
+
1. The view has no committed generation.
|
|
803
|
+
2. Its vault is the folder allocated for it (`vaultOrigin: 'allocated'`), and
|
|
804
|
+
that folder's device and inode are the ones its record names.
|
|
805
|
+
3. The app's own settings file (`obsidian.json`) was read, and none of its
|
|
806
|
+
entries is the vault folder, a folder above it or a folder inside it. Both
|
|
807
|
+
sides are compared as written and by their real paths, in any letter case.
|
|
808
|
+
A file that cannot be read is read again, up to three times 50 ms apart,
|
|
809
|
+
because the app rewrites it with a plain write. A missing or unreadable
|
|
810
|
+
file, an entry whose folder is not an absolute path, an entry with a `..`
|
|
811
|
+
segment (the folder it names through a link cannot be placed by its text),
|
|
812
|
+
or a Flatpak or snap build of the app anywhere on the account (its list is
|
|
813
|
+
elsewhere) gives no evidence.
|
|
814
|
+
4. The platform is macOS or Linux.
|
|
815
|
+
|
|
816
|
+
Any other case gives the refusal it gave before. The maintenance service reads
|
|
817
|
+
the evidence from the file and never asks the app.
|
|
818
|
+
|
|
819
|
+
On this path the publisher writes only creates: a file appears through the
|
|
820
|
+
exclusive link where nothing is, or not at all. A unit that would replace or
|
|
821
|
+
remove a file, or write a settings file over one that is there, refuses as
|
|
822
|
+
`editor-uncoordinated` (blocking) and writes nothing. A settings file that
|
|
823
|
+
already holds exactly what the policy asks is left as it is, which is what an
|
|
824
|
+
interrupted run of this path leaves. A file already at a note path is kept as
|
|
825
|
+
`create-conflict`. The evidence is read again immediately before the first
|
|
826
|
+
unit and whenever two seconds have passed. Once a reading gives none, every
|
|
827
|
+
remaining unit refuses, a kept one included, and nothing is committed. The
|
|
828
|
+
view lock and the vault lock are taken as on every path, and the journal
|
|
829
|
+
records `mode: 'direct-unheld'`. Restart recovery and the late-writer check
|
|
830
|
+
treat it as a `direct` journal.
|
|
831
|
+
|
|
832
|
+
Why this loses nothing a person wrote, whoever holds the vault: no editor can
|
|
833
|
+
hold an unsaved buffer of a file that does not exist; the link either makes
|
|
834
|
+
the whole file appear or fails because something is there, which is kept; and
|
|
835
|
+
an editor that later saves over a created file wins, and is read as an edit.
|
|
836
|
+
The list evidence is for the experience, and it holds only for a run that
|
|
837
|
+
completes: that run is committed before `open` first tells the app about the
|
|
838
|
+
vault. A run that stops partway commits nothing. That happens when the list
|
|
839
|
+
names the folder meanwhile, a settings file with other bytes is already there,
|
|
840
|
+
or an interrupted run left a replacement or a removal. The view then reports
|
|
841
|
+
`editor-uncoordinated` and falls back to the coordinated path: `open` may add
|
|
842
|
+
the vault to the app and open it before it is complete, and what is left,
|
|
843
|
+
every replacement and removal included, is published through the app with its
|
|
844
|
+
usual base and buffer checks. The person may see an incomplete vault then;
|
|
845
|
+
nothing they write is at risk. Lists this account's app does not keep are
|
|
846
|
+
covered by the argument above alone: another user-data folder, another
|
|
847
|
+
machine through a synced folder.
|
|
848
|
+
|
|
849
|
+
A maintenance service whose app does not qualify (its command line off, no
|
|
850
|
+
vault open, a version below the floor) no longer keeps such a view from its
|
|
851
|
+
first publication: the publisher is reached with an adapter that coordinates
|
|
852
|
+
with nothing, and takes this path when every condition holds. When the path
|
|
853
|
+
does not apply, or the run stops partway at a unit refused as
|
|
854
|
+
`editor-uncoordinated`, the view reports the app's refusal, as before. `open`
|
|
855
|
+
then answers that refusal without adding the vault to the app, unless the
|
|
856
|
+
person asks it to restart Obsidian (`--restart-obsidian`): the vault is then
|
|
857
|
+
added and opened, and may be incomplete until the app has published the rest.
|
|
858
|
+
One case opens a vault without that flag: with the app running and no vault
|
|
859
|
+
open, a vault the app already lists is opened by its path, as before this
|
|
860
|
+
path existed, and may be incomplete. A run that stops only on a file in its
|
|
861
|
+
way reports that (`create-conflict`). When it stops for more than one reason,
|
|
862
|
+
one is reported: while the app does not qualify, the app's refusal wins over a
|
|
863
|
+
file in the way, and while it qualifies, the first blocking unit's reason is
|
|
864
|
+
reported. A reason not reported comes back at a later run, and nothing is
|
|
865
|
+
written meanwhile.
|
|
866
|
+
|
|
743
867
|
### Proven boundary
|
|
744
868
|
|
|
745
869
|
macOS (Darwin 25, arm64) with Obsidian 1.13.7 (installer 1.12.7), CLI enabled,
|
|
@@ -793,9 +917,13 @@ each open item is discharged with its own evidence.
|
|
|
793
917
|
Obsidian opens a vault from a link only when the folder is in its own vault
|
|
794
918
|
list. `atelier obsidian open` puts the view's vault there.
|
|
795
919
|
Outside its own storage (the data root, which holds the vaults and their
|
|
796
|
-
policy-owned `.obsidian/core-plugins.json`), the
|
|
797
|
-
another application that Atelier writes
|
|
798
|
-
|
|
920
|
+
policy-owned `.obsidian/core-plugins.json`), the settings file that holds the
|
|
921
|
+
list is the only file of another application that Atelier writes, and in it
|
|
922
|
+
only two things: the view's vault entry and the command-line switch `cli`. To
|
|
923
|
+
write it, Atelier writes nothing else outside the app's user-data directory,
|
|
924
|
+
and no vault note. Every write is shown in `open`'s answer
|
|
925
|
+
(`obsidianSettings`: the file, whether it was created, whether the vault was
|
|
926
|
+
added, whether the switch was turned on, and the backup).
|
|
799
927
|
|
|
800
928
|
**The file.** `obsidian.json` in the app's user-data directory:
|
|
801
929
|
`$HOME/Library/Application Support/obsidian/` on macOS and
|
|
@@ -833,7 +961,14 @@ root under another name is not recognised.
|
|
|
833
961
|
**While Obsidian runs with no vault open**, its command line answers nothing
|
|
834
962
|
and the file is still the running app's: it is read, never written. A vault
|
|
835
963
|
it already lists is opened by path; one it does not is refused as
|
|
836
|
-
`no-vault-open
|
|
964
|
+
`no-vault-open`, unless the person asked for a restart (below).
|
|
965
|
+
|
|
966
|
+
**While Obsidian runs with its command line off**, it answers every command
|
|
967
|
+
but a link with "Command line interface is not enabled", read as
|
|
968
|
+
`app-cli-unavailable` / `cli-turned-off`. The file is the running app's, which
|
|
969
|
+
holds the switch in memory and writes it back with its list, so it is not
|
|
970
|
+
written; the switch is turned on only while no Obsidian runs, or through the
|
|
971
|
+
restart below.
|
|
837
972
|
|
|
838
973
|
**Never inside another vault.** In every state, a vault inside a folder the
|
|
839
974
|
list has as a vault already (compared as written, against the vault root and
|
|
@@ -879,19 +1014,21 @@ then:
|
|
|
879
1014
|
a JSON object whose `vaults`, when present, is an object, of at most 4 MiB.
|
|
880
1015
|
A file with a second name (a hard link) is refused as
|
|
881
1016
|
`obsidian-settings-unsafe`: the replacement would leave that name with the
|
|
882
|
-
old list. A missing
|
|
883
|
-
|
|
884
|
-
refused (`obsidian-settings-missing`): the file is never created. The other
|
|
1017
|
+
old list. A missing file means Obsidian never started on this account; it
|
|
1018
|
+
is created as described under "Obsidian never started" below. The other
|
|
885
1019
|
refusals are `obsidian-settings-unsafe`, `obsidian-settings-not-owned`,
|
|
886
1020
|
`obsidian-settings-unreadable` and `obsidian-settings-not-object`.
|
|
887
|
-
3. A vault whose real path an entry already has is left as it is
|
|
888
|
-
written. A vault inside a folder an
|
|
889
|
-
(`vault-inside-another-vault`).
|
|
1021
|
+
3. A vault whose real path an entry already has is left as it is. When `cli`
|
|
1022
|
+
is already `true` too, nothing is written. A vault inside a folder an
|
|
1023
|
+
entry has is refused (`vault-inside-another-vault`).
|
|
890
1024
|
4. The new document is the file's object with one entry added under a fresh
|
|
891
1025
|
random 16-hex id that no entry has: `{ path: <the vault root's real path>,
|
|
892
|
-
ts: <now, ms>, open: true }
|
|
893
|
-
|
|
894
|
-
|
|
1026
|
+
ts: <now, ms>, open: true }`, unless the vault is listed already, and with
|
|
1027
|
+
`cli` set to `true` when it is not (the command-line switch: in its place
|
|
1028
|
+
when the file has the key, otherwise last, as the app adds it). Every
|
|
1029
|
+
other key and every other entry is kept in its place, as values. A
|
|
1030
|
+
document that would be larger than 4 MiB is refused
|
|
1031
|
+
(`obsidian-settings-too-large`).
|
|
895
1032
|
5. A temporary file in the same directory is written with the file's mode and
|
|
896
1033
|
fsynced; the bytes as they were are written, fsynced, to
|
|
897
1034
|
`obsidian.json.atelier-backup-<UTC time>` beside it.
|
|
@@ -912,6 +1049,91 @@ then:
|
|
|
912
1049
|
|
|
913
1050
|
Every refusal writes nothing and leaves nothing behind: a temporary file or
|
|
914
1051
|
backup created on the way is removed again whichever later step fails.
|
|
1052
|
+
|
|
1053
|
+
**Obsidian never started.** When the file does not exist and the process
|
|
1054
|
+
table says, positively, `absent` (read before, and again immediately before
|
|
1055
|
+
the file appears), the file is created, and only then:
|
|
1056
|
+
|
|
1057
|
+
1. The user-data directory must be this user's own real directory. When it
|
|
1058
|
+
does not exist, it is created with mode 0700, only inside an existing
|
|
1059
|
+
parent directory that is this user's own and no link; a missing parent is
|
|
1060
|
+
`obsidian-settings-missing`, and nothing is created above the directory.
|
|
1061
|
+
2. The content is exactly `{ "vaults": { "<16 hex>": { "path": <the vault
|
|
1062
|
+
root's real path>, "ts": <now, ms>, "open": true } }, "cli": true }`, mode
|
|
1063
|
+
0600. The app reads the file at start-up (a missing or unreadable one reads
|
|
1064
|
+
as no settings) and opens every vault flagged open, so a plain start opens
|
|
1065
|
+
this one, with its command line on.
|
|
1066
|
+
3. The bytes are written and fsynced to a temporary file in the directory,
|
|
1067
|
+
which is then hard-linked to `obsidian.json` and removed: the file appears
|
|
1068
|
+
complete or not at all, and the link fails on any file there, one the app
|
|
1069
|
+
wrote meanwhile included, which is kept (`obsidian-settings-changed`). The
|
|
1070
|
+
directory is fsynced. There is nothing to back up.
|
|
1071
|
+
4. An app that appears before the link refuses (`app-may-be-running`); one
|
|
1072
|
+
that appears right after it leaves the addition unconfirmed, as in step 7
|
|
1073
|
+
above. A refusal removes the temporary file and a directory created on the
|
|
1074
|
+
way.
|
|
1075
|
+
|
|
1076
|
+
`open` answers `registration.how: 'created-settings'` for it.
|
|
1077
|
+
|
|
1078
|
+
**Restart, only when the person asks** (`open --restart-obsidian`; never
|
|
1079
|
+
implied, and refused by every other operation). Only in the two states above
|
|
1080
|
+
where the app runs and cannot be reached: its command line off, or no vault
|
|
1081
|
+
open and the view's vault not in its list. Module:
|
|
1082
|
+
`src/runtime/obsidian/app-restart.mjs`.
|
|
1083
|
+
|
|
1084
|
+
0. Read-only, before anything is sent (`settingsWriteOutlook`): the view's
|
|
1085
|
+
vault folder exists, the settings file reads as in step 2 above (no
|
|
1086
|
+
Flatpak or snap build), has one name, would stay within 4 MiB with the
|
|
1087
|
+
entry, and lists no vault at a folder above the vault's. A file that does
|
|
1088
|
+
not exist (the app has shown only its starter window, which writes none)
|
|
1089
|
+
is the create case, checked as "Obsidian never started" checks before it
|
|
1090
|
+
writes (step 1 there); it is created after the quit. Otherwise `open`
|
|
1091
|
+
answers that refusal and the app keeps running. Once the main process is
|
|
1092
|
+
proven (step 2 below), right before the first signal, a copy of an existing
|
|
1093
|
+
file is kept beside it under the backup name (`backupObsidianSettings`,
|
|
1094
|
+
fsynced, the file's mode; `restart.settingsCopy`); a copy that cannot be
|
|
1095
|
+
kept sends nothing. The write in the same run does not prune that copy
|
|
1096
|
+
(`keepBackups`); a later write prunes it as step 7 says.
|
|
1097
|
+
1. The app's main process is proven from the process table
|
|
1098
|
+
(`ps -ww -A -o pid=,ppid=,uid=,comm=`; a uid is signed, since macOS shows
|
|
1099
|
+
`nobody` as -2): every Obsidian process (the names the process probe
|
|
1100
|
+
counts) runs as this user, exactly one names the app bundle's main
|
|
1101
|
+
executable by an absolute path (`…/Contents/MacOS/Obsidian`), and every
|
|
1102
|
+
other one is its child. `comm` is the process's argv[0], not a verified
|
|
1103
|
+
image: a process of the same user could take that name, which proves
|
|
1104
|
+
nothing while the real app runs too (two main processes). Otherwise nothing
|
|
1105
|
+
is sent (`app-main-process-unproven`, with `restart.detail`).
|
|
1106
|
+
2. That process is read again (`ps -o ppid=,uid=,lstart=,comm=`): it must be
|
|
1107
|
+
this user's, under the parent the table showed, with the same name, and
|
|
1108
|
+
read the same twice in a row; then it, and only it, gets SIGTERM, which
|
|
1109
|
+
Electron handles as a quit. The app closes every window, keeping the
|
|
1110
|
+
vaults that were open flagged open, and its helpers end (1.13.7, checked on
|
|
1111
|
+
an isolated instance).
|
|
1112
|
+
3. The process probe must say `absent` within 30 seconds. On macOS the main
|
|
1113
|
+
process can stay after the first SIGTERM, with no window (seen on
|
|
1114
|
+
an isolated 1.13.7, with vaults open and with only the starter window).
|
|
1115
|
+
Electron handles only the first SIGTERM as a quit; a second one ends the
|
|
1116
|
+
process at once, without its quit handlers. It is sent once, only when the
|
|
1117
|
+
table shows that same process alone (no helper) and it reads the same, at
|
|
1118
|
+
two readings at least 5 seconds apart. There is never a third signal, and
|
|
1119
|
+
never another kind; `restart.signals` counts the signals delivered.
|
|
1120
|
+
Otherwise `open` answers `launch-failed` / `app-did-not-quit`, writes
|
|
1121
|
+
nothing and starts nothing.
|
|
1122
|
+
4. The file is written as above, with the vault and the switch.
|
|
1123
|
+
5. The app is started plainly (`open -b md.obsidian`) by the launch steps
|
|
1124
|
+
below, and reopens its vaults and this one. An answer given after the quit
|
|
1125
|
+
and before the launch (the file could not take the vault, say) starts the
|
|
1126
|
+
app plainly first, as it was; a start that fails is said, with the next
|
|
1127
|
+
step to start it by hand.
|
|
1128
|
+
|
|
1129
|
+
The answer carries `restart: { asked, state, quit, signalled, pid, signals,
|
|
1130
|
+
settingsCopy, startedAgain }`, and `reason` and `detail` when it did not quit.
|
|
1131
|
+
An `open` interrupted between the quit and the start leaves the app quit (a
|
|
1132
|
+
known limit). At a terminal the restart still needs the flag; the question the
|
|
1133
|
+
design asks in that state comes with the first-run command. Qualified on macOS only; elsewhere the answer is
|
|
1134
|
+
`restart-platform-unqualified`, since a quit app there is started with a
|
|
1135
|
+
link, which would drop the other vaults' reopen flags.
|
|
1136
|
+
|
|
915
1137
|
`open` then shows the vault by the steps of `launchPlan`
|
|
916
1138
|
(`src/runtime/obsidian/launch-plan.mjs`, carried out by `runLaunchPlan`),
|
|
917
1139
|
naming it `obsidian://open?vault=<id>` when the id reaches it first (a path is
|
|
@@ -925,7 +1147,13 @@ plainly (`open -b md.obsidian`), which reopens every vault the list flags open
|
|
|
925
1147
|
tool once the app itself answers the tool (`appAnswered`: a version or one of
|
|
926
1148
|
the app's own lines; the tool's "unable to find Obsidian" while the app starts
|
|
927
1149
|
does not count). A link is never handed to the operating system for an app
|
|
928
|
-
this launch started, since that would reach it while it starts.
|
|
1150
|
+
this launch started, since that would reach it while it starts. A link the
|
|
1151
|
+
started app did not take is left to it when the list flags the vault open,
|
|
1152
|
+
since the plain start reopens it; for a listed vault that is closed, which a
|
|
1153
|
+
plain start does not reopen, the link is handed once more, through the tool
|
|
1154
|
+
only (this launch started the app), one wait round later, before `open`
|
|
1155
|
+
answers `launch-failed` /
|
|
1156
|
+
`app-did-not-answer-for-this-vault`. An app started with a link would delete the
|
|
929
1157
|
reopen flag of every other vault without a window (1.13.7, checked on an
|
|
930
1158
|
isolated instance). On Linux a quit app is started with the link, a known
|
|
931
1159
|
limit. With its command line turned off the app answers every other command
|
|
@@ -1095,6 +1323,7 @@ today) it refuses `exchange-unavailable`. Both write nothing.
|
|
|
1095
1323
|
| `interrupted-before-exchange`, `apply-interrupted-needs-person` | what restart recovery decided for an interrupted apply |
|
|
1096
1324
|
| `recovery-state-unreadable` | a candidate, backup or source path of an interrupted apply may not be looked at or read; nothing is settled from a read this process was denied, that record is reported with its intent still open, and every other one is still settled |
|
|
1097
1325
|
| `apply-outcome-unknown` | the source was exchanged and the settlement from digests could not be carried out; the source may have been changed, the intent stays open and `apply recover` decides |
|
|
1326
|
+
| `personal-overlay-proposals-only` | the note is a private note of a personal workspace, whose file belongs to a module-owned generation; nothing is written there. The proposal adapter's observation answers the same edit with `personal-overlay-not-proposed`, and records nothing |
|
|
1098
1327
|
|
|
1099
1328
|
A path that another program removes or replaces between two steps, before the
|
|
1100
1329
|
intent is recorded, answers one of these refusals (`source-missing`,
|
|
@@ -1317,7 +1546,9 @@ line, 16 MiB, 10,000 events, and an unreadable line refuses every append.
|
|
|
1317
1546
|
| `ledger-corrupt` | refused, for that repository only; other repositories progress in the same tick |
|
|
1318
1547
|
| `store-unavailable` | the store cannot be read or is locked now; waits like a full one |
|
|
1319
1548
|
|
|
1320
|
-
|
|
1549
|
+
For a personal workspace whose graph the engine has not confirmed yet, a due
|
|
1550
|
+
operation is left as it is (`personal-validation-pending`), and that tick is not
|
|
1551
|
+
counted as an attempt. A waiting operation is tried at most 8 times, 60 seconds after the first attempt
|
|
1321
1552
|
and twice as long after each, up to an hour. At most 8 operations per repository
|
|
1322
1553
|
and 64 unexamined edits are looked at per tick. A repository holds at most 4096
|
|
1323
1554
|
operations, 256 of them open, 64 records of 16 KiB each; a full queue refuses
|