@mnstry/atelier 0.2.0-alpha.14 → 0.2.0-alpha.15
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 +50 -0
- package/README.md +80 -47
- package/SECURITY.md +1 -1
- package/TRADEMARKS.md +2 -2
- package/contracts/atelier-extension-manifest.v1.schema.json +412 -0
- package/contracts/atelier-graph-view.v1.schema.json +1085 -0
- package/contracts/public-api-baseline.json +298 -19
- package/docs/README.md +90 -0
- package/docs/blocks/claims.md +2 -2
- package/docs/blocks/conformance-admission.md +1 -1
- package/docs/{atelier-sync.md → guides/atelier-sync.md} +20 -14
- package/docs/guides/co-authoring.md +113 -0
- package/docs/{distributions.md → guides/distributions.md} +13 -8
- package/docs/guides/extensions.md +189 -0
- package/docs/guides/graph-refresh.md +152 -0
- package/docs/guides/graph-workspace.md +64 -0
- package/docs/{ingestion.md → guides/ingestion.md} +13 -12
- package/docs/{knowledge-workspace.md → guides/knowledge-workspace.md} +2 -2
- package/docs/{learning.md → guides/learning.md} +12 -5
- package/docs/{obsidian.md → guides/obsidian.md} +134 -47
- package/docs/guides/ontology-guide.md +111 -0
- package/docs/{personal-workspace.md → guides/personal-workspace.md} +7 -4
- package/docs/{research-starter.md → guides/research-starter.md} +1 -1
- package/docs/{tenant-readiness.md → guides/tenant-readiness.md} +39 -0
- package/docs/{upgrade.md → guides/upgrade.md} +23 -9
- package/docs/knowledge-health/assessment/capabilities.md +6 -15
- package/docs/knowledge-health/facilitator.md +15 -4
- package/docs/knowledge-health/{devday/participant-response.md → participant-response.md} +4 -2
- package/docs/knowledge-health/quickstart.md +97 -75
- package/docs/knowledge-health/readme.md +13 -5
- package/docs/maintainers/describing-the-atelier.md +173 -0
- package/docs/{release-engineering.md → maintainers/release-engineering.md} +5 -5
- package/docs/{announcements.md → reference/announcements.md} +1 -1
- package/docs/{architecture.md → reference/architecture.md} +31 -5
- package/docs/{atelier-runtime.md → reference/atelier-runtime.md} +1 -1
- package/docs/{connected-composition.md → reference/connected-composition.md} +7 -10
- package/docs/{coordination.md → reference/coordination.md} +1 -1
- package/docs/{decisions.md → reference/decisions.md} +3 -3
- package/docs/{design.md → reference/design.md} +1 -1
- package/docs/reference/edge-policy.md +151 -0
- package/docs/reference/graph-view-structured.md +119 -0
- package/docs/reference/graph-view.md +139 -0
- package/docs/reference/graph-workspace.md +37 -0
- package/docs/{intake-and-guides.md → reference/intake-and-guides.md} +3 -4
- package/docs/{knowledge-graph.md → reference/knowledge-graph.md} +120 -6
- package/docs/{local-services.md → reference/local-services.md} +1 -1
- package/docs/{obsidian-contract.md → reference/obsidian-contract.md} +6 -4
- package/docs/{obsidian-plugin.md → reference/obsidian-plugin.md} +5 -66
- package/docs/{practical-judgment.md → reference/phronesis.md} +12 -3
- package/docs/reference/portability.md +92 -0
- package/docs/{portable-presentation.md → reference/portable-presentation.md} +2 -2
- package/docs/{presentation-consumer-boundaries.md → reference/presentation-consumer-boundaries.md} +5 -0
- package/docs/{project-options.md → reference/project-options.md} +17 -0
- package/docs/{repo-boundary-guard.md → reference/repo-boundary-guard.md} +27 -4
- package/docs/{review-portability.md → reference/review-portability.md} +4 -0
- package/docs/{template-profile.md → reference/template-profile.md} +1 -1
- package/docs/{trackables.md → reference/trackables.md} +2 -2
- package/docs/start/independent-start.md +89 -0
- package/docs/{install.md → start/install.md} +6 -6
- package/docs/{knowledge-setup.md → start/knowledge-setup.md} +5 -5
- package/docs/{research-starter-quickstart.md → start/research-starter-quickstart.md} +6 -6
- package/fixtures/atelier-architecture/catalog/invalid/document.json +2 -2
- package/fixtures/atelier-architecture/catalog/valid/document.json +2 -2
- package/fixtures/graph-view/synthetic-authorized-input.v1.json +437 -0
- package/fixtures/graph-view/synthetic-view.v1.json +1 -0
- package/fixtures/knowledge-health/workshop/README.md +1 -1
- package/fixtures/templates/local-library.v1.json +2 -1
- package/package.json +21 -8
- package/skills/claude/atelier-guided-upgrade/SKILL.md +1 -1
- package/skills/claude/atelier-knowledge-setup/SKILL.md +2 -2
- package/skills/claude/atelier-local-service/SKILL.md +1 -1
- package/skills/claude/atelier-practical-judgment/SKILL.md +7 -2
- package/skills/claude/atelier-skill-steward/SKILL.md +1 -1
- package/skills/claude/mnstry-readiness/SKILL.md +2 -2
- package/skills/codex/atelier-guided-upgrade/SKILL.md +1 -1
- package/skills/codex/atelier-knowledge-setup/SKILL.md +2 -2
- package/skills/codex/atelier-local-service/SKILL.md +1 -1
- package/skills/codex/atelier-practical-judgment/SKILL.md +7 -2
- package/skills/codex/atelier-skill-steward/SKILL.md +1 -1
- package/skills/codex/mnstry-readiness/SKILL.md +2 -2
- package/src/architecture/catalog.mjs +2 -2
- package/src/attestation/sign.mjs +1 -1
- package/src/boundary/content-rules.mjs +5 -4
- package/src/boundary/policy.mjs +60 -12
- package/src/cli/run.mjs +24 -8
- package/src/commands/distribution.mjs +1 -1
- package/src/commands/extension.mjs +27 -0
- package/src/commands/ingest.mjs +1 -1
- package/src/commands/learn.mjs +1 -1
- package/src/commands/obsidian.mjs +28 -16
- package/src/commands/review.mjs +3 -0
- package/src/edge-policy/contract.mjs +69 -0
- package/src/edge-policy/policy.mjs +142 -0
- package/src/edge-policy/source-citation-adapter.mjs +43 -0
- package/src/extension-packs/loader.mjs +4 -3
- package/src/extensions/admission.mjs +83 -0
- package/src/extensions/client.d.mts +23 -0
- package/src/extensions/client.mjs +99 -0
- package/src/extensions/contracts.d.mts +29 -0
- package/src/extensions/contracts.mjs +163 -0
- package/src/extensions/convex.d.mts +24 -0
- package/src/extensions/convex.mjs +189 -0
- package/src/extensions/delegation.mjs +54 -0
- package/src/extensions/drizzle.d.mts +11 -0
- package/src/extensions/drizzle.mjs +33 -0
- package/src/extensions/postgres.d.mts +7 -0
- package/src/extensions/postgres.mjs +66 -0
- package/src/extensions/prisma.d.mts +13 -0
- package/src/extensions/prisma.mjs +63 -0
- package/src/extensions/project.mjs +432 -0
- package/src/extensions/scaffold-convex.mjs +130 -0
- package/src/extensions/scaffold-sql.mjs +144 -0
- package/src/extensions/server.d.mts +20 -0
- package/src/extensions/server.mjs +102 -0
- package/src/extensions/sql-scope.mjs +22 -0
- package/src/graph/knowledge-graph.mjs +1 -1
- package/src/graph/repo-contribution.mjs +405 -0
- package/src/graph/repo-contribution.types.mjs +32 -0
- package/src/graph-access/edge-decision-adapter.mjs +41 -0
- package/src/graph-access/edge-record-adapter.mjs +73 -0
- package/src/graph-access/index.mjs +253 -0
- package/src/graph-access/multi-contribution-record-adapter.mjs +101 -0
- package/src/graph-access/multi-record-projection-adapter.mjs +74 -0
- package/src/graph-access/source-adapter.mjs +81 -0
- package/src/graph-refresh/compare.mjs +110 -0
- package/src/graph-refresh/controller.mjs +324 -0
- package/src/graph-refresh/index.mjs +3 -0
- package/src/graph-refresh/local.mjs +78 -0
- package/src/graph-view/babylon/babylon-scene-port.mjs +64 -0
- package/src/graph-view/babylon/index.mjs +2 -0
- package/src/graph-view/babylon/navigator.mjs +312 -0
- package/src/graph-view/babylon/provenance.mjs +36 -0
- package/src/graph-view/babylon/scene-controller.mjs +131 -0
- package/src/graph-view/babylon/semantic-picking.mjs +35 -0
- package/src/graph-view/babylon/web-host.mjs +188 -0
- package/src/graph-view/cli.mjs +3 -0
- package/src/graph-view/command.mjs +34 -0
- package/src/graph-view/contracts.mjs +79 -0
- package/src/graph-view/errors.mjs +5 -0
- package/src/graph-view/index.mjs +4 -0
- package/src/graph-view/intents.mjs +30 -0
- package/src/graph-view/query.mjs +213 -0
- package/src/graph-view/refs.mjs +2 -0
- package/src/graph-view/structured/browser.mjs +262 -0
- package/src/graph-view/structured/styles.mjs +8 -0
- package/src/graph-workspace/authoring.mjs +185 -0
- package/src/graph-workspace/browser/constellation.mjs +369 -0
- package/src/graph-workspace/browser/dom.mjs +23 -0
- package/src/graph-workspace/browser/index.mjs +6 -0
- package/src/graph-workspace/browser/review.mjs +55 -0
- package/src/graph-workspace/browser/styles.mjs +11 -0
- package/src/graph-workspace/browser/workbench.mjs +351 -0
- package/src/graph-workspace/browser/workspace.mjs +431 -0
- package/src/graph-workspace/disclosure.mjs +39 -0
- package/src/graph-workspace/geometry.mjs +78 -0
- package/src/graph-workspace/index.mjs +11 -0
- package/src/graph-workspace/labels.mjs +50 -0
- package/src/graph-workspace/model.mjs +109 -0
- package/src/graph-workspace/recipes.mjs +88 -0
- package/src/graph-workspace/scale.mjs +95 -0
- package/src/graph-workspace/theme.mjs +156 -0
- package/src/knowledge/ontology-guide.mjs +152 -0
- package/src/knowledge-health/proof/installed-check.mjs +2 -2
- package/src/knowledge-health/rule-identity.mjs +7 -7
- package/src/knowledge-health/workshop.mjs +22 -2
- package/src/personal-workspace/selection.mjs +17 -2
- package/src/project/config.mjs +1 -1
- package/src/project/providers/github.mjs +24 -0
- package/src/project/repo-identity.mjs +3 -22
- package/src/projection/obsidian/contracts.mjs +1 -1
- package/src/projection/obsidian/materialize/path-registry.mjs +1 -1
- package/src/projection/obsidian/materialize/prepare-view.mjs +1 -1
- package/src/projection/obsidian/materialize/redaction.mjs +1 -1
- package/src/projection/obsidian/personal-workspace.mjs +24 -28
- package/src/projection/obsidian/plugin-bridge/channel.mjs +1 -1
- package/src/projection/obsidian/publication/publisher.mjs +25 -4
- package/src/projection/project.mjs +18 -14
- package/src/readiness/readiness.mjs +20 -11
- package/src/readiness-protocols/bundled-pack.mjs +14 -766
- package/src/readiness-protocols/bundled-selection.mjs +32 -0
- package/src/readiness-protocols/evidence.mjs +2 -1
- package/src/readiness-protocols/packs/mnstry.mjs +766 -0
- package/src/readiness-protocols/runtime.mjs +43 -6
- package/src/runtime/obsidian/engine.mjs +99 -26
- package/src/runtime/obsidian/lifecycle.mjs +3 -3
- package/src/runtime/obsidian/login-item.mjs +2 -2
- package/src/runtime/obsidian/machine-settings.mjs +52 -8
- package/src/runtime/obsidian/opening.mjs +2 -2
- package/src/runtime/obsidian/personal-selection.mjs +88 -26
- package/src/runtime/obsidian/pipeline.mjs +75 -7
- package/src/runtime/obsidian/private-lock.mjs +11 -2
- package/src/runtime/obsidian/selection-continuity.mjs +124 -0
- package/src/runtime/obsidian/service-main.mjs +15 -9
- package/src/runtime/obsidian/service.mjs +14 -0
- package/src/runtime/obsidian/unheld-evidence.mjs +1 -1
- package/src/runtime/obsidian/view-permission.mjs +2 -1
- package/src/upgrade/upgrade.mjs +23 -4
- package/templates/distribution-workspace/README.md +2 -2
- package/templates/external-project-workspace/atelier.project.json +3 -0
- package/templates/external-project-workspace/pack-lifecycle.json +2 -1
- package/templates/knowledge-workspace/README.md +2 -2
- package/docs/integration-and-review-plan.md +0 -409
- package/docs/integration-contract-decisions.md +0 -44
- package/docs/knowledge-health/devday/facilitator.md +0 -16
- package/docs/knowledge-health/devday/public-default.md +0 -107
- package/docs/knowledge-health/devday/quickstart.md +0 -18
- package/docs/knowledge-health/devday/support.md +0 -22
- package/docs/knowledge-health/exercise.md +0 -17
- package/docs/knowledge-health/support.md +0 -34
- package/docs/presentation-review-disposition.md +0 -47
- package/docs/progressive-ingestion-acceptance.md +0 -89
- package/docs/progressive-ingestion.md +0 -235
- /package/docs/{capability-stewardship.md → guides/capability-stewardship.md} +0 -0
- /package/docs/{exact-upgrades.md → guides/exact-upgrades.md} +0 -0
- /package/docs/{guided-upgrades.md → guides/guided-upgrades.md} +0 -0
- /package/docs/{inquiry-harnesses.md → guides/inquiry-harnesses.md} +0 -0
- /package/docs/{learning-harnesses.md → guides/learning-harnesses.md} +0 -0
- /package/docs/{local-review.md → guides/local-review.md} +0 -0
- /package/docs/{skill-steward.md → guides/skill-steward.md} +0 -0
- /package/docs/{template-upgrades.md → guides/template-upgrades.md} +0 -0
- /package/docs/{assurance-controls.md → maintainers/assurance-controls.md} +0 -0
- /package/docs/{attestation.md → reference/attestation.md} +0 -0
- /package/docs/{coauthor-session.md → reference/coauthor-session.md} +0 -0
- /package/docs/{continuity.md → reference/continuity.md} +0 -0
- /package/docs/{contract-stability.md → reference/contract-stability.md} +0 -0
- /package/docs/{decision-practices.md → reference/decision-practices.md} +0 -0
- /package/docs/{evidence-navigation.md → reference/evidence-navigation.md} +0 -0
- /package/docs/{extension-pack-lifecycle.md → reference/extension-pack-lifecycle.md} +0 -0
- /package/docs/{interaction-and-reflection.md → reference/interaction-and-reflection.md} +0 -0
- /package/docs/{local-state.md → reference/local-state.md} +0 -0
- /package/docs/{ontology.md → reference/ontology.md} +0 -0
- /package/docs/{optional-ingestion.md → reference/optional-ingestion.md} +0 -0
- /package/docs/{project-command-inventory.md → reference/project-command-inventory.md} +0 -0
- /package/docs/{semantic-ingestion.md → reference/semantic-ingestion.md} +0 -0
- /package/docs/{semantic-operation.md → reference/semantic-operation.md} +0 -0
- /package/docs/{vault-service.md → reference/vault-service.md} +0 -0
|
@@ -39,7 +39,7 @@ changes what a root command means is a fork, not a distribution.
|
|
|
39
39
|
Distributions must carry MNSTRY attribution. The normative wording of this
|
|
40
40
|
requirement lives in `TRADEMARKS.md` under "Required attribution" — this
|
|
41
41
|
document deliberately does not restate it, so the two cannot drift. See also
|
|
42
|
-
`docs/attestation.md` for how admission decisions are recorded.
|
|
42
|
+
`docs/reference/attestation.md` for how admission decisions are recorded.
|
|
43
43
|
|
|
44
44
|
Three related obligations live alongside it:
|
|
45
45
|
|
|
@@ -149,8 +149,10 @@ Workspace projections read
|
|
|
149
149
|
}
|
|
150
150
|
```
|
|
151
151
|
|
|
152
|
-
|
|
153
|
-
|
|
152
|
+
When the bundled readiness pack is selected, the rendered projection keeps the
|
|
153
|
+
"MNSTRY Tenant Readiness" heading: it names that pack. An explicit
|
|
154
|
+
`readiness.includeBundled: false` in the project's `ext["mnstry.atelier"]` omits
|
|
155
|
+
the section; absent or `true` retains the existing default.
|
|
154
156
|
|
|
155
157
|
### 5. Add an extension pack
|
|
156
158
|
|
|
@@ -165,10 +167,13 @@ The manifest carries the advisory attribution key:
|
|
|
165
167
|
}
|
|
166
168
|
```
|
|
167
169
|
|
|
168
|
-
Extension protocols load alongside the bundled twelve
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
170
|
+
Extension protocols load alongside the bundled twelve by default. A project
|
|
171
|
+
can [deselect the bundle](tenant-readiness.md#select-the-readiness-pack) and use
|
|
172
|
+
only its selected custom protocols; this does not create a replacement tenant
|
|
173
|
+
journey or packet. When the bundle is selected, pack contributions to the tenant
|
|
174
|
+
readiness packet ride in an unschema'd runtime document
|
|
175
|
+
(`mnstry.tenant-readiness-packet@v1`) whose shape is pinned by tests, not by the
|
|
176
|
+
versioned contracts the compat gate checks.
|
|
172
177
|
|
|
173
178
|
Declared pack paths resolve from the directory holding `atelier.project.json`
|
|
174
179
|
and may not contain `..` segments, so the pack directory has to sit inside the
|
|
@@ -216,5 +221,5 @@ a stylistic preference.
|
|
|
216
221
|
|
|
217
222
|
A distribution changes branding, not authority. Admission of any payload into
|
|
218
223
|
a MNSTRY destination is decided and recorded exactly as for the root package —
|
|
219
|
-
see `docs/attestation.md` for the admission model and how attestations record
|
|
224
|
+
see `docs/reference/attestation.md` for the admission model and how attestations record
|
|
220
225
|
those decisions.
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# Custom database extensions
|
|
2
|
+
|
|
3
|
+
Use `atelier extension init --directory ./custom-extension --id sample.counter`
|
|
4
|
+
to generate a TypeScript Postgres backend. The destination must not exist.
|
|
5
|
+
The command writes files only. It creates no database, starts no process and
|
|
6
|
+
grants no access. Apply the emitted migration to a customer-owned PostgreSQL 17
|
|
7
|
+
database with a separate migration role; keep the application login restricted.
|
|
8
|
+
|
|
9
|
+
The generated backend is a host adapter. Its host supplies the database client,
|
|
10
|
+
verified root public keys, pinned installation/release and an admission origin.
|
|
11
|
+
The server authenticates a short-lived invocation and obtains durable root
|
|
12
|
+
admission before creating its in-process effect scope. The Postgres helper
|
|
13
|
+
keeps a native transaction API and atomically commits custom writes with their
|
|
14
|
+
operation receipts. Credentials and application data stay in the customer backend.
|
|
15
|
+
|
|
16
|
+
Import portable wire types from `@mnstry/atelier/extensions`, member/admin clients
|
|
17
|
+
from `/extensions/client`, and backend helpers from `/extensions/server` and
|
|
18
|
+
`/extensions/postgres`. Browser clients never import database drivers or server keys.
|
|
19
|
+
The Postgres driver is installed in the generated project, not in Atelier.
|
|
20
|
+
|
|
21
|
+
Studio installation and member permission are separate. An authenticated host
|
|
22
|
+
owns membership, consent and product access. The manifest declares requested
|
|
23
|
+
capabilities; it grants none. Root-bound results use a separate authorized action.
|
|
24
|
+
The generated `atelier.extension-pack.json` reuses Atelier's canonical pack identity,
|
|
25
|
+
loader and lock adoption. Its namespaced `runtimeManifest` field pins this component's
|
|
26
|
+
manifest file and release digest. The runtime manifest describes the backend protocol;
|
|
27
|
+
it does not create another pack identity. Declare the emitted pack in your existing
|
|
28
|
+
project and adopt it with the normal validation/lock workflow. Pack loading remains
|
|
29
|
+
non-executing and grants no backend or root authority. Standalone hosts can consume
|
|
30
|
+
the portable SDK without an Atelier project.
|
|
31
|
+
|
|
32
|
+
Use `extension validate --directory ...` to check source/schema/release digests.
|
|
33
|
+
After reviewing an edit, use `extension seal --directory ...` to update them.
|
|
34
|
+
A valid seal identifies bytes; it proves neither publisher trust nor deployment.
|
|
35
|
+
Keep the package lockfile after installation. Lost write replies require explicit
|
|
36
|
+
lookup/recovery; neither client silently retries or refreshes a generation.
|
|
37
|
+
|
|
38
|
+
Scaffold profiles include postgres-sql, drizzle-db-first, drizzle-code-first,
|
|
39
|
+
prisma-7-postgres and convex-native. Drizzle retains its native query builder and transaction API;
|
|
40
|
+
Prisma retains its native generated client and pg adapter. Convex uses the native
|
|
41
|
+
starter described below. Prisma 8 remains an unqualified separate experiment. Scaffolding, synthetic
|
|
42
|
+
protocol tests, real provider tests, actual supported hosts, public release and
|
|
43
|
+
customer acceptance carry separate evidence. Private runtime bindings are not
|
|
44
|
+
distributed in this package.
|
|
45
|
+
|
|
46
|
+
The runtime parser is required after JSON Schema validation: it enforces unique IDs and cross-references, recovery scope/effect, current-schema readability, Unicode and total JSON bounds. Native Postgres operation results are capped at 60 KiB inside the transaction, leaving room for the original-operation recovery proof within the 64 KiB action output bound. Every failure after successful admission remains an uncertain operation; inspect its durable receipt before deciding what to do next.
|
|
47
|
+
|
|
48
|
+
The candidate SDK version 0.2.0-alpha.15 is unpublished. Before its release,
|
|
49
|
+
pack the reviewed Atelier checkout with `npm pack --ignore-scripts` and install
|
|
50
|
+
the resulting local tarball in the generated project with
|
|
51
|
+
`npm install /absolute/path/to/mnstry-atelier-0.2.0-alpha.15.tgz`. Then run
|
|
52
|
+
`npm run typecheck` and reseal the reviewed project. Do not expect the unpublished
|
|
53
|
+
version to install from the public registry. String length limits use Unicode
|
|
54
|
+
code points, matching JSON Schema; ill-formed surrogate sequences remain refused.
|
|
55
|
+
|
|
56
|
+
The source seal covers package.json, tsconfig.json, src/, present npm lockfiles,
|
|
57
|
+
and present Drizzle/Prisma configuration and Prisma schema files. Installing or
|
|
58
|
+
changing a lockfile requires an explicit reseal. It does not cover an arbitrary
|
|
59
|
+
external host or deployed image. Schema bytes cover schemas/ and migrations/.
|
|
60
|
+
Each source file is limited to 1 MiB; each canonical digest map is limited to
|
|
61
|
+
128 KiB. Deterministic invalid pack state refuses before rewriting the manifest.
|
|
62
|
+
The manifest and pack remain separate files: an interruption between their writes
|
|
63
|
+
is detected as stale by validation and requires an explicit reseal.
|
|
64
|
+
|
|
65
|
+
Choose a profile with `atelier extension init --profile drizzle-db-first` (or
|
|
66
|
+
`drizzle-code-first`, `prisma-7-postgres`). DB-first uses native `drizzle-kit pull`
|
|
67
|
+
restricted to extension_data, then normalizes the generated local relation import
|
|
68
|
+
for Node ESM. Review and retain the generated schema before resealing. Code-first
|
|
69
|
+
uses native generation: review and apply its SQL before the explicit forced-RLS
|
|
70
|
+
governance migration. Export the schema declaration so generation creates it.
|
|
71
|
+
Prisma 7 uses native client generation and the explicit application DSN supplied
|
|
72
|
+
by the customer host; the reviewed SQL still installs RLS. Generator output is
|
|
73
|
+
a proposed source change, never permission to mutate a shared or Root database.
|
|
74
|
+
Optional provider dependencies are installed in the generated app, never Atelier.
|
|
75
|
+
|
|
76
|
+
Custom native configuration, schema and migration locations must be listed in the
|
|
77
|
+
generated package.json `files` array as literal project-relative files or directories.
|
|
78
|
+
This reuses the project's native package input list; it adds no second project catalog
|
|
79
|
+
and never executes a TypeScript config during sealing. The list itself is sealed.
|
|
80
|
+
Conventional generated paths and present npm locks are included automatically.
|
|
81
|
+
Globs, parent paths, dependency directories, hidden paths except Git ignore/attribute files, and self-referential
|
|
82
|
+
manifest/pack inputs refuse. The seal identifies these declared inputs; it does not
|
|
83
|
+
claim an arbitrary external host, build artifact or dependency outside the project.
|
|
84
|
+
|
|
85
|
+
Prisma interactive transactions use a 12-second transaction timeout and a 10-second
|
|
86
|
+
SQL statement timeout. A manifest may allow up to 30 seconds, but the native
|
|
87
|
+
transaction can roll back sooner and the handler then reports operation unknown.
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
After reviewing and sealing a project, `atelier extension bundle --directory
|
|
91
|
+
./custom-extension --json` writes its registration bundle to stdout. It contains
|
|
92
|
+
the pinned manifest, exact schema strings and migration hashes. It uses the same
|
|
93
|
+
file checks as sealing and refuses stale inputs. It creates no account, database,
|
|
94
|
+
process or installation and applies no migration.
|
|
95
|
+
|
|
96
|
+
Pass this bundle to `createExtensionAdminClient(transport).registerRelease(bundle)`
|
|
97
|
+
through the consuming host's authenticated transport, then configure the returned
|
|
98
|
+
release using the existing connection and lifecycle methods. The receiving host
|
|
99
|
+
must independently verify every release and file digest and apply its publisher
|
|
100
|
+
policy. A registration receipt is separate from health, enablement and consent.
|
|
101
|
+
An older host without registration refuses with `unavailable`; clients do not
|
|
102
|
+
silently enable or repeat the operation.
|
|
103
|
+
|
|
104
|
+
A generic counter response is custom application data. A host's result-recording
|
|
105
|
+
contract can require a different schema and narrower bounds. Author that result
|
|
106
|
+
explicitly, update its action output schema, review and reseal it, and request the
|
|
107
|
+
host's separate permission before recording it. Declaring a root-write permission
|
|
108
|
+
alone does not make an arbitrary action result compatible.
|
|
109
|
+
|
|
110
|
+
## Native Convex starter
|
|
111
|
+
|
|
112
|
+
Use `atelier extension init --profile convex-native --directory ./custom-extension`
|
|
113
|
+
for a TypeScript project pinned to Convex 1.46.0. This optional adapter uses native
|
|
114
|
+
Convex schema/functions, indexes and OCC transactions. It installs no SQL driver
|
|
115
|
+
and adds no Convex dependency to Atelier itself. Import native backend helpers
|
|
116
|
+
from `@mnstry/atelier/extensions/convex`; browser clients use the same portable
|
|
117
|
+
`/extensions/client` interface as the SQL profiles.
|
|
118
|
+
|
|
119
|
+
The HTTP action verifies the original Root delegation and consumes admission
|
|
120
|
+
once. It then passes that token and the canonical payload to an **internal
|
|
121
|
+
mutation**, which verifies them again. A serialized scope or an `admitted`
|
|
122
|
+
boolean is not authority. Native writes and the indexed operation result commit
|
|
123
|
+
in one mutation. Output validators refuse invalid values and preserve canonical
|
|
124
|
+
result bytes, so response and durable lookup cannot diverge. Root callbacks and provider commits remain separate. A lost
|
|
125
|
+
reply requires a new admitted lookup operation, without repeating the write.
|
|
126
|
+
No ordinary public mutation/query exposes the generated member tables. `GET /health`
|
|
127
|
+
reports only the immutable release/schema health envelope after native index checks.
|
|
128
|
+
|
|
129
|
+
The customer owns its Convex project and deployment. Set the public verification
|
|
130
|
+
keys, issuer, exact invocation audience, opaque installation reference and Root
|
|
131
|
+
admission origin in that deployment. Keep admin keys and member identities out
|
|
132
|
+
of the browser and runtime request. HTTPS is required by default. The explicit
|
|
133
|
+
local test option additionally requires both provider deployment URLs to be
|
|
134
|
+
literal loopback addresses; Convex can set `NODE_ENV` to production even locally.
|
|
135
|
+
|
|
136
|
+
The versioned native schema is `migrations/001-schema.ts`; `convex/schema.ts`
|
|
137
|
+
re-exports it. The existing schema digest binds those migration bytes. Native
|
|
138
|
+
source and generated code are sealed as bundle inputs. Generate provider code,
|
|
139
|
+
strictly typecheck, seal, validate and export the bundle; validate again after
|
|
140
|
+
deployment. Any changed generated input requires resealing and requalification.
|
|
141
|
+
Atelier's CLI performs no provider login, process startup or deployment.
|
|
142
|
+
|
|
143
|
+
The sample supports scoped set/get/export/delete and durable lookup. Deletion
|
|
144
|
+
atomically clears live sample rows and older operation results for up to 500
|
|
145
|
+
operations; larger histories refuse and need an explicit paginated erasure design.
|
|
146
|
+
Backups remain subject to the operator's retention policy. In-flight admitted
|
|
147
|
+
mutations may finish after disable. Public reactive feeds, revocation on feed
|
|
148
|
+
reconnect, schema backfills, portability and complete host/privacy acceptance
|
|
149
|
+
remain unqualified. The native starter's provider proof does not enable a
|
|
150
|
+
receiving host's Convex profile or establish a complete customer journey.
|
|
151
|
+
|
|
152
|
+
## Readiness extension packs
|
|
153
|
+
|
|
154
|
+
Local readiness protocols use the existing extension-pack declarations in
|
|
155
|
+
`atelier.project.json`. They are separate from database runtime adapters. A
|
|
156
|
+
project can select custom protocols without the bundled MNSTRY readiness pack:
|
|
157
|
+
|
|
158
|
+
```json
|
|
159
|
+
{
|
|
160
|
+
"ext": {
|
|
161
|
+
"mnstry.atelier": {
|
|
162
|
+
"readiness": { "includeBundled": false },
|
|
163
|
+
"extensionPacks": [
|
|
164
|
+
{
|
|
165
|
+
"id": "sample.readiness",
|
|
166
|
+
"version": "v1",
|
|
167
|
+
"path": "packs/sample-pack.v1.json",
|
|
168
|
+
"enabled": true
|
|
169
|
+
}
|
|
170
|
+
]
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Review the pack, then run `atelier extension-pack validate` and
|
|
177
|
+
`atelier lock write`, both with `--project ./atelier.project.json`.
|
|
178
|
+
Use `atelier readiness protocols --project ./atelier.project.json` to list the
|
|
179
|
+
selected protocols, then pass a full namespaced ID to `atelier readiness run`
|
|
180
|
+
or `atelier review run` with the same project. Evidence-bound review still
|
|
181
|
+
requires the existing [pack compatibility declaration](../reference/extension-pack-lifecycle.md).
|
|
182
|
+
Existing answer, proposal and evidence rules continue to apply.
|
|
183
|
+
|
|
184
|
+
Omitting `readiness.includeBundled` or setting it to `true` keeps custom
|
|
185
|
+
protocols alongside the bundle. With `false`, bundled IDs and aliases are
|
|
186
|
+
unavailable to project runs. A standalone `readiness protocols` invocation
|
|
187
|
+
without a project selection still lists the bundle. Generic graph, project and
|
|
188
|
+
readiness checks remain available; the MNSTRY journey, packet and readiness
|
|
189
|
+
export commands refuse. See [pack selection and lock transitions](tenant-readiness.md#select-the-readiness-pack).
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Graph projection refresh
|
|
2
|
+
|
|
3
|
+
This is an experimental host integration module in `src/graph-refresh/`. It is
|
|
4
|
+
not enabled by `atelier dev --knowledge`, and has no published package export.
|
|
5
|
+
It adds no listener, daemon, graph database, identity or grant authority. A host
|
|
6
|
+
attaches its start and stop to the existing sidecar lifecycle. The first proof
|
|
7
|
+
uses invented graph-view fixtures; authenticated host receiving is separate.
|
|
8
|
+
|
|
9
|
+
The Git source, canonical graph builder and knowledge plan still own source
|
|
10
|
+
identity and semantics. Refresh consumes complete authorized projections. It
|
|
11
|
+
does not extract a second graph, accept a relation, change a plan or apply a
|
|
12
|
+
proposal. The existing graph file cache supplies incremental source reuse.
|
|
13
|
+
|
|
14
|
+
## Lifecycle ports
|
|
15
|
+
|
|
16
|
+
`createGraphRefresh` takes these host functions:
|
|
17
|
+
|
|
18
|
+
| Port | Contract |
|
|
19
|
+
| --- | --- |
|
|
20
|
+
| `build({generation,binding,signal})` | Return one complete authorized graph-view projection. Compute in isolation, honor cancellation, and bound execution. Do not write a current output from inside the builder. |
|
|
21
|
+
| `validate(projection)` | Return exactly `true` only for a supported, complete projection with a verified digest. Use the projection owner's validator. It may be asynchronous. |
|
|
22
|
+
| `revalidate(binding,projection)` | Return exactly `true` only while this host-issued binding and every requested historical or current projection are still readable. `projection` is null before the build. Errors and other values refuse. It may be asynchronous. |
|
|
23
|
+
| `stage({projection,generation,signal})` | Optional preparation of a complete host output, isolated from readers. Return `{commit,discard}`. It may be asynchronous. The default uses only the controller's in-memory pointer. |
|
|
24
|
+
| `commit()` | Synchronously and atomically replace the host's current output. Never queue an asynchronous current write. A promise result is unsupported and refuses controller publication. |
|
|
25
|
+
| `discard()` | Idempotently remove only this uncommitted staging output. It may be asynchronous. Failure retains cleanup custody even after supersession, access loss or stop. |
|
|
26
|
+
| `clear()` | Synchronously clear host reader caches, inspectors, selections, search results and renderer resources. A failure or promise result blocks accepting a replacement binding. |
|
|
27
|
+
| `onCleanup(outcome)` | Optional trusted host notification `{cleanupId,state,code}` for resolved or failed staging cleanup. It carries no source, path, binding or raw exception and is never a reader event. |
|
|
28
|
+
|
|
29
|
+
`setAccess({key,expiresAtMs,...privateHostState})` accepts a trusted host binding.
|
|
30
|
+
The key binds principal, exact authorized repositories, grant revision and
|
|
31
|
+
expiry, policy and request filter. This is a cache and lifecycle key, not proof
|
|
32
|
+
of a grant. Keep any instance-issued capability object in private host state;
|
|
33
|
+
do not clone that capability or reconstruct it from browser JSON. Each access
|
|
34
|
+
replacement first purges prior history, projection and selection. A host access
|
|
35
|
+
adapter must revalidate the actual capability, not just compare the key.
|
|
36
|
+
|
|
37
|
+
`start()` starts a pending build only when a binding is present. `invalidate()`
|
|
38
|
+
immediately marks an existing view stale, aborts a superseded build and requests
|
|
39
|
+
a replacement. Bursts share a fixed coalescing window, default 40 ms. Only one
|
|
40
|
+
build and staging operation runs at a time. An abort-ignoring builder must
|
|
41
|
+
settle before its successor can compute; its late result cannot publish.
|
|
42
|
+
|
|
43
|
+
Every awaited build, validation, access check and staging step is followed by a
|
|
44
|
+
generation fence. A final current access check and fence precede synchronous
|
|
45
|
+
commit and pointer replacement without an intervening await. Partial builds,
|
|
46
|
+
failed saves and obsolete generations never become the controller's current
|
|
47
|
+
view. A conforming staging adapter is required for equivalent disk behavior.
|
|
48
|
+
|
|
49
|
+
Cleanup custody is separate from publication and reader eligibility.
|
|
50
|
+
`cleanupStatus()` returns sanitized host-only records with a `cleanupId` and
|
|
51
|
+
`cleaning` or `failed` state. A failed discard retains its transaction handle;
|
|
52
|
+
new builds and staging stop until the host resolves it with
|
|
53
|
+
`await retryCleanup(cleanupId)`. Concurrent retries share the complete operation
|
|
54
|
+
and its result, including a rejection. A failed attempt requires a separate host
|
|
55
|
+
call to retry; a waiting caller never starts another attempt automatically.
|
|
56
|
+
Success releases the handle and requests a fresh build if the host is running
|
|
57
|
+
with current access. Rejection remains retained and notifies the host again.
|
|
58
|
+
This bounds unresolved custody to one transaction without a retry daemon.
|
|
59
|
+
|
|
60
|
+
The host must consume these operational outcomes and keep the controller until
|
|
61
|
+
cleanup is resolved. Never serialize cleanup records into a reader response.
|
|
62
|
+
Grant loss still purges private reader state immediately; resource custody does
|
|
63
|
+
not authorize any old view delivery. `stop()` retains unresolved cleanup, and
|
|
64
|
+
`await flush()` settles an already in-flight operation even after stop. Process
|
|
65
|
+
restart recovery belongs to the staging adapter's existing resource journal;
|
|
66
|
+
this controller does not add a persistent store or trust a saved projection.
|
|
67
|
+
|
|
68
|
+
`read(digest?)` revalidates before returning a detached copy. A previous view is
|
|
69
|
+
returned with `stale:true` after a source edit or failure, and `historical:true`
|
|
70
|
+
when it is no longer the published snapshot. History is in memory, bounded to
|
|
71
|
+
three previous digests by default, and available only under the same still-valid
|
|
72
|
+
binding. A missing digest returns no projection. It does not fall back to a
|
|
73
|
+
different snapshot. Restart requires fresh host access and a successful rebuild;
|
|
74
|
+
there is no automatic trust of saved projections.
|
|
75
|
+
|
|
76
|
+
`select(ref,digest)` accepts a current qualified `{repoId,localId}` only against
|
|
77
|
+
the exact published digest. `compare(beforeDigest,afterDigest)` revalidates both
|
|
78
|
+
retained snapshots and fences access changes before returning their comparison.
|
|
79
|
+
|
|
80
|
+
## Revocation and UI receiving
|
|
81
|
+
|
|
82
|
+
On a grant or policy notification the host first retires its access capability,
|
|
83
|
+
then calls `invalidateAccess()`. This synchronously aborts work and drops the
|
|
84
|
+
current projection, all history, selection and host caches. Expiry and a refused
|
|
85
|
+
read or build check do the same. They cannot wait for a replacement build. Each
|
|
86
|
+
read still checks access, covering a missed notification before another delivery.
|
|
87
|
+
The controller cannot detect remote revocation without its host's notification
|
|
88
|
+
or revalidation; this module does not establish an authenticated access host.
|
|
89
|
+
|
|
90
|
+
Subscribe with `subscribe(listener)` and dispose with its returned unsubscribe
|
|
91
|
+
function. Events contain only `{type,phase,generation,stale,failure}`. On `clear`,
|
|
92
|
+
the UI must immediately dispose its graph, inspector, selection, query caches
|
|
93
|
+
and pending render work, including all WebGL resources that retain private
|
|
94
|
+
labels or topology. A previous browser copy cannot be recalled by clearing the
|
|
95
|
+
controller alone. Conforming hosts must connect this event and `clear` to their
|
|
96
|
+
own state and verify the visible result. Do not keep the old graph on screen
|
|
97
|
+
while fetching a narrower replacement. Old refs and diagnostics are absent
|
|
98
|
+
from clear events. A listener failure does not prevent other listeners running.
|
|
99
|
+
|
|
100
|
+
| Phase | Meaning |
|
|
101
|
+
| --- | --- |
|
|
102
|
+
| `stopped` | No delivery; snapshots and selections cleared. |
|
|
103
|
+
| `denied` | No current host binding or access refused/expired; no delivery. |
|
|
104
|
+
| `pending` | Authorized first build requested. |
|
|
105
|
+
| `building` | Build or staging in progress; an existing view is explicitly stale. |
|
|
106
|
+
| `stale` | Source change invalidated the published generation. |
|
|
107
|
+
| `current` | Latest complete generation passed validation and access checks. |
|
|
108
|
+
| `failed` | Build, save or staging cleanup failed. An authorized old view may remain stale. |
|
|
109
|
+
| `unsupported` | Host validator refused the projection. An authorized old view may remain stale. |
|
|
110
|
+
|
|
111
|
+
Failures expose generic codes, never arbitrary build exceptions or source paths.
|
|
112
|
+
The host can keep source-level details in an independently authorized diagnostic
|
|
113
|
+
channel. `flush()` awaits pending work for a drill or on-demand build; it is not
|
|
114
|
+
a background completion promise. `stop()` purges immediately and fences late
|
|
115
|
+
results. The host must also await its own resource cleanup where required.
|
|
116
|
+
|
|
117
|
+
## Local watcher binding
|
|
118
|
+
|
|
119
|
+
`createLocalGraphRefresh({roots,...ports})` reuses Atelier's existing filesystem
|
|
120
|
+
watcher factory. Roots are trusted host inputs for the exact current permitted
|
|
121
|
+
repository set. It does not discover, clone or authorize repositories. Start it
|
|
122
|
+
with the existing sidecar, and call `stop()` from that sidecar's close path.
|
|
123
|
+
On a replacement access decision, pass the new permitted roots explicitly as
|
|
124
|
+
`setAccess(binding,roots)`. Old watchers close on clear; delayed events from a
|
|
125
|
+
retired watcher cannot invalidate the replacement reader's projection.
|
|
126
|
+
|
|
127
|
+
Watch events are hints. A periodic rebuild, default every 30 seconds, reconciles
|
|
128
|
+
dropped events using the canonical builder and file cache. It does not interrupt
|
|
129
|
+
an in-flight build. `status().watchState` is `watching`, `unavailable` or `stopped`;
|
|
130
|
+
failure to watch remains visible while periodic reconciliation can continue.
|
|
131
|
+
Neither watcher nor reconciliation timer keeps a second process alive.
|
|
132
|
+
|
|
133
|
+
## Snapshot comparison
|
|
134
|
+
|
|
135
|
+
`compareGraphSnapshots(before,after)` is a pure derived comparison. Trusted callers
|
|
136
|
+
must revalidate both snapshots first; controller `compare` performs that check.
|
|
137
|
+
The pure function refuses incompatible schemas, different access contexts or
|
|
138
|
+
filters, duplicate qualified refs and dangling references. It does not turn
|
|
139
|
+
matching access metadata into authentication.
|
|
140
|
+
|
|
141
|
+
Nodes compare by qualified ref, sources by repository and path with all exact
|
|
142
|
+
pins retained, edges by edge id, and questions by question id. A rename does not
|
|
143
|
+
merge identities. Assertions sharing a semantic triple retain separate edge ids.
|
|
144
|
+
Changed bytes, revision, locator, edge support or question state are included.
|
|
145
|
+
Possible question impact conservatively follows permitted edges in either
|
|
146
|
+
direction within the supplied slice. It is explicitly possible impact, not
|
|
147
|
+
proof of a semantic dependency or completeness outside that slice. No model,
|
|
148
|
+
provider, source write or accepted history mutation occurs.
|
|
149
|
+
|
|
150
|
+
Run `node --test test/graph-refresh-*.test.mjs` for the synthetic lifecycle,
|
|
151
|
+
comparison and real local file-edit/restart drills. These checks do not qualify
|
|
152
|
+
the held sidecar integration, a real recipient access host, or a browser renderer.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Graph workspace
|
|
2
|
+
|
|
3
|
+
A graph workspace lets a person explore a whole knowledge graph, then shape its concepts one step at a time. It is built in three layers, and the last one belongs to the owner:
|
|
4
|
+
|
|
5
|
+
1. **Atelier** ships primitives and defaults: the read model, scale and layout helpers, label placement, recipes, themes, authoring and the browser rooms.
|
|
6
|
+
2. **A coach** builds tooling for a cohort from those pieces: their own recipes, a theme, perhaps a different shell around the same rooms.
|
|
7
|
+
3. **The owner** shapes their own system from everything they receive: hiding what they do not use, renaming, adding their own recipes and appearance.
|
|
8
|
+
|
|
9
|
+
Nothing in a layer is hard-coded into the one below it. Recipes and themes are data that compose by name, and every resolved recipe field records which layer set it.
|
|
10
|
+
|
|
11
|
+
## One graph, three rooms
|
|
12
|
+
|
|
13
|
+
- **Constellation.** Every readable record, alive on a night-sky canvas (the default), with soft glows for the owner's folders and folder names at a distance. Names fade in by importance as you zoom in and never overlap each other or the controls. Hovering lights a neighbourhood; clicking selects without moving the map. "Let it move" turns on live physics.
|
|
14
|
+
- **Workbench.** A sparse set of rich cards (incoming on the left, outgoing on the right) beside a focused authoring sheet. One subject at a time, one step at a time, with deferral and structural guidance. Drafts belong to one workspace identity (and reader scope, where the host has one), so two workspaces never see each other's drafts. Without an identity they live in this tab only. With `profile.id` or `draftIdentity` they persist in this browser, and with a host storage port they persist there. The interface says which.
|
|
15
|
+
- **Review.** Before and proposed, the state of the evidence, and that a person decides. Nothing is sent.
|
|
16
|
+
|
|
17
|
+
A work **recipe** picks the room, the lens and the single primary action. Lenses (`question`, `concept`, `zone`) belong to the constellation, subjects (`record`, `concept`, `relation`) to the workbench, and the review room takes neither. The primary action is one of `search`, `open-evidence`, `next-step`, `walk`, `review` or `pick`, and only one the recipe's room can carry out (`primaryActionsFor`). Combinations the shell cannot honour are refused when recipes are composed, and recipes the workspace cannot run (a relation recipe with no relations, say) are not offered. Defaults: *Explore*, *Answer a question*, *Refine a concept*, *Inspect a record*. A command bar (⌘K or `/`) replaces persistent navigation. Text view lists every record, and without WebGL every task remains available through Text view and the workbench.
|
|
18
|
+
|
|
19
|
+
## Honesty rules the primitives keep
|
|
20
|
+
|
|
21
|
+
- Zones come only from the owner's folder structure. No computed clusters are drawn.
|
|
22
|
+
- A record belongs to a concept only when the record carries the concept's tag itself. Text matches are offered as suggestions labelled "not members".
|
|
23
|
+
- Edge direction is preserved. Edges fall into three classes: written links, folder containment and declared relations. Only declared relations are drawn with arrows and emphasis.
|
|
24
|
+
- Links to records outside the readable set are counted, never drawn.
|
|
25
|
+
- "Ready for human review" means complete and grounded in readable records. It is not a verdict on truth.
|
|
26
|
+
|
|
27
|
+
## Scale
|
|
28
|
+
|
|
29
|
+
`planConstellation()` decides whether to draw every record or to show zones. The default budget is 12,000 records or 60,000 links. Above it, `aggregateZones()` gives counts by zone and directed bundles between zones, and `zoneSlice()` opens one zone at a time. Every link touching the zone is accounted for exactly once (drawn, omitted inside the zone, to another zone, or omitted to another zone), and plan concepts list only the kept records that declare them, with the rest counted. Aggregating 30,000 records is part of the test suite. On a laptop GPU the constellation holds 60 fps at 5,000 records, with labels and zone glows.
|
|
30
|
+
|
|
31
|
+
## Build a workspace
|
|
32
|
+
|
|
33
|
+
```js
|
|
34
|
+
import Graph from 'graphology'
|
|
35
|
+
import Sigma from 'sigma'
|
|
36
|
+
import { EdgeArrowProgram } from 'sigma/rendering'
|
|
37
|
+
import forceAtlas2 from 'graphology-layout-forceatlas2'
|
|
38
|
+
import FA2Layout from 'graphology-layout-forceatlas2/worker'
|
|
39
|
+
import { buildWorkspaceModel, layoutWorkspace, composeRecipes, composeTheme, DEFAULT_THEME } from '@mnstry/atelier/graph-workspace'
|
|
40
|
+
import { mountGraphWorkspace } from '@mnstry/atelier/graph-workspace/browser'
|
|
41
|
+
|
|
42
|
+
// graph: an Atelier knowledge graph the host has already limited to this reader.
|
|
43
|
+
const model = buildWorkspaceModel({ graph, plan, zoneRule: { prefix: 'notes/', depth: 1 } })
|
|
44
|
+
layoutWorkspace(model, { Graph, forceAtlas2 }) // or store positions at build time
|
|
45
|
+
|
|
46
|
+
const recipes = composeRecipes({ coach: coachRecipes, owner: ownerRecipes }).recipes
|
|
47
|
+
const theme = composeTheme(DEFAULT_THEME, coachTheme, ownerTheme) // every layer is checked; one bad layer refuses the theme
|
|
48
|
+
|
|
49
|
+
mountGraphWorkspace(element, { model, recipes, theme, deps: { Sigma, Graph, EdgeArrowProgram, FA2Layout },
|
|
50
|
+
profile: { id: 'workspace-id', name: 'My notebook', vocabulary: { record: 'note', records: 'notes', zone: 'folder' } },
|
|
51
|
+
// Optional: persist drafts to the host instead of this browser.
|
|
52
|
+
// storage: hostDraftPort, draftIdentity: { workspace: 'workspace-id', reader: readerScope },
|
|
53
|
+
})
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Atelier does not depend on `sigma` or `graphology`; the host injects them. Pin sigma 3 and graphology 0.25 or later in the consuming application.
|
|
57
|
+
|
|
58
|
+
## Keeping a shareable layer clean
|
|
59
|
+
|
|
60
|
+
A coach or owner who builds on private workspaces can check that nothing from them reaches a shareable layer. `fingerprintsFrom()` derives distinctive strings from a private graph and plan (record ids, paths, long titles, summary openings, plan wording and names). `scanForFingerprints()` reports where any of them appears in shareable text, naming the file and a masked sample only.
|
|
61
|
+
|
|
62
|
+
## What this does not do
|
|
63
|
+
|
|
64
|
+
It does not authenticate a reader, grant access, read source bodies, save to a source or apply a plan change. Drafts that outlive the browser, and proposals, need a host storage port bound to the coauthor ledger, and the host's ontology guide remains the authority on guidance. See the [reference](../reference/graph-workspace.md) for every export.
|
|
@@ -4,10 +4,11 @@ Status: experimental. Shipped since 0.2.0-alpha.13 as the `atelier ingest`
|
|
|
4
4
|
command and the `@mnstry/atelier/ingestion` export.
|
|
5
5
|
The local runner preserves explicitly selected files and makes bounded text
|
|
6
6
|
search useful before semantic interpretation. It composes the existing
|
|
7
|
-
[immutable intake](intake-and-guides.md) with a resumable plan. It never enrolls
|
|
7
|
+
[immutable intake](../reference/intake-and-guides.md) with a resumable plan. It never enrolls
|
|
8
8
|
raw captures into the canonical graph or treats extracted text as accepted
|
|
9
|
-
knowledge.
|
|
10
|
-
|
|
9
|
+
knowledge. Host integrations use the existing [semantic proposal processor](../reference/semantic-ingestion.md),
|
|
10
|
+
[semantic operation](../reference/semantic-operation.md) and [optional suppliers](../reference/optional-ingestion.md)
|
|
11
|
+
under their documented profiles and limits.
|
|
11
12
|
|
|
12
13
|
## Start with a purpose and selected sources
|
|
13
14
|
|
|
@@ -169,13 +170,13 @@ verification and correction effort. Compare cost per useful accepted result,
|
|
|
169
170
|
with quality floors and rare exceptions preserved. Keep private examples and
|
|
170
171
|
methods in their owning workspace.
|
|
171
172
|
|
|
172
|
-
##
|
|
173
|
+
## Host responsibilities and limits
|
|
173
174
|
|
|
174
|
-
The
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
175
|
+
The local runner supplies no richer document/media processors, connector census,
|
|
176
|
+
permission-change orchestration or provider execution. Semantic processing and
|
|
177
|
+
graph decisions use separate APIs and require qualified host integration.
|
|
178
|
+
Native scheduling, installed processors, provider credentials/budgets, progress
|
|
179
|
+
and source review, cancellation, notifications and scoped harness delivery belong
|
|
180
|
+
to the host. The public reference path remains usable without a proprietary
|
|
181
|
+
runtime. Neither private material nor private methodology belongs in public
|
|
182
|
+
fixtures or distributed proprietary prompts.
|
|
@@ -30,7 +30,7 @@ sources, concepts, relations, and questions before operational use.
|
|
|
30
30
|
|
|
31
31
|
An existing enrolled project needs a valid `knowledge-plan.json` beside its
|
|
32
32
|
project configuration. Use the schema and guide in
|
|
33
|
-
[knowledge setup](knowledge-setup.md). Rebuild the projection when its source
|
|
33
|
+
[knowledge setup](../start/knowledge-setup.md). Rebuild the projection when its source
|
|
34
34
|
changes. The knowledge panels read the current enrolled graph on request; the
|
|
35
35
|
ordinary projection remains the last explicitly built projection.
|
|
36
36
|
|
|
@@ -216,7 +216,7 @@ Start takes `requestId` (a fresh UUID, retained for exact retry), `flow`
|
|
|
216
216
|
and `author`. Read/recover take only `sessionId`. Event takes `sessionId` and
|
|
217
217
|
an `event` with a unique `id`, current `expectedRevision`, and reducer `type`.
|
|
218
218
|
An `answer` or `propose` also carries `text`. All other event behavior follows
|
|
219
|
-
[coauthor sessions](coauthor-session.md). Clients cannot submit receipts or
|
|
219
|
+
[coauthor sessions](../reference/coauthor-session.md). Clients cannot submit receipts or
|
|
220
220
|
failure events. Stale versions never silently overwrite an intervening answer.
|
|
221
221
|
|
|
222
222
|
Ask one useful question at a time. Record the person's exact answer. For
|
|
@@ -5,6 +5,11 @@ decisions, and supplies explicitly activated lessons to a named harness. It is
|
|
|
5
5
|
an experimental local source capability. It requires consumer integration and
|
|
6
6
|
does not establish availability in a published package or installed desktop.
|
|
7
7
|
|
|
8
|
+
Here, `capture` means recording the observation explicitly supplied by a caller
|
|
9
|
+
or on stdin. It does not monitor an editor, microphone, conversation or desktop.
|
|
10
|
+
The [independent local start](../start/independent-start.md) needs no desktop or MNSTRY
|
|
11
|
+
account; integrated capture is a separate host capability.
|
|
12
|
+
|
|
8
13
|
A person defines the task and scope, an agent can propose a lesson, and the
|
|
9
14
|
person reviews its wording and consequences. Evidence can be represented before
|
|
10
15
|
acceptance. Only accepted, activated content is eligible for task context.
|
|
@@ -202,11 +207,13 @@ Campaigns may stay in their own workspaces; selected references do not change
|
|
|
202
207
|
their writer ownership. Private evidence projections stay outside committed
|
|
203
208
|
canonical graphs unless an owner explicitly authors an appropriate source.
|
|
204
209
|
|
|
205
|
-
A
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
+
A consuming host owns integrated capture, authenticating its caller, background
|
|
211
|
+
jobs, provider access, budgets, review controls and actual harness integration.
|
|
212
|
+
MNSTRY's desktop utility is a separate proprietary consumer of this public
|
|
213
|
+
foundation. Other hosts can use the same portable APIs and optional public
|
|
214
|
+
startup, editor and native-presentation bindings. Private feedback, preferences,
|
|
215
|
+
methods and authored skills remain in their owning workspace. Basic local
|
|
216
|
+
learning and export require no MNSTRY account or service.
|
|
210
217
|
|
|
211
218
|
Run `node --test test/learning-*.test.mjs` on the supported Node version for
|
|
212
219
|
the local acceptance cases. They cover terminal capture through withdrawal
|