@mnstry/atelier 0.2.0-alpha.10 → 0.2.0-alpha.12

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.
Files changed (81) hide show
  1. package/CHANGELOG.md +385 -0
  2. package/README.md +10 -6
  3. package/contracts/atelier-obsidian-generation-manifest.v2.schema.json +372 -0
  4. package/contracts/compat-baseline.json +1 -1
  5. package/docs/assurance-controls.md +3 -2
  6. package/docs/install.md +3 -3
  7. package/docs/local-services.md +62 -11
  8. package/docs/obsidian-contract.md +681 -39
  9. package/docs/obsidian-plugin.md +585 -0
  10. package/docs/obsidian.md +292 -48
  11. package/docs/release-engineering.md +7 -1
  12. package/docs/upgrade.md +32 -3
  13. package/fixtures/obsidian/contracts/generation-manifest-v2/invalid/case-only-collision.v2.json +160 -0
  14. package/fixtures/obsidian/contracts/generation-manifest-v2/invalid/flat-note-path.v2.json +160 -0
  15. package/fixtures/obsidian/contracts/generation-manifest-v2/invalid/hidden-folder.v2.json +160 -0
  16. package/fixtures/obsidian/contracts/generation-manifest-v2/invalid/identity-in-the-body.v2.json +160 -0
  17. package/fixtures/obsidian/contracts/generation-manifest-v2/invalid/link-breaking-name.v2.json +160 -0
  18. package/fixtures/obsidian/contracts/generation-manifest-v2/invalid/missing-identity-region.v2.json +156 -0
  19. package/fixtures/obsidian/contracts/generation-manifest-v2/invalid/missing-layout-version.v2.json +159 -0
  20. package/fixtures/obsidian/contracts/generation-manifest-v2/invalid/note-named-like-a-folder.v2.json +160 -0
  21. package/fixtures/obsidian/contracts/generation-manifest-v2/invalid/unknown-region-kind.v2.json +160 -0
  22. package/fixtures/obsidian/contracts/generation-manifest-v2/invalid/v1-contract-version.v2.json +161 -0
  23. package/fixtures/obsidian/contracts/generation-manifest-v2/valid/three-notes.v2.json +160 -0
  24. package/fixtures/obsidian/edits/workspace.json +1 -1
  25. package/fixtures/obsidian/materialization/expected-full.json +21 -21
  26. package/fixtures/obsidian/materialization/expected-full.layout-1.json +99 -0
  27. package/fixtures/obsidian/materialization/expected-scoped.json +7 -7
  28. package/fixtures/obsidian/materialization/expected-scoped.layout-1.json +39 -0
  29. package/package.json +7 -3
  30. package/plugins/obsidian/main.js +444 -0
  31. package/plugins/obsidian/manifest.json +9 -0
  32. package/plugins/obsidian/styles.css +22 -0
  33. package/src/commands/obsidian.mjs +89 -10
  34. package/src/contracts/corpus.mjs +6 -0
  35. package/src/egress/forbidden-egress.mjs +2 -0
  36. package/src/project/private-state.mjs +10 -1
  37. package/src/projection/obsidian/contracts.mjs +224 -18
  38. package/src/projection/obsidian/edits/apply.mjs +12 -7
  39. package/src/projection/obsidian/edits/regions.mjs +137 -42
  40. package/src/projection/obsidian/materialize/index.mjs +6 -3
  41. package/src/projection/obsidian/materialize/path-registry.mjs +443 -57
  42. package/src/projection/obsidian/materialize/prepare-view.mjs +382 -131
  43. package/src/projection/obsidian/materialize/redaction.mjs +327 -0
  44. package/src/projection/obsidian/materialize/settings.mjs +113 -34
  45. package/src/projection/obsidian/plugin-bridge/bundle.mjs +50 -0
  46. package/src/projection/obsidian/plugin-bridge/channel.mjs +174 -0
  47. package/src/projection/obsidian/plugin-bridge/index.mjs +10 -0
  48. package/src/projection/obsidian/proposals/observation.mjs +10 -5
  49. package/src/projection/obsidian/publication/bridge-script.mjs +11 -5
  50. package/src/projection/obsidian/publication/index.mjs +2 -1
  51. package/src/projection/obsidian/publication/publisher.mjs +173 -26
  52. package/src/projection/obsidian/publication/transport.mjs +124 -17
  53. package/src/projection/obsidian/publication/vault-list.mjs +199 -0
  54. package/src/projection/obsidian/recovery/restart.mjs +3 -1
  55. package/src/projection/obsidian/recovery/store.mjs +11 -4
  56. package/src/projection/obsidian/selection-ui/focus.mjs +14 -7
  57. package/src/projection/obsidian/selection-ui/selection-state.mjs +2 -2
  58. package/src/projection/obsidian/selection-ui/selection.mjs +8 -3
  59. package/src/runtime/obsidian/app-capability.mjs +115 -14
  60. package/src/runtime/obsidian/app-production-seams.mjs +126 -37
  61. package/src/runtime/obsidian/app-registration.mjs +166 -0
  62. package/src/runtime/obsidian/engine.mjs +127 -11
  63. package/src/runtime/obsidian/extension-points.mjs +1 -1
  64. package/src/runtime/obsidian/index.mjs +5 -1
  65. package/src/runtime/obsidian/launch-plan.mjs +88 -0
  66. package/src/runtime/obsidian/lifecycle.mjs +105 -14
  67. package/src/runtime/obsidian/opening.mjs +240 -51
  68. package/src/runtime/obsidian/pending-edits.mjs +10 -0
  69. package/src/runtime/obsidian/plugin-channel.mjs +281 -0
  70. package/src/runtime/obsidian/plugin-choice.mjs +170 -0
  71. package/src/runtime/obsidian/plugin-drift.mjs +76 -0
  72. package/src/runtime/obsidian/plugin-presence.mjs +48 -0
  73. package/src/runtime/obsidian/service-main.mjs +19 -4
  74. package/src/runtime/obsidian/service-record.mjs +36 -0
  75. package/src/runtime/obsidian/service-server.mjs +50 -12
  76. package/src/runtime/obsidian/service.mjs +100 -6
  77. package/src/runtime/obsidian/state-store.mjs +13 -1
  78. package/src/server/local-sidecar.mjs +24 -5
  79. package/src/server/server.mjs +18 -5
  80. package/src/upgrade/upgrade.mjs +1 -1
  81. package/templates/external-project-workspace/pack-lifecycle.json +1 -1
