@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
package/docs/obsidian-plugin.md
CHANGED
|
@@ -32,7 +32,24 @@ is `src/projection/obsidian/plugin-bridge/channel.mjs`; the service's half is
|
|
|
32
32
|
a window with the view, its state and the reason in words, the committed and
|
|
33
33
|
the prepared generation, when freshness was last checked, the held, retained
|
|
34
34
|
and pending edits, the service address and state, and the plugin and app
|
|
35
|
-
versions.
|
|
35
|
+
versions. While the service is unreachable, current generations, check time
|
|
36
|
+
and edit counts are unknown. After a connection refusal or timeout on the
|
|
37
|
+
same channel, the window also shows the last authenticated state, reason,
|
|
38
|
+
generation and check under "Last observed" labels. Those rows are historical
|
|
39
|
+
and never establish current freshness, service health or permission.
|
|
40
|
+
History stays only in memory. It is cleared on a channel change, missing or
|
|
41
|
+
unsupported setup, authentication refusal, an untrusted answer, a missing or
|
|
42
|
+
malformed view, a report for another scope, a disabled view or unload.
|
|
43
|
+
A connection reset or any other failure outside connection refusal and
|
|
44
|
+
timeout also clears it. Without a prior usable report, "Last observed
|
|
45
|
+
status" says "not available". After startup admits the channel, a republish
|
|
46
|
+
that names a different channel (host, port, scope or key) resets the display
|
|
47
|
+
to `connecting` before its next answer; this reset does not repeat an
|
|
48
|
+
unchanged notice or lose the transition back to current. A republish of the
|
|
49
|
+
same channel keeps the display and history, and unusable data shows
|
|
50
|
+
`not set up`.
|
|
51
|
+
Republish keeps an unsupported-app or unavailable-Node setup label and its
|
|
52
|
+
channel closed. Plugin 1.1.2 adds this status continuity.
|
|
36
53
|
- A notice appears when the view moves into a state that needs a person (held,
|
|
37
54
|
stale, service unreachable, app too old) and when it is current again.
|
|
38
55
|
`updating` is not announced: it is what every change looks like.
|
|
@@ -104,18 +121,48 @@ at the maintenance service's next tick, with nothing changed at the view's
|
|
|
104
121
|
sources: the service compares the plugin files each committed generation pins
|
|
105
122
|
with the disk, has a view whose files differ prepared again, and a generation
|
|
106
123
|
that is already committed is published again, as it is, with its notes kept.
|
|
107
|
-
A drift left for the person is asked about once, and again once it changes
|
|
124
|
+
A drift left for the person is asked about once, and again once it changes.
|
|
125
|
+
What a publication could not change is not asked about again: a drift that
|
|
126
|
+
publishing cannot repair (the data file of a vault root that is a link, say)
|
|
127
|
+
is asked about at most once more after a publication that left it, which
|
|
128
|
+
writes no vault file (the view is prepared again and takes the vault's lock,
|
|
129
|
+
and for that tick shows as `stale`, then `updating`, before it is `current`
|
|
130
|
+
again), and not again after that. A plugin file
|
|
131
|
+
another writer removes or changes after the publication, even while the same
|
|
132
|
+
tick goes on, unless it holds again what it held before the tick under the
|
|
133
|
+
same pin and vault root, and a path
|
|
134
|
+
the person repairs before the tick ends (the vault root made private,
|
|
135
|
+
say), is asked about at the next look and written;
|
|
108
136
|
where the plugin is turned off in the vault, a pinned file that is gone is no
|
|
109
137
|
drift. Publishing a committed generation again needs the app when one runs;
|
|
110
138
|
if that app does not qualify, nothing is written, the view stays `current`
|
|
111
139
|
(a committed generation needs no app, so an app that cannot be qualified
|
|
112
140
|
never makes a current view stale), and the file is written at a later
|
|
113
141
|
attempt, on the retry schedule of an unsettled view, once the app
|
|
114
|
-
qualifies.
|
|
142
|
+
qualifies. A drift that publishing would only leave for the person again
|
|
143
|
+
(the data file of a vault root that is a link or not private, a folder where
|
|
144
|
+
a file goes) is no reason to publish again and needs no app: the path is
|
|
145
|
+
left as it is, and the view keeps its plain reason. Nothing in `status` or
|
|
146
|
+
`open` names such a path yet; without its data file the plugin cannot reach
|
|
147
|
+
the service, so it shows as not present (`no-live-lease`). A few paths the
|
|
148
|
+
publisher leaves for the person still count as a drift here, and wait for the
|
|
149
|
+
app as one: a file nobody may read, a parent folder that cannot be looked
|
|
150
|
+
into, and a vault root Atelier keeps whose mode cannot be changed. Until the app qualifies, a
|
|
151
|
+
view waiting for it has the reason
|
|
152
|
+
`verified-by-read-back-plugin-waits-for-app` rather than
|
|
153
|
+
`verified-by-read-back`, and `status` and `open` add `plugin files wait for
|
|
154
|
+
the app` to the plugin line (`files: "waits-for-app"` in `--json`), with a
|
|
155
|
+
next step for the plugin. (The settings files are held to the same rule for a file nobody
|
|
115
156
|
may read.) A plugin file that another program changes while a publication runs
|
|
116
157
|
is a race and is handled like one on a note: that publication does not
|
|
117
158
|
commit, the view is tried again, and the file is planned from the disk anew
|
|
118
159
|
(`plugin-file-changed`); nothing reads a plugin file as an edit of a note.
|
|
160
|
+
The view is then `publisher-conflict`, and its next step in `status` and
|
|
161
|
+
`open` names that file as what stopped the publication (changed by another
|
|
162
|
+
program or by the person; one change is enough), rather than asking the
|
|
163
|
+
person to close another publisher; the same holds for a settings file
|
|
164
|
+
(`settings-changed`). The reason is the first unit that stopped the
|
|
165
|
+
publication, so other causes are not ruled out.
|
|
119
166
|
Upgrades replace the plugin files the same way. The plugin's version in
|
|
120
167
|
`manifest.json` changes whenever its code does, and the test suite holds the
|
|
121
168
|
two together: the app keeps running the `main.js` it loaded until it reloads
|
|
@@ -306,6 +353,124 @@ the vault's key without sending it, and the service proves it first
|
|
|
306
353
|
| `POST /plugin/release` | `sessionId`, `counter`, `mac` | sealed: whether the session was released |
|
|
307
354
|
| `POST /plugin/status` | `sessionId`, `counter`, `mac` | sealed: the view's state, reason, verification, committed and prepared generation, held notes (counted, not named), retained edits, open pending edits, and the service's own state |
|
|
308
355
|
|
|
356
|
+
A status answer carries the view and its pending edits only while the project
|
|
357
|
+
allows that view at the moment of the request, not as of the last tick
|
|
358
|
+
(`src/runtime/obsidian/view-permission.mjs`): its Obsidian settings are
|
|
359
|
+
enabled and declare the view, and its workspace pointer still names the
|
|
360
|
+
workspace this service runs for, with its private state where the service
|
|
361
|
+
keeps it. Otherwise the answer is still sealed and still carries the service's
|
|
362
|
+
own state, but `view` and `pendingEdits` are `null`, which the plugin already
|
|
363
|
+
reads as nothing known about the view. That covers a view turned off or taken
|
|
364
|
+
out of the settings before the next tick, and the freshness a later tick
|
|
365
|
+
writes for it, which keeps its generations and counts. It also covers anything
|
|
366
|
+
that cannot be established: settings that refuse, a project that does not
|
|
367
|
+
load, a pointer that cannot be read. The plugin then shows `Atelier: stale`
|
|
368
|
+
with the reason "no freshness recorded", keeps its session and asks again at
|
|
369
|
+
its next round; it is not told why, and it remembers nothing of the view to
|
|
370
|
+
show later.
|
|
371
|
+
|
|
372
|
+
Loading the project runs Git in child processes, which would otherwise happen
|
|
373
|
+
every two seconds for every open vault, so the project is kept:
|
|
374
|
+
|
|
375
|
+
- **What decides it.** The files the engine observes as configuration,
|
|
376
|
+
compared at every request by a digest of what they hold, never by their
|
|
377
|
+
times. Each file holds where it really is and the bytes there: its path
|
|
378
|
+
resolved as the system resolves it when the loader opens it (`realpath(3)`,
|
|
379
|
+
through a link anywhere on the way, a `..` after a link included), so a
|
|
380
|
+
configuration kept in a dotfiles repository and linked into the project is
|
|
381
|
+
kept like any other, and a link pointed elsewhere, the file's own or one to
|
|
382
|
+
a folder above it, is a change even where every byte is the same. A folder
|
|
383
|
+
in a file's place, a link that leads nowhere or to a folder, and a file
|
|
384
|
+
that cannot be read vouch for nothing: then nothing is kept, and the
|
|
385
|
+
project is loaded at every request. Where the system resolves no path for a
|
|
386
|
+
regular file that is there and is not a link (some volumes on Windows
|
|
387
|
+
answer `EISDIR`; a C library that needs `/proc` and has none), the file is
|
|
388
|
+
compared by its own path as given and its bytes, so the project is still
|
|
389
|
+
kept; a link above such a file, pointed elsewhere, is not seen there. A
|
|
390
|
+
link the system does not resolve vouches for nothing. The pointer and the
|
|
391
|
+
place of the private state are read at every request.
|
|
392
|
+
- **When it is kept.** Two loads in a row, each started after those files
|
|
393
|
+
were read and found to hold the same, must return the same project as far
|
|
394
|
+
as the decision reads one: the views it enables, where its pointer is, the
|
|
395
|
+
data root its local overlay prefers and the roots it protects. A field that
|
|
396
|
+
differs from load to load, such as a time or a personal-workspace binding
|
|
397
|
+
kept under a symbol key, does not keep a project from being kept. One
|
|
398
|
+
load is not enough: a file changed and changed back while it ran leaves the
|
|
399
|
+
same bytes around a project read from other ones. So three loads keep the
|
|
400
|
+
project when the service has just started, and two after a change.
|
|
401
|
+
- **For how long.** A kept project is loaded again once it is two and a half
|
|
402
|
+
minutes old, and is never used once it is five, the interval of the
|
|
403
|
+
engine's full reconciliation. Whatever no file here names (an overlay named
|
|
404
|
+
by `MNSTRY_ATELIER_LOCAL_CONFIG` that did not exist at the last load, for
|
|
405
|
+
instance) is seen by then.
|
|
406
|
+
- **A loader that answers a promise** is never waited for, because the plugin
|
|
407
|
+
gives a request a second and a half. Its view is told nothing until two of
|
|
408
|
+
its loads have agreed; one load runs at a time, and a kept project goes on
|
|
409
|
+
deciding, within its time, while it is loaded again. A load that has not
|
|
410
|
+
answered within two and a half minutes is given up and its later answer
|
|
411
|
+
ignored, whether a request or that answer is the first to come after the
|
|
412
|
+
deadline. A service bound to a personal home (`--personal-home`) has such a
|
|
413
|
+
loader: it starts from the home alone, and its plugins are told about a view
|
|
414
|
+
once two of the loads that compose the confirmed generation have agreed. A
|
|
415
|
+
service given only a loader that answers a promise still refuses to start
|
|
416
|
+
(see "Personal workspaces" in [obsidian.md](obsidian.md)).
|
|
417
|
+
- **A load that fails** (it throws, it is refused, it is given up, or a file
|
|
418
|
+
vouches for nothing under a loader that answers a promise) ends whatever
|
|
419
|
+
was kept, and is asked for again after two seconds, then four, up to
|
|
420
|
+
thirty, while the files hold the same. A change to them is tried at once,
|
|
421
|
+
with two exceptions. Until a load has answered and named the files, a
|
|
422
|
+
corrected configuration waits for the next try. And while one of the files
|
|
423
|
+
vouches for nothing there is no digest to change, so after a load that
|
|
424
|
+
failed then (one that answers a promise, or one that answers at once and
|
|
425
|
+
threw) a change to another file waits for the next try as well.
|
|
426
|
+
- **What the service shows of these loads.** Its status document counts
|
|
427
|
+
them (`statusLoads`: `answered`, `failed`, `givenUp`, `slow`, `notKept` and
|
|
428
|
+
`longestMs`). Its log gets a `status-project-loaded` line, with the
|
|
429
|
+
milliseconds, the outcome, flags and counts and never a path, only for a
|
|
430
|
+
load somebody has to see, each kind on its own row, written when the row is
|
|
431
|
+
1, 2, 4, 8 and so on long (from 2 for loads after which nothing is kept):
|
|
432
|
+
- a load that failed or was given up;
|
|
433
|
+
- a load that answered at once and took a second or more (`slow`). A second
|
|
434
|
+
is most of the second and a half the plugin gives a request, spent on the
|
|
435
|
+
listener's own event loop; a load that answers a promise holds nothing;
|
|
436
|
+
- a load after which nothing is kept although it named the files it
|
|
437
|
+
started over (`notKept`, from the second in a row, with `vouched` false
|
|
438
|
+
while a file vouches for nothing): a load at every request. A load that
|
|
439
|
+
named other files than it started over (the first, which started over
|
|
440
|
+
none, or the one after a change that names other files, such as a new
|
|
441
|
+
confirmed selection) neither counts nor ends that row, so loads that
|
|
442
|
+
each name other files than the one before are never counted. A start and
|
|
443
|
+
a change each have one load that names the files it started over and has
|
|
444
|
+
nothing to agree with yet, so neither writes such a line; each is
|
|
445
|
+
counted, so a healthy service shows one `notKept` at its start and one
|
|
446
|
+
after each change. A change that lands while a load reads the files,
|
|
447
|
+
names the same files, and changes the views or what the workspace is
|
|
448
|
+
resolved from, makes that load keep nothing as well, and so writes one
|
|
449
|
+
line and counts two. Any other change that lands then counts one, as a
|
|
450
|
+
change does, and writes nothing.
|
|
451
|
+
|
|
452
|
+
A row of failures goes on through loads that answer between them, and ends
|
|
453
|
+
at the first load that answers a minute or more after its last failure; a
|
|
454
|
+
line is written then (`afterFailures`). That line comes with the first load
|
|
455
|
+
after the minute, which under a kept project is the next reload, two and a
|
|
456
|
+
half minutes after the load that kept it, and none comes if no load
|
|
457
|
+
follows. A row of slow
|
|
458
|
+
loads ends the same way, at a load that answers in time a minute or more
|
|
459
|
+
after the last slow one. So, while loads come less than a minute apart (a
|
|
460
|
+
load at every request, or the retries after a failure), a loader that
|
|
461
|
+
fails, or is slow, every other load or every third keeps one row, written
|
|
462
|
+
less and less often, instead of a line per load. While a project is kept it
|
|
463
|
+
is loaded again every two and a half minutes, so there a row of failures
|
|
464
|
+
ends at the next reload that answers: a loader that answers at least one
|
|
465
|
+
reload between two failures writes each failure and the load that ends its
|
|
466
|
+
row, as before, and one that fails at every reload and answers only at its
|
|
467
|
+
retry keeps one row. Each slow load is written there, as before. A row
|
|
468
|
+
of loads after which nothing is kept ends at the next load that keeps the
|
|
469
|
+
project and named the files it started over. A healthy service writes none
|
|
470
|
+
of these lines. The log is cut over only when it is opened, so a line per
|
|
471
|
+
load, every two seconds while a file vouches for nothing, would have grown
|
|
472
|
+
it without bound.
|
|
473
|
+
|
|
309
474
|
Refusals, before anything else is looked at: `Host` other than the listener's
|
|
310
475
|
literal loopback authority, a cross-site `Origin` or `Sec-Fetch-Site`, a path
|
|
311
476
|
other than one of the nine exactly (a query included), or another method (the
|
|
@@ -384,7 +549,11 @@ is authenticated, so they only ever decide what is shown.
|
|
|
384
549
|
directory changed) and one HMAC per vault; at most four handshakes wait per
|
|
385
550
|
view, and recorded challenges can keep them filled for at most about
|
|
386
551
|
thirty seconds after a restart, since a challenge is answered only within
|
|
387
|
-
thirty seconds of the time it names.
|
|
552
|
+
thirty seconds of the time it names. A status request of a session costs a
|
|
553
|
+
read of the project's configuration files and of its workspace pointer; the
|
|
554
|
+
project itself is loaded again when one of those files changed, every two
|
|
555
|
+
and a half minutes, or at every request while one of them vouches for
|
|
556
|
+
nothing (see "The channel").
|
|
388
557
|
- Egress. `plugins/` is in the egress scan, which fails a request whose target
|
|
389
558
|
is not a literal loopback address, and the release audit requires the three
|
|
390
559
|
plugin files in the package and scans them in the tarball.
|
|
@@ -423,10 +592,14 @@ answer decides wherever it gives one:
|
|
|
423
592
|
and opens by path the vault the app lists. Where the settings file does
|
|
424
593
|
not show it (a sandboxed build, say), or where it lists it and, once the
|
|
425
594
|
vault is opened, the command line still does not answer for it while only
|
|
426
|
-
the plugin reports the version, `open` answers
|
|
595
|
+
the plugin reports the version, `open` answers
|
|
427
596
|
`app-cli-unavailable` / `vault-open-cli-silent`: the plugin shows the vault
|
|
428
597
|
open, so the command line is what did not answer, and waiting for the app
|
|
429
|
-
would change nothing.
|
|
598
|
+
would change nothing. After a launch that answer is given at the second
|
|
599
|
+
such round in a row, not the first: one tool call that timed out while the
|
|
600
|
+
app was busy opening its window looks the same once, and `open` then goes
|
|
601
|
+
on waiting for the vault. A wait that ends right after one such round gives
|
|
602
|
+
the same answer.
|
|
430
603
|
- Whether an app runs is the process table's answer, which says no only when
|
|
431
604
|
it finds no Obsidian process at all. A lease outlives its app by up to the
|
|
432
605
|
lease time (six seconds after a crash), and any process that holds the
|
|
@@ -454,6 +627,72 @@ note open in the editor.
|
|
|
454
627
|
|
|
455
628
|
## Evidence
|
|
456
629
|
|
|
630
|
+
- `test/obsidian-plugin-status-continuity.test.mjs` exercises transient history
|
|
631
|
+
and the shipped request flow through a finite, socket-free `http.request`
|
|
632
|
+
stand-in. Canonical channel computations seal the invented replies. It
|
|
633
|
+
checks refused and timed-out lease/status requests, rejected leases followed
|
|
634
|
+
by interrupted handshakes, listener proof and answer authentication,
|
|
635
|
+
republished data, notice deduplication and recovery, and late answers after
|
|
636
|
+
a channel change or unload. It opens no service or app and writes no plugin
|
|
637
|
+
data. These tests complement the real-listener and real-app checks below.
|
|
638
|
+
- `test/obsidian-view-permission.test.mjs` asks whether the project allows a
|
|
639
|
+
view the way the service asks before a status answer, over real project
|
|
640
|
+
files, the real loader and the real workspace resolution, with no listener,
|
|
641
|
+
with time a number the test moves: every way a view or its
|
|
642
|
+
workspace is withdrawn and given back; the workspace's identity compared as
|
|
643
|
+
well as its place; two loads per change however often a view is asked
|
|
644
|
+
about; a change that keeps a file's size and modification time; a change
|
|
645
|
+
that lands during a load; a file the project comes to name; a configuration
|
|
646
|
+
file that is a link, retargeted, or a link to a link; a folder, a link that
|
|
647
|
+
leads nowhere and a link to a folder in a file's place; a kept project's
|
|
648
|
+
time; a loader that fails, with its backoff; and a loader that answers a
|
|
649
|
+
promise: one load at a time, a change undone and done again while it runs,
|
|
650
|
+
through a link, a load that never answers, one whose answer comes after its
|
|
651
|
+
deadline before any request, and one refused again and again; a link whose
|
|
652
|
+
target has a `..` after a link, and a link to a folder above a file pointed
|
|
653
|
+
at a byte-for-byte copy; two loads that differ in a time and a symbol-keyed
|
|
654
|
+
binding, or in a protected root; how long each load took and how it ended;
|
|
655
|
+
and the service refusing to start on a loader that answers a promise, a
|
|
656
|
+
refused promise or a thenable. Mutations of the module (a link that vouches
|
|
657
|
+
for nothing, a project kept from one load whose files are read again when
|
|
658
|
+
it answers, no deadline, no backoff, no identity check, the files not taken
|
|
659
|
+
from the load, no time limit, a late answer taken, JavaScript's realpath, no
|
|
660
|
+
real path for a regular file, the whole project compared, no protected
|
|
661
|
+
roots compared) and a service that does not refuse each fail at least one
|
|
662
|
+
of them. It also covers: a late refusal after the deadline; which loads the
|
|
663
|
+
log report writes (a row of failures or of slow loads kept through loads in
|
|
664
|
+
time between them until a minute without one, so a loader that fails every
|
|
665
|
+
other or every third load writes one row; loads after which nothing is
|
|
666
|
+
kept, from the second in a row, and loads that named other files, which
|
|
667
|
+
neither count nor end that row) and that a line holds no path; a load at
|
|
668
|
+
every request written while a file vouches for nothing and while loads
|
|
669
|
+
never agree, and none at a change that names other files; each input of the
|
|
670
|
+
workspace resolution (pointer folder, data-root preference, protected
|
|
671
|
+
repositories) keeping two loads apart; a system that resolves no path, for
|
|
672
|
+
a regular file and for a link; and, through the test service entry in a
|
|
673
|
+
child process, a start under `--startup` on a promise, a refused promise,
|
|
674
|
+
a thenable (its `then` called once) and a refused promise with a `then` of
|
|
675
|
+
its own that throws (never called), which asks the loader once, records the
|
|
676
|
+
refusal and ends with 0; and one on a loader that throws `undefined`, a
|
|
677
|
+
value with no prototype or one whose `code` cannot be read, or answers a
|
|
678
|
+
project whose `then` cannot be read, which logs `untyped-error` with the
|
|
679
|
+
text of what was thrown (its message, or the value itself, `undefined` for
|
|
680
|
+
`undefined`, and `unprintable` when it cannot be made text) and ends
|
|
681
|
+
with 1. `test/obsidian-personal-selection.test.mjs` covers a locator that
|
|
682
|
+
answers a thenable (its `then` called once) or throws `undefined`. Ten more
|
|
683
|
+
mutations (the loader asked twice at such a start, its
|
|
684
|
+
promise not let go, every load or every failure written, no fallback for a
|
|
685
|
+
regular file or one for a link too, a late refusal not given up, and each
|
|
686
|
+
of the three inputs dropped) each fail at least one case, and so do a row
|
|
687
|
+
of failures or of slow loads ended at any load in time, a load after which
|
|
688
|
+
nothing is kept written from the first in a row, the first load counted
|
|
689
|
+
among those, a kept project that does not end that row, a load that named
|
|
690
|
+
other files counted or ending it, and the files taken as vouching when they
|
|
691
|
+
did not.
|
|
692
|
+
`test/obsidian-personal-workspace.test.mjs` keeps a bound personal
|
|
693
|
+
workspace from the loader that composes in a worker: its views once two
|
|
694
|
+
compositions agree, nothing while its generation is refused, and the next
|
|
695
|
+
generation's views once that is bound.
|
|
457
696
|
- `test/obsidian-plugin.test.mjs` runs the shipped `main.js` in a stand-in app
|
|
458
697
|
against a real listener on an ephemeral loopback port: parity of the
|
|
459
698
|
plugin's constants and of every proof and MAC with the channel contract (a
|
|
@@ -483,7 +722,13 @@ note open in the editor.
|
|
|
483
722
|
drift left for the person asked about once),
|
|
484
723
|
and an upgrade; the service publishing the plugin and the plugin it
|
|
485
724
|
published holding the view; qualification from a plugin report, with one
|
|
486
|
-
launch or two;
|
|
725
|
+
launch or two; `status` and `open` reporting it; a view the project turns
|
|
726
|
+
off or no longer declares, told nothing of what the service stored about
|
|
727
|
+
it, before the next tick and after it, and told as before once it is
|
|
728
|
+
allowed again; a project whose pointer is pointed at another workspace,
|
|
729
|
+
told nothing until it names this one again; and a loader that answers a
|
|
730
|
+
promise, never waited for, with the plugin keeping its session meanwhile.
|
|
731
|
+
A spawn guard refuses
|
|
487
732
|
any child of the suite that could reach an Obsidian with the developer's
|
|
488
733
|
own `HOME`.
|
|
489
734
|
- The same file has three real-app tests, skipped unless
|