@@ -0,0 +1,156 @@
1
+ {
2
+ "schema": "atelier-obsidian-generation-manifest/v2",
3
+ "layoutVersion": 2,
4
+ "generationId": "gen-0001",
5
+ "scopeId": "scope-topic",
6
+ "snapshotId": "snap-0001",
7
+ "notes": [
8
+ {
9
+ "repoId": "north",
10
+ "nodeId": "a",
11
+ "title": "Shared concept",
12
+ "path": "north/topics/Shared concept.md",
13
+ "noteDigest": "sha256:5555555555555555555555555555555555555555555555555555555555555555",
14
+ "regions": {
15
+ "frontmatter": {
16
+ "start": 0,
17
+ "end": 120
18
+ },
19
+ "body": {
20
+ "start": 120,
21
+ "end": 280
22
+ },
23
+ "generated": [
24
+ {
25
+ "kind": "relations",
26
+ "range": {
27
+ "start": 280,
28
+ "end": 340
29
+ }
30
+ }
31
+ ]
32
+ }
33
+ },
34
+ {
35
+ "repoId": "north",
36
+ "nodeId": "d",
37
+ "title": "Shared concept",
38
+ "path": "north/topics/Shared concept (shared-d).md",
39
+ "noteDigest": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
40
+ "regions": {
41
+ "frontmatter": {
42
+ "start": 0,
43
+ "end": 40
44
+ },
45
+ "body": {
46
+ "start": 40,
47
+ "end": 200
48
+ },
49
+ "generated": [
50
+ {
51
+ "kind": "relations",
52
+ "range": {
53
+ "start": 200,
54
+ "end": 260
55
+ }
56
+ },
57
+ {
58
+ "kind": "identity",
59
+ "range": {
60
+ "start": 260,
61
+ "end": 340
62
+ }
63
+ }
64
+ ],
65
+ "identity": {
66
+ "start": 260,
67
+ "end": 340
68
+ }
69
+ }
70
+ },
71
+ {
72
+ "repoId": "north",
73
+ "nodeId": "e",
74
+ "title": "Diagram",
75
+ "path": "north/figures/diagram.svg.md",
76
+ "noteDigest": "sha256:8888888888888888888888888888888888888888888888888888888888888888",
77
+ "regions": {
78
+ "frontmatter": {
79
+ "start": 0,
80
+ "end": 80
81
+ },
82
+ "identity": {
83
+ "start": 0,
84
+ "end": 80
85
+ },
86
+ "body": {
87
+ "start": 240,
88
+ "end": 240
89
+ },
90
+ "generated": [
91
+ {
92
+ "kind": "representation",
93
+ "range": {
94
+ "start": 80,
95
+ "end": 240
96
+ }
97
+ }
98
+ ]
99
+ }
100
+ }
101
+ ],
102
+ "links": [
103
+ {
104
+ "edgeId": "e4",
105
+ "sourceNodeId": "d",
106
+ "targetNodeId": "a",
107
+ "type": "links_to",
108
+ "origin": "markdown",
109
+ "targetState": "in-scope",
110
+ "inversions": [
111
+ {
112
+ "source": {
113
+ "start": 12,
114
+ "end": 30
115
+ },
116
+ "note": {
117
+ "start": 52,
118
+ "end": 96
119
+ }
120
+ }
121
+ ]
122
+ },
123
+ {
124
+ "edgeId": "e5",
125
+ "sourceNodeId": "a",
126
+ "targetNodeId": "d",
127
+ "type": "supersedes",
128
+ "origin": "declared",
129
+ "targetState": "in-scope"
130
+ },
131
+ {
132
+ "edgeId": "e1",
133
+ "sourceNodeId": "a",
134
+ "targetNodeId": "b",
135
+ "type": "related",
136
+ "origin": "declared",
137
+ "targetState": "outside-selection"
138
+ }
139
+ ],
140
+ "attachments": [
141
+ {
142
+ "path": "north/figures/diagram.svg",
143
+ "digest": "sha256:7777777777777777777777777777777777777777777777777777777777777777",
144
+ "byteLength": 900
145
+ }
146
+ ],
147
+ "completeness": {
148
+ "status": "complete",
149
+ "expectedNotes": 3,
150
+ "writtenNotes": 3
151
+ },
152
+ "freshness": {
153
+ "status": "current",
154
+ "checkedAt": "2026-01-05T10:00:05Z"
155
+ }
156
+ }
@@ -0,0 +1,159 @@
1
+ {
2
+ "schema": "atelier-obsidian-generation-manifest/v2",
3
+ "generationId": "gen-0001",
4
+ "scopeId": "scope-topic",
5
+ "snapshotId": "snap-0001",
6
+ "notes": [
7
+ {
8
+ "repoId": "north",
9
+ "nodeId": "a",
10
+ "title": "Shared concept",
11
+ "path": "north/topics/Shared concept.md",
12
+ "noteDigest": "sha256:5555555555555555555555555555555555555555555555555555555555555555",
13
+ "regions": {
14
+ "frontmatter": {
15
+ "start": 0,
16
+ "end": 120
17
+ },
18
+ "identity": {
19
+ "start": 40,
20
+ "end": 116
21
+ },
22
+ "body": {
23
+ "start": 120,
24
+ "end": 280
25
+ },
26
+ "generated": [
27
+ {
28
+ "kind": "relations",
29
+ "range": {
30
+ "start": 280,
31
+ "end": 340
32
+ }
33
+ }
34
+ ]
35
+ }
36
+ },
37
+ {
38
+ "repoId": "north",
39
+ "nodeId": "d",
40
+ "title": "Shared concept",
41
+ "path": "north/topics/Shared concept (shared-d).md",
42
+ "noteDigest": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
43
+ "regions": {
44
+ "frontmatter": {
45
+ "start": 0,
46
+ "end": 40
47
+ },
48
+ "body": {
49
+ "start": 40,
50
+ "end": 200
51
+ },
52
+ "generated": [
53
+ {
54
+ "kind": "relations",
55
+ "range": {
56
+ "start": 200,
57
+ "end": 260
58
+ }
59
+ },
60
+ {
61
+ "kind": "identity",
62
+ "range": {
63
+ "start": 260,
64
+ "end": 340
65
+ }
66
+ }
67
+ ],
68
+ "identity": {
69
+ "start": 260,
70
+ "end": 340
71
+ }
72
+ }
73
+ },
74
+ {
75
+ "repoId": "north",
76
+ "nodeId": "e",
77
+ "title": "Diagram",
78
+ "path": "north/figures/diagram.svg.md",
79
+ "noteDigest": "sha256:8888888888888888888888888888888888888888888888888888888888888888",
80
+ "regions": {
81
+ "frontmatter": {
82
+ "start": 0,
83
+ "end": 80
84
+ },
85
+ "identity": {
86
+ "start": 0,
87
+ "end": 80
88
+ },
89
+ "body": {
90
+ "start": 240,
91
+ "end": 240
92
+ },
93
+ "generated": [
94
+ {
95
+ "kind": "representation",
96
+ "range": {
97
+ "start": 80,
98
+ "end": 240
99
+ }
100
+ }
101
+ ]
102
+ }
103
+ }
104
+ ],
105
+ "links": [
106
+ {
107
+ "edgeId": "e4",
108
+ "sourceNodeId": "d",
109
+ "targetNodeId": "a",
110
+ "type": "links_to",
111
+ "origin": "markdown",
112
+ "targetState": "in-scope",
113
+ "inversions": [
114
+ {
115
+ "source": {
116
+ "start": 12,
117
+ "end": 30
118
+ },
119
+ "note": {
120
+ "start": 52,
121
+ "end": 96
122
+ }
123
+ }
124
+ ]
125
+ },
126
+ {
127
+ "edgeId": "e5",
128
+ "sourceNodeId": "a",
129
+ "targetNodeId": "d",
130
+ "type": "supersedes",
131
+ "origin": "declared",
132
+ "targetState": "in-scope"
133
+ },
134
+ {
135
+ "edgeId": "e1",
136
+ "sourceNodeId": "a",
137
+ "targetNodeId": "b",
138
+ "type": "related",
139
+ "origin": "declared",
140
+ "targetState": "outside-selection"
141
+ }
142
+ ],
143
+ "attachments": [
144
+ {
145
+ "path": "north/figures/diagram.svg",
146
+ "digest": "sha256:7777777777777777777777777777777777777777777777777777777777777777",
147
+ "byteLength": 900
148
+ }
149
+ ],
150
+ "completeness": {
151
+ "status": "complete",
152
+ "expectedNotes": 3,
153
+ "writtenNotes": 3
154
+ },
155
+ "freshness": {
156
+ "status": "current",
157
+ "checkedAt": "2026-01-05T10:00:05Z"
158
+ }
159
+ }
@@ -0,0 +1,160 @@
1
+ {
2
+ "schema": "atelier-obsidian-generation-manifest/v2",
3
+ "layoutVersion": 2,
4
+ "generationId": "gen-0001",
5
+ "scopeId": "scope-topic",
6
+ "snapshotId": "snap-0001",
7
+ "notes": [
8
+ {
9
+ "repoId": "north",
10
+ "nodeId": "a",
11
+ "title": "Shared concept",
12
+ "path": "north/topics/Shared concept.md",
13
+ "noteDigest": "sha256:5555555555555555555555555555555555555555555555555555555555555555",
14
+ "regions": {
15
+ "frontmatter": {
16
+ "start": 0,
17
+ "end": 120
18
+ },
19
+ "identity": {
20
+ "start": 40,
21
+ "end": 116
22
+ },
23
+ "body": {
24
+ "start": 120,
25
+ "end": 280
26
+ },
27
+ "generated": [
28
+ {
29
+ "kind": "relations",
30
+ "range": {
31
+ "start": 280,
32
+ "end": 340
33
+ }
34
+ }
35
+ ]
36
+ }
37
+ },
38
+ {
39
+ "repoId": "north",
40
+ "nodeId": "d",
41
+ "title": "Shared concept",
42
+ "path": "north/topics/Shared concept (shared-d).md",
43
+ "noteDigest": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
44
+ "regions": {
45
+ "frontmatter": {
46
+ "start": 0,
47
+ "end": 40
48
+ },
49
+ "body": {
50
+ "start": 40,
51
+ "end": 200
52
+ },
53
+ "generated": [
54
+ {
55
+ "kind": "relations",
56
+ "range": {
57
+ "start": 200,
58
+ "end": 260
59
+ }
60
+ },
61
+ {
62
+ "kind": "identity",
63
+ "range": {
64
+ "start": 260,
65
+ "end": 340
66
+ }
67
+ }
68
+ ],
69
+ "identity": {
70
+ "start": 260,
71
+ "end": 340
72
+ }
73
+ }
74
+ },
75
+ {
76
+ "repoId": "north",
77
+ "nodeId": "e",
78
+ "title": "Diagram",
79
+ "path": "north/figures/diagram.svg.md",
80
+ "noteDigest": "sha256:8888888888888888888888888888888888888888888888888888888888888888",
81
+ "regions": {
82
+ "frontmatter": {
83
+ "start": 0,
84
+ "end": 80
85
+ },
86
+ "identity": {
87
+ "start": 0,
88
+ "end": 80
89
+ },
90
+ "body": {
91
+ "start": 240,
92
+ "end": 240
93
+ },
94
+ "generated": [
95
+ {
96
+ "kind": "representation",
97
+ "range": {
98
+ "start": 80,
99
+ "end": 240
100
+ }
101
+ }
102
+ ]
103
+ }
104
+ }
105
+ ],
106
+ "links": [
107
+ {
108
+ "edgeId": "e4",
109
+ "sourceNodeId": "d",
110
+ "targetNodeId": "a",
111
+ "type": "links_to",
112
+ "origin": "markdown",
113
+ "targetState": "in-scope",
114
+ "inversions": [
115
+ {
116
+ "source": {
117
+ "start": 12,
118
+ "end": 30
119
+ },
120
+ "note": {
121
+ "start": 52,
122
+ "end": 96
123
+ }
124
+ }
125
+ ]
126
+ },
127
+ {
128
+ "edgeId": "e5",
129
+ "sourceNodeId": "a",
130
+ "targetNodeId": "d",
131
+ "type": "supersedes",
132
+ "origin": "declared",
133
+ "targetState": "in-scope"
134
+ },
135
+ {
136
+ "edgeId": "e1",
137
+ "sourceNodeId": "a",
138
+ "targetNodeId": "b",
139
+ "type": "related",
140
+ "origin": "declared",
141
+ "targetState": "outside-selection"
142
+ }
143
+ ],
144
+ "attachments": [
145
+ {
146
+ "path": "north/topics",
147
+ "digest": "sha256:7777777777777777777777777777777777777777777777777777777777777777",
148
+ "byteLength": 900
149
+ }
150
+ ],
151
+ "completeness": {
152
+ "status": "complete",
153
+ "expectedNotes": 3,
154
+ "writtenNotes": 3
155
+ },
156
+ "freshness": {
157
+ "status": "current",
158
+ "checkedAt": "2026-01-05T10:00:05Z"
159
+ }
160
+ }
@@ -0,0 +1,160 @@
1
+ {
2
+ "schema": "atelier-obsidian-generation-manifest/v2",
3
+ "layoutVersion": 2,
4
+ "generationId": "gen-0001",
5
+ "scopeId": "scope-topic",
6
+ "snapshotId": "snap-0001",
7
+ "notes": [
8
+ {
9
+ "repoId": "north",
10
+ "nodeId": "a",
11
+ "title": "Shared concept",
12
+ "path": "north/topics/Shared concept.md",
13
+ "noteDigest": "sha256:5555555555555555555555555555555555555555555555555555555555555555",
14
+ "regions": {
15
+ "frontmatter": {
16
+ "start": 0,
17
+ "end": 120
18
+ },
19
+ "identity": {
20
+ "start": 40,
21
+ "end": 116
22
+ },
23
+ "body": {
24
+ "start": 120,
25
+ "end": 280
26
+ },
27
+ "generated": [
28
+ {
29
+ "kind": "relations",
30
+ "range": {
31
+ "start": 280,
32
+ "end": 340
33
+ }
34
+ }
35
+ ]
36
+ }
37
+ },
38
+ {
39
+ "repoId": "north",
40
+ "nodeId": "d",
41
+ "title": "Shared concept",
42
+ "path": "north/topics/Shared concept (shared-d).md",
43
+ "noteDigest": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
44
+ "regions": {
45
+ "frontmatter": {
46
+ "start": 0,
47
+ "end": 40
48
+ },
49
+ "body": {
50
+ "start": 40,
51
+ "end": 200
52
+ },
53
+ "generated": [
54
+ {
55
+ "kind": "properties",
56
+ "range": {
57
+ "start": 200,
58
+ "end": 260
59
+ }
60
+ },
61
+ {
62
+ "kind": "identity",
63
+ "range": {
64
+ "start": 260,
65
+ "end": 340
66
+ }
67
+ }
68
+ ],
69
+ "identity": {
70
+ "start": 260,
71
+ "end": 340
72
+ }
73
+ }
74
+ },
75
+ {
76
+ "repoId": "north",
77
+ "nodeId": "e",
78
+ "title": "Diagram",
79
+ "path": "north/figures/diagram.svg.md",
80
+ "noteDigest": "sha256:8888888888888888888888888888888888888888888888888888888888888888",
81
+ "regions": {
82
+ "frontmatter": {
83
+ "start": 0,
84
+ "end": 80
85
+ },
86
+ "identity": {
87
+ "start": 0,
88
+ "end": 80
89
+ },
90
+ "body": {
91
+ "start": 240,
92
+ "end": 240
93
+ },
94
+ "generated": [
95
+ {
96
+ "kind": "representation",
97
+ "range": {
98
+ "start": 80,
99
+ "end": 240
100
+ }
101
+ }
102
+ ]
103
+ }
104
+ }
105
+ ],
106
+ "links": [
107
+ {
108
+ "edgeId": "e4",
109
+ "sourceNodeId": "d",
110
+ "targetNodeId": "a",
111
+ "type": "links_to",
112
+ "origin": "markdown",
113
+ "targetState": "in-scope",
114
+ "inversions": [
115
+ {
116
+ "source": {
117
+ "start": 12,
118
+ "end": 30
119
+ },
120
+ "note": {
121
+ "start": 52,
122
+ "end": 96
123
+ }
124
+ }
125
+ ]
126
+ },
127
+ {
128
+ "edgeId": "e5",
129
+ "sourceNodeId": "a",
130
+ "targetNodeId": "d",
131
+ "type": "supersedes",
132
+ "origin": "declared",
133
+ "targetState": "in-scope"
134
+ },
135
+ {
136
+ "edgeId": "e1",
137
+ "sourceNodeId": "a",
138
+ "targetNodeId": "b",
139
+ "type": "related",
140
+ "origin": "declared",
141
+ "targetState": "outside-selection"
142
+ }
143
+ ],
144
+ "attachments": [
145
+ {
146
+ "path": "north/figures/diagram.svg",
147
+ "digest": "sha256:7777777777777777777777777777777777777777777777777777777777777777",
148
+ "byteLength": 900
149
+ }
150
+ ],
151
+ "completeness": {
152
+ "status": "complete",
153
+ "expectedNotes": 3,
154
+ "writtenNotes": 3
155
+ },
156
+ "freshness": {
157
+ "status": "current",
158
+ "checkedAt": "2026-01-05T10:00:05Z"
159
+ }
160
+ }