@miadi/episodic-memory-schema 0.7.1 → 0.9.0

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.
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Observing an episode capture bundle — `capture.json`, schema
3
+ * `miadi.episode-capture.v1`.
4
+ *
5
+ * A capture bundle is a folder inside an episode vessel holding one take and
6
+ * everything derived from it:
7
+ *
8
+ * captures/260825114010/
9
+ * capture.json this file's subject
10
+ * transcription.json the sidecar
11
+ * transcription_260825114010_FR.txt
12
+ * transcription_260825114010_EN.txt
13
+ *
14
+ * It is the shape that carries every capture the chronicle actually holds, and
15
+ * until now it was declared nowhere: `@miadi/transcription` typed it
16
+ * structurally to read it, and gmtermux typed it structurally to write it. Two
17
+ * private copies of one contract is how `TranscriptionSidecar` came to exist
18
+ * twice. This module is the single declaration both of them import.
19
+ *
20
+ * As everywhere in this package, the observation is **compatibility-first**:
21
+ * nothing here reads a filesystem, nothing rewrites the descriptor, and a
22
+ * field that is missing is reported as missing rather than invented.
23
+ *
24
+ * The lineage the bundle states is the reason it earns an observer rather than
25
+ * a bare interface. The audio is `origin: "captured"` — made from a moment.
26
+ * Each transcript is `origin: "derived"` with `sourceArtifact` pointing at that
27
+ * audio, which is the same edge `observeCompositionManifest` draws between a
28
+ * clip and its text. A reader that only had the JSON would have to re-derive
29
+ * that edge, and each one would derive it slightly differently.
30
+ *
31
+ * **`sha256` travels in `metadata`, deliberately.** Putting it on
32
+ * `ArtifactReference` itself would be an adjustment to the episodic-memory
33
+ * schema, and those are held for the human by `capture-vocabulary.spec.md`
34
+ * §11.3. Nothing here is blocked by carrying it in metadata, and the day the
35
+ * field is named the move is mechanical.
36
+ */
37
+ import type { ArtifactReference, EpisodeObservation, ObserveEpisodeCaptureOptions } from "../observation.js";
38
+ /** The schema every capture bundle in the chronicle declares. */
39
+ export declare const EPISODE_CAPTURE_SCHEMA = "miadi.episode-capture.v1";
40
+ /** The manifest filename inside a bundle folder. */
41
+ export declare const EPISODE_CAPTURE_MANIFEST_FILENAME = "capture.json";
42
+ /** The transcription sidecar filename inside a bundle folder. */
43
+ export declare const EPISODE_CAPTURE_SIDECAR_FILENAME = "transcription.json";
44
+ /** Which episode a bundle belongs to, as the descriptor states it. */
45
+ export interface EpisodeCaptureEpisodeRef {
46
+ path?: string;
47
+ number?: number;
48
+ title?: string;
49
+ }
50
+ /** Where the take came from before it was bound to this episode. */
51
+ export interface EpisodeCaptureSourceRef {
52
+ filename?: string;
53
+ /** The inbox it was drawn from, when one was named. */
54
+ inbox?: string;
55
+ }
56
+ /** The audio the bundle is built around. */
57
+ export interface EpisodeCaptureAudio {
58
+ filename?: string;
59
+ /** Relative to the episode directory, never absolute (jgwill/Miadi#622). */
60
+ relativePath?: string;
61
+ bytes?: number;
62
+ sha256?: string;
63
+ mimetype?: string;
64
+ }
65
+ /** One language rendering produced from the audio. */
66
+ export interface EpisodeCaptureOutput {
67
+ /** As written by the recorder: `"fr"`, `"en"`. */
68
+ language?: string;
69
+ label?: string;
70
+ filename?: string;
71
+ relativePath?: string;
72
+ bytes?: number;
73
+ sha256?: string;
74
+ }
75
+ /** What the bundle says about its transcription. */
76
+ export interface EpisodeCaptureTranscription {
77
+ sourceFilename?: string;
78
+ /** Relative path to the sidecar. */
79
+ sidecar?: string;
80
+ timestamp?: string;
81
+ outputs?: EpisodeCaptureOutput[];
82
+ }
83
+ /**
84
+ * The registration receipt. A descriptor is both a declaration and a mutable
85
+ * receipt: the wheel answers after the bytes are already durable, and that
86
+ * answer is written back here. `status` absent means never attempted, which is
87
+ * not the same as failed.
88
+ */
89
+ export interface EpisodeCaptureRegistration {
90
+ status?: string;
91
+ registeredAt?: string;
92
+ error?: string;
93
+ records?: EpisodeCaptureRecord[];
94
+ }
95
+ /** One artifact as the medicine wheel knows it. */
96
+ export interface EpisodeCaptureRecord {
97
+ id?: string;
98
+ filename?: string;
99
+ /** `audio` | `transcript` — the wheel's own role vocabulary. */
100
+ role?: string;
101
+ language?: string;
102
+ }
103
+ /** `capture.json`, typed. Every field optional: absence is reported, not invented. */
104
+ export interface EpisodeCaptureDescriptor {
105
+ schema?: string;
106
+ episode?: EpisodeCaptureEpisodeRef;
107
+ source?: EpisodeCaptureSourceRef;
108
+ audio?: EpisodeCaptureAudio;
109
+ transcription?: EpisodeCaptureTranscription;
110
+ storedAt?: string;
111
+ updatedAt?: string;
112
+ medicineWheel?: EpisodeCaptureRegistration;
113
+ }
114
+ /**
115
+ * Observe a capture bundle descriptor.
116
+ *
117
+ * `relativePath` is the descriptor's path within the episode directory
118
+ * (`captures/<tlid>/capture.json`), so observation ids stay stable no matter
119
+ * where the vessel is mounted — the same bundle observed from a phone and from
120
+ * a workstation observes identically.
121
+ */
122
+ export declare function observeEpisodeCapture(input: unknown, options: ObserveEpisodeCaptureOptions): EpisodeObservation;
123
+ /**
124
+ * The wheel records a descriptor carries, or an empty list. A bundle whose
125
+ * registration never ran has no records — an absence, not a failure.
126
+ */
127
+ export declare function episodeCaptureRecords(input: unknown): EpisodeCaptureRecord[];
128
+ /** Whether a parsed value looks like a capture bundle descriptor. */
129
+ export declare function isEpisodeCaptureDescriptor(value: unknown): boolean;
130
+ export type { ArtifactReference };
131
+ //# sourceMappingURL=episode-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"episode-capture.d.ts","sourceRoot":"","sources":["../../src/adapters/episode-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,KAAK,EACV,iBAAiB,EAGjB,kBAAkB,EAElB,4BAA4B,EAC7B,MAAM,mBAAmB,CAAA;AAU1B,iEAAiE;AACjE,eAAO,MAAM,sBAAsB,6BAA6B,CAAA;AAEhE,oDAAoD;AACpD,eAAO,MAAM,iCAAiC,iBAAiB,CAAA;AAE/D,iEAAiE;AACjE,eAAO,MAAM,gCAAgC,uBAAuB,CAAA;AAEpE,sEAAsE;AACtE,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,oEAAoE;AACpE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,4CAA4C;AAC5C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,sDAAsD;AACtD,MAAM,WAAW,oBAAoB;IACnC,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,oDAAoD;AACpD,MAAM,WAAW,2BAA2B;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAA;CACjC;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAA;CACjC;AAED,mDAAmD;AACnD,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,sFAAsF;AACtF,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,wBAAwB,CAAA;IAClC,MAAM,CAAC,EAAE,uBAAuB,CAAA;IAChC,KAAK,CAAC,EAAE,mBAAmB,CAAA;IAC3B,aAAa,CAAC,EAAE,2BAA2B,CAAA;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,0BAA0B,CAAA;CAC3C;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,4BAA4B,GACpC,kBAAkB,CA8IpB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,EAAE,CAY5E;AAED,qEAAqE;AACrE,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAKlE;AAiED,YAAY,EAAE,iBAAiB,EAAE,CAAA"}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Observing an episode capture bundle — `capture.json`, schema
3
+ * `miadi.episode-capture.v1`.
4
+ *
5
+ * A capture bundle is a folder inside an episode vessel holding one take and
6
+ * everything derived from it:
7
+ *
8
+ * captures/260825114010/
9
+ * capture.json this file's subject
10
+ * transcription.json the sidecar
11
+ * transcription_260825114010_FR.txt
12
+ * transcription_260825114010_EN.txt
13
+ *
14
+ * It is the shape that carries every capture the chronicle actually holds, and
15
+ * until now it was declared nowhere: `@miadi/transcription` typed it
16
+ * structurally to read it, and gmtermux typed it structurally to write it. Two
17
+ * private copies of one contract is how `TranscriptionSidecar` came to exist
18
+ * twice. This module is the single declaration both of them import.
19
+ *
20
+ * As everywhere in this package, the observation is **compatibility-first**:
21
+ * nothing here reads a filesystem, nothing rewrites the descriptor, and a
22
+ * field that is missing is reported as missing rather than invented.
23
+ *
24
+ * The lineage the bundle states is the reason it earns an observer rather than
25
+ * a bare interface. The audio is `origin: "captured"` — made from a moment.
26
+ * Each transcript is `origin: "derived"` with `sourceArtifact` pointing at that
27
+ * audio, which is the same edge `observeCompositionManifest` draws between a
28
+ * clip and its text. A reader that only had the JSON would have to re-derive
29
+ * that edge, and each one would derive it slightly differently.
30
+ *
31
+ * **`sha256` travels in `metadata`, deliberately.** Putting it on
32
+ * `ArtifactReference` itself would be an adjustment to the episodic-memory
33
+ * schema, and those are held for the human by `capture-vocabulary.spec.md`
34
+ * §11.3. Nothing here is blocked by carrying it in metadata, and the day the
35
+ * field is named the move is mechanical.
36
+ */
37
+ import { cloneValue, inferArtifactKind, isRecord, observationId, validateRelativePath, } from "./common.js";
38
+ /** The schema every capture bundle in the chronicle declares. */
39
+ export const EPISODE_CAPTURE_SCHEMA = "miadi.episode-capture.v1";
40
+ /** The manifest filename inside a bundle folder. */
41
+ export const EPISODE_CAPTURE_MANIFEST_FILENAME = "capture.json";
42
+ /** The transcription sidecar filename inside a bundle folder. */
43
+ export const EPISODE_CAPTURE_SIDECAR_FILENAME = "transcription.json";
44
+ /**
45
+ * Observe a capture bundle descriptor.
46
+ *
47
+ * `relativePath` is the descriptor's path within the episode directory
48
+ * (`captures/<tlid>/capture.json`), so observation ids stay stable no matter
49
+ * where the vessel is mounted — the same bundle observed from a phone and from
50
+ * a workstation observes identically.
51
+ */
52
+ export function observeEpisodeCapture(input, options) {
53
+ const relativePath = validateRelativePath(options.relativePath);
54
+ const diagnostics = [];
55
+ const observation = {
56
+ id: observationId("episode-capture", relativePath),
57
+ zone: options.zone ?? "chronicle",
58
+ sourceDocuments: [{ format: "episode-capture", relativePath }],
59
+ identityCandidates: [{ kind: "path", value: relativePath }],
60
+ sourceMetadata: {},
61
+ artifacts: [],
62
+ relations: [],
63
+ diagnostics,
64
+ unmappedFields: {},
65
+ };
66
+ if (!isRecord(input)) {
67
+ diagnostics.push({
68
+ level: "error",
69
+ code: "episode-capture.invalid-object",
70
+ message: "A capture descriptor must be a non-array object.",
71
+ path: relativePath,
72
+ });
73
+ return observation;
74
+ }
75
+ const record = input;
76
+ const descriptor = record;
77
+ const schema = asString(record.schema);
78
+ if (schema === undefined) {
79
+ diagnostics.push(diagnostic("schema-absent", "info", "No schema declared. Read as a capture bundle on the strength of its shape."));
80
+ }
81
+ else if (schema !== EPISODE_CAPTURE_SCHEMA) {
82
+ diagnostics.push(diagnostic("schema-unrecognized", "warning", `Declared schema '${schema}' is not ${EPISODE_CAPTURE_SCHEMA}; fields are read as best they can be.`));
83
+ }
84
+ const bundleDir = parentOf(relativePath);
85
+ const episode = isRecord(record.episode) ? record.episode : undefined;
86
+ const sourceMetadata = {};
87
+ const title = asString(episode?.title);
88
+ if (title !== undefined)
89
+ sourceMetadata.title = title;
90
+ const storedAt = asString(record.storedAt);
91
+ if (storedAt !== undefined)
92
+ sourceMetadata.created = storedAt;
93
+ const updatedAt = asString(record.updatedAt);
94
+ if (updatedAt !== undefined)
95
+ sourceMetadata.updated = updatedAt;
96
+ observation.sourceMetadata = sourceMetadata;
97
+ const episodePath = asString(episode?.path);
98
+ if (episodePath !== undefined) {
99
+ observation.identityCandidates.push({ kind: "path", value: episodePath });
100
+ }
101
+ const episodeNumber = episode?.number;
102
+ if (typeof episodeNumber === "number" && Number.isFinite(episodeNumber)) {
103
+ observation.identityCandidates.push({
104
+ kind: "episode-number",
105
+ value: String(episodeNumber),
106
+ });
107
+ }
108
+ // ── the audio: made from a moment, not from another artifact ──────────────
109
+ const audio = isRecord(record.audio) ? record.audio : undefined;
110
+ const audioFilename = asString(audio?.filename);
111
+ let audioId;
112
+ if (audio !== undefined && audioFilename !== undefined) {
113
+ const audioPath = bundleRelative(bundleDir, audio.relativePath, audioFilename, diagnostics);
114
+ audioId = `capture:${audioFilename}`;
115
+ observation.artifacts.push({
116
+ id: audioId,
117
+ kind: inferArtifactKind(audioFilename, "audio"),
118
+ relativePath: audioPath,
119
+ origin: "captured",
120
+ metadata: pruned({
121
+ sha256: audio.sha256,
122
+ bytes: audio.bytes,
123
+ mimetype: audio.mimetype,
124
+ sourceFilename: asString(isRecord(record.source) ? record.source.filename : undefined),
125
+ inbox: asString(isRecord(record.source) ? record.source.inbox : undefined),
126
+ }),
127
+ });
128
+ }
129
+ else {
130
+ diagnostics.push(diagnostic("audio-absent", "warning", "The descriptor names no audio; its transcripts have nothing to point at."));
131
+ }
132
+ // ── the transcripts: derived, each pointing at the audio ──────────────────
133
+ const transcription = isRecord(record.transcription)
134
+ ? record.transcription
135
+ : undefined;
136
+ const transcribedAt = asString(transcription?.timestamp);
137
+ const outputs = Array.isArray(transcription?.outputs) ? transcription.outputs : [];
138
+ for (const raw of outputs) {
139
+ if (!isRecord(raw))
140
+ continue;
141
+ const output = raw;
142
+ const filename = asString(output.filename);
143
+ if (filename === undefined) {
144
+ diagnostics.push(diagnostic("output-unnamed", "warning", "A transcription output carries no filename and was not projected."));
145
+ continue;
146
+ }
147
+ observation.artifacts.push({
148
+ id: `capture:${filename}`,
149
+ kind: inferArtifactKind(filename, "transcript"),
150
+ relativePath: bundleRelative(bundleDir, output.relativePath, filename, diagnostics),
151
+ label: asString(output.label),
152
+ origin: "derived",
153
+ ...(audioId === undefined ? {} : { sourceArtifact: audioId }),
154
+ metadata: pruned({
155
+ language: output.language,
156
+ sha256: output.sha256,
157
+ bytes: output.bytes,
158
+ transcribedAt,
159
+ }),
160
+ });
161
+ }
162
+ const sidecar = asString(transcription?.sidecar);
163
+ if (sidecar !== undefined) {
164
+ observation.artifacts.push({
165
+ id: `capture:${EPISODE_CAPTURE_SIDECAR_FILENAME}`,
166
+ kind: "text",
167
+ relativePath: bundleRelative(bundleDir, sidecar, EPISODE_CAPTURE_SIDECAR_FILENAME, diagnostics),
168
+ label: "Transcription sidecar",
169
+ origin: "derived",
170
+ ...(audioId === undefined ? {} : { sourceArtifact: audioId }),
171
+ metadata: pruned({ transcribedAt }),
172
+ });
173
+ }
174
+ // ── everything the projection did not consume, kept verbatim ──────────────
175
+ for (const [key, value] of Object.entries(record)) {
176
+ if (PROJECTED_FIELDS.has(key))
177
+ continue;
178
+ observation.unmappedFields[key] = cloneValue(value);
179
+ }
180
+ void descriptor;
181
+ return observation;
182
+ }
183
+ /**
184
+ * The wheel records a descriptor carries, or an empty list. A bundle whose
185
+ * registration never ran has no records — an absence, not a failure.
186
+ */
187
+ export function episodeCaptureRecords(input) {
188
+ if (!isRecord(input))
189
+ return [];
190
+ const wheel = input.medicineWheel;
191
+ if (!isRecord(wheel))
192
+ return [];
193
+ const records = wheel.records;
194
+ if (!Array.isArray(records))
195
+ return [];
196
+ return records.filter(isRecord).map((r) => pruned({
197
+ id: asString(r.id),
198
+ filename: asString(r.filename),
199
+ role: asString(r.role),
200
+ language: asString(r.language),
201
+ }));
202
+ }
203
+ /** Whether a parsed value looks like a capture bundle descriptor. */
204
+ export function isEpisodeCaptureDescriptor(value) {
205
+ if (!isRecord(value))
206
+ return false;
207
+ if (value.schema === EPISODE_CAPTURE_SCHEMA)
208
+ return true;
209
+ // Shape-based fallback: the schema key postdates some bundles.
210
+ return isRecord(value.audio) && isRecord(value.transcription);
211
+ }
212
+ const PROJECTED_FIELDS = new Set([
213
+ "schema",
214
+ "episode",
215
+ "source",
216
+ "audio",
217
+ "transcription",
218
+ "storedAt",
219
+ "updatedAt",
220
+ ]);
221
+ function diagnostic(code, level, message, path) {
222
+ return { level, code: `episode-capture.${code}`, message, ...(path === undefined ? {} : { path }) };
223
+ }
224
+ /**
225
+ * A path inside the bundle, expressed relative to the episode directory.
226
+ *
227
+ * The descriptor's own `relativePath` is preferred when it is genuinely
228
+ * relative. An absolute one is refused and rebuilt from the bundle directory:
229
+ * three episodes already carry `/data/data/com.termux/...` as provenance,
230
+ * true on one device and resolvable on no other host (jgwill/Miadi#622).
231
+ */
232
+ function bundleRelative(bundleDir, stated, filename, diagnostics) {
233
+ const value = asString(stated);
234
+ if (value !== undefined && !isAbsoluteish(value))
235
+ return value;
236
+ if (value !== undefined) {
237
+ diagnostics.push(diagnostic("absolute-path-refused", "warning", `'${value}' is an absolute path and was replaced with one relative to the episode.`));
238
+ }
239
+ return bundleDir === "" ? filename : `${bundleDir}/${filename}`;
240
+ }
241
+ function isAbsoluteish(value) {
242
+ return value.startsWith("/") || /^[A-Za-z]:[\\/]/.test(value) || value.includes("..");
243
+ }
244
+ function parentOf(relativePath) {
245
+ const index = relativePath.lastIndexOf("/");
246
+ return index === -1 ? "" : relativePath.slice(0, index);
247
+ }
248
+ function pruned(value) {
249
+ const out = {};
250
+ for (const [key, item] of Object.entries(value)) {
251
+ if (item !== undefined)
252
+ out[key] = item;
253
+ }
254
+ return out;
255
+ }
256
+ function asString(value) {
257
+ return typeof value === "string" ? value : undefined;
258
+ }
259
+ //# sourceMappingURL=episode-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"episode-capture.js","sourceRoot":"","sources":["../../src/adapters/episode-capture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * The chronicle ATTENTION contract — what needs a human, as data.
3
+ *
4
+ * William's requirement (2026-08-15, ep332): agents store "what needs
5
+ * attention from a human" WITHIN the chronicle, and surfaces render it — he
6
+ * opens no terminal and no markdown file. The store is `attention.json` at an
7
+ * episode folder's root; every consumer (the Miadi /chronicle app, the
8
+ * passages CLI verbs, inquiry-weave's wheel projection, forgewright's
9
+ * chronicle view) types against THIS module, so the shape has one owner and
10
+ * cannot fork into drifting copies.
11
+ *
12
+ * This module is pure — no fs, no fetch — so browser bundles and CJS CLIs can
13
+ * both consume it. Reading files and walking folders stays with the consumer.
14
+ */
15
+ /** The filename, at an episode folder's root. */
16
+ export declare const ATTENTION_FILE = "attention.json";
17
+ /** Stamped into wheel projections so a reader knows which shape it holds. */
18
+ export declare const ATTENTION_SCHEMA_VERSION = "chronicle.attention.v1";
19
+ export interface AttentionItem {
20
+ /** Stable per-episode identity, e.g. "d1-consent-render". */
21
+ id: string;
22
+ /** One line: what is asked of the human. */
23
+ question: string;
24
+ /** What answering it releases. */
25
+ unlocks?: string;
26
+ /** ISO date the question was raised. */
27
+ asked?: string;
28
+ state: "open" | "answered";
29
+ answer?: string | null;
30
+ answered_at?: string | null;
31
+ /** Where the full record lives — paths, owner/repo#n refs, chart ids. */
32
+ depth?: string[];
33
+ }
34
+ export interface AttentionStore {
35
+ attention: 1;
36
+ items: AttentionItem[];
37
+ }
38
+ export interface ParsedAttentionStore {
39
+ items: AttentionItem[];
40
+ /** Set when the raw value could not be read as a store — surfaced, never
41
+ * swallowed, so an empty answer stays distinguishable from a failed look. */
42
+ parseError?: string;
43
+ }
44
+ /** Tolerant per-item reader: id + question are required, the rest optional. */
45
+ export declare function toAttentionItem(raw: unknown): AttentionItem | null;
46
+ /**
47
+ * Parse a raw `attention.json` payload (string or already-parsed value).
48
+ * Malformed input yields `{ items: [], parseError }` — the error travels with
49
+ * the result instead of throwing, matching the render-path tolerance the
50
+ * Miadi app shipped in jgwill/Miadi#615.
51
+ */
52
+ export declare function parseAttentionStore(raw: unknown): ParsedAttentionStore;
53
+ /** Serialize a store canonically (stable field order, trailing newline). */
54
+ export declare function serializeAttentionStore(items: AttentionItem[]): string;
55
+ //# sourceMappingURL=attention.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attention.d.ts","sourceRoot":"","sources":["../src/attention.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,iDAAiD;AACjD,eAAO,MAAM,cAAc,mBAAmB,CAAA;AAE9C,6EAA6E;AAC7E,eAAO,MAAM,wBAAwB,2BAA2B,CAAA;AAEhE,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,EAAE,EAAE,MAAM,CAAA;IACV,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAA;IAChB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,GAAG,UAAU,CAAA;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,CAAC,CAAA;IACZ,KAAK,EAAE,aAAa,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB;kFAC8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAMD,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAkBlE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,oBAAoB,CAetE;AAED,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,CAGtE"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * The chronicle ATTENTION contract — what needs a human, as data.
3
+ *
4
+ * William's requirement (2026-08-15, ep332): agents store "what needs
5
+ * attention from a human" WITHIN the chronicle, and surfaces render it — he
6
+ * opens no terminal and no markdown file. The store is `attention.json` at an
7
+ * episode folder's root; every consumer (the Miadi /chronicle app, the
8
+ * passages CLI verbs, inquiry-weave's wheel projection, forgewright's
9
+ * chronicle view) types against THIS module, so the shape has one owner and
10
+ * cannot fork into drifting copies.
11
+ *
12
+ * This module is pure — no fs, no fetch — so browser bundles and CJS CLIs can
13
+ * both consume it. Reading files and walking folders stays with the consumer.
14
+ */
15
+ /** The filename, at an episode folder's root. */
16
+ export const ATTENTION_FILE = "attention.json";
17
+ /** Stamped into wheel projections so a reader knows which shape it holds. */
18
+ export const ATTENTION_SCHEMA_VERSION = "chronicle.attention.v1";
19
+ function str(v) {
20
+ return typeof v === "string" && v.trim() ? v : undefined;
21
+ }
22
+ /** Tolerant per-item reader: id + question are required, the rest optional. */
23
+ export function toAttentionItem(raw) {
24
+ if (typeof raw !== "object" || raw === null)
25
+ return null;
26
+ const r = raw;
27
+ const id = str(r.id);
28
+ const question = str(r.question);
29
+ if (!id || !question)
30
+ return null;
31
+ return {
32
+ id,
33
+ question,
34
+ unlocks: str(r.unlocks),
35
+ asked: str(r.asked),
36
+ state: r.state === "answered" ? "answered" : "open",
37
+ answer: str(r.answer) ?? null,
38
+ answered_at: str(r.answered_at) ?? null,
39
+ depth: Array.isArray(r.depth)
40
+ ? r.depth.filter((d) => typeof d === "string")
41
+ : undefined,
42
+ };
43
+ }
44
+ /**
45
+ * Parse a raw `attention.json` payload (string or already-parsed value).
46
+ * Malformed input yields `{ items: [], parseError }` — the error travels with
47
+ * the result instead of throwing, matching the render-path tolerance the
48
+ * Miadi app shipped in jgwill/Miadi#615.
49
+ */
50
+ export function parseAttentionStore(raw) {
51
+ let value = raw;
52
+ if (typeof raw === "string") {
53
+ try {
54
+ value = JSON.parse(raw);
55
+ }
56
+ catch (e) {
57
+ return { items: [], parseError: e instanceof Error ? e.message : String(e) };
58
+ }
59
+ }
60
+ if (typeof value !== "object" || value === null) {
61
+ return { items: [], parseError: "attention store is not an object" };
62
+ }
63
+ const items = value.items;
64
+ if (!Array.isArray(items))
65
+ return { items: [] };
66
+ return { items: items.map(toAttentionItem).filter((i) => i !== null) };
67
+ }
68
+ /** Serialize a store canonically (stable field order, trailing newline). */
69
+ export function serializeAttentionStore(items) {
70
+ const store = { attention: 1, items };
71
+ return JSON.stringify(store, null, 2) + "\n";
72
+ }
73
+ //# sourceMappingURL=attention.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attention.js","sourceRoot":"","sources":["../src/attention.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ export * from "./observation.js";
4
4
  export * from "./chronicle-manifest.js";
5
5
  export * from "./story-library-manifest.js";
6
6
  export * from "./adapters/composition.js";
7
+ export * from "./adapters/episode-capture.js";
7
8
  export * from "./adapters/episode-yaml.js";
8
9
  export * from "./adapters/directory.js";
9
10
  export * from "./adapters/segment-grammar.js";
@@ -19,4 +20,10 @@ export { inferArtifactKind, extractEpisodeNumber, validateRelativePath, tryValid
19
20
  */
20
21
  export { stableArtifactId, tryStableArtifactId, isStableArtifactId, captureStableKey, } from "./adapters/common.js";
21
22
  export type { StableArtifactIdInput } from "./adapters/common.js";
23
+ /**
24
+ * The ATTENTION contract — what needs a human, as data (ep332,
25
+ * jgwill/Miadi#615). One owner for the shape every surface renders.
26
+ */
27
+ export { ATTENTION_FILE, ATTENTION_SCHEMA_VERSION, toAttentionItem, parseAttentionStore, serializeAttentionStore, } from "./attention.js";
28
+ export type { AttentionItem, AttentionStore, ParsedAttentionStore, } from "./attention.js";
22
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,+BAA+B,CAAA;AAE7C;;;;GAIG;AACH,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,YAAY,GACb,MAAM,sBAAsB,CAAA;AAE7B;;;GAGG;AACH,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,+BAA+B,CAAA;AAE7C;;;;GAIG;AACH,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,YAAY,GACb,MAAM,sBAAsB,CAAA;AAE7B;;;GAGG;AACH,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAEjE;;;GAGG;AACH,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,eAAe,EACf,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EACV,aAAa,EACb,cAAc,EACd,oBAAoB,GACrB,MAAM,gBAAgB,CAAA"}
package/dist/index.js CHANGED
@@ -4,6 +4,7 @@ export * from "./observation.js";
4
4
  export * from "./chronicle-manifest.js";
5
5
  export * from "./story-library-manifest.js";
6
6
  export * from "./adapters/composition.js";
7
+ export * from "./adapters/episode-capture.js";
7
8
  export * from "./adapters/episode-yaml.js";
8
9
  export * from "./adapters/directory.js";
9
10
  export * from "./adapters/segment-grammar.js";
@@ -18,4 +19,9 @@ export { inferArtifactKind, extractEpisodeNumber, validateRelativePath, tryValid
18
19
  * before any manifest gives it one. Document-derived ids are unchanged.
19
20
  */
20
21
  export { stableArtifactId, tryStableArtifactId, isStableArtifactId, captureStableKey, } from "./adapters/common.js";
22
+ /**
23
+ * The ATTENTION contract — what needs a human, as data (ep332,
24
+ * jgwill/Miadi#615). One owner for the shape every surface renders.
25
+ */
26
+ export { ATTENTION_FILE, ATTENTION_SCHEMA_VERSION, toAttentionItem, parseAttentionStore, serializeAttentionStore, } from "./attention.js";
21
27
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,+BAA+B,CAAA;AAE7C;;;;GAIG;AACH,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,YAAY,GACb,MAAM,sBAAsB,CAAA;AAE7B;;;GAGG;AACH,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,+BAA+B,CAAA;AAE7C;;;;GAIG;AACH,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,YAAY,GACb,MAAM,sBAAsB,CAAA;AAE7B;;;GAGG;AACH,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,sBAAsB,CAAA;AAG7B;;;GAGG;AACH,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,eAAe,EACf,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,gBAAgB,CAAA"}
@@ -6,7 +6,9 @@
6
6
  * decide whether a later, explicit projection is appropriate.
7
7
  */
8
8
  export type EpisodeSourceZone = "composition-intake" | "chronicle" | "runtime-projection";
9
- export type EpisodeSourceFormat = "composition-json" | "episode-yaml" | "directory-inferred" | "episodic-memory";
9
+ export type EpisodeSourceFormat = "composition-json" | "episode-yaml" | "directory-inferred" | "episodic-memory"
10
+ /** `capture.json` — one capture bundle inside an episode vessel. */
11
+ | "episode-capture";
10
12
  export interface SourceDocumentRef {
11
13
  format: EpisodeSourceFormat;
12
14
  relativePath: string;
@@ -402,6 +404,11 @@ export interface ObserveCompositionManifestOptions {
402
404
  relativePath: string;
403
405
  zone?: "composition-intake";
404
406
  }
407
+ export interface ObserveEpisodeCaptureOptions {
408
+ /** Path to the `capture.json`, relative to the episode directory. */
409
+ relativePath: string;
410
+ zone?: "chronicle";
411
+ }
405
412
  export interface ObserveEpisodeYamlManifestOptions {
406
413
  relativePath: string;
407
414
  zone?: "chronicle";
@@ -1 +1 @@
1
- {"version":3,"file":"observation.d.ts","sourceRoot":"","sources":["../src/observation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"observation.d.ts","sourceRoot":"","sources":["../src/observation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,iBAAiB,GACzB,oBAAoB,GACpB,WAAW,GACX,oBAAoB,CAAA;AAExB,MAAM,MAAM,mBAAmB,GAC3B,kBAAkB,GAClB,cAAc,GACd,oBAAoB,GACpB,iBAAiB;AACnB,oEAAoE;GAClE,iBAAiB,CAAA;AAErB,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,mBAAmB,CAAA;IAC3B,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;IAClD,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,6EAQhB,CAAA;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAA;AAE1D,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,gBAAgB,8CAA8D,CAAA;AAE3F,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE9D;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAExE;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kFAAkF;IAClF,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,sDAIzB,CAAA;AAEX,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,QAAQ,GAAG,gBAAgB,CAAC,GAAG;IACxE,OAAO,CAAC,EAAE,KAAK,CAAA;CAChB,GACA,sBAAsB,CAexB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,YAAY,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB;;;;OAIG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,kBAAkB,oFAQpB,CAAA;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjE,gEAAgE;AAChE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAA;IACZ,mEAAmE;IACnE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,4DAA4D;IAC5D,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,eAAe,CAAA;IACtB,kFAAkF;IAClF,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB;;;;;;;;;;;;;;;OAeG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;;;;;;OAUG;IACH,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC;AAED,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,WAAW,GAAG,gBAAgB,CAAA;AAE/E,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,mBAAmB,CAAA;IACzB,MAAM,EAAE,wBAAwB,CAAA;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,mCAAmD,CAAA;AAEvF,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE3E,qEAAqE;AACrE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAEpF;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,8BAA8B,4FAQhC,CAAA;AAEX,MAAM,MAAM,0BAA0B,GAAG,CAAC,OAAO,8BAA8B,CAAC,CAAC,MAAM,CAAC,CAAA;AAExF,2EAA2E;AAC3E,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,0BAA0B,CAKrC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,0BAA0B,CAAA;IAChC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,wBAAwB,CAAA;CACpC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,oBAAoB,CAAA;IAC1B,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,sBAAsB,CAAA;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAA;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kFAAkF;IAClF,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACjE,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACxC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,0BAA0B;IACzC,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAA;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,iBAAiB,CAAA;IACvB,eAAe,EAAE,iBAAiB,EAAE,CAAA;IACpC,kBAAkB,EAAE,wBAAwB,EAAE,CAAA;IAC9C,cAAc,EAAE,qBAAqB,CAAA;IACrC,SAAS,EAAE,iBAAiB,EAAE,CAAA;IAC9B,SAAS,EAAE,eAAe,EAAE,CAAA;IAC5B;;;;OAIG;IACH,YAAY,CAAC,EAAE,WAAW,EAAE,CAAA;IAC5B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAA;IACtC,WAAW,EAAE,uBAAuB,EAAE,CAAA;IACtC,0DAA0D;IAC1D,OAAO,CAAC,EAAE,0BAA0B,CAAA;IACpC,wEAAwE;IACxE,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACxC;AAED,MAAM,WAAW,iCAAiC;IAChD,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,oBAAoB,CAAA;CAC5B;AAED,MAAM,WAAW,4BAA4B;IAC3C,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB;AAED,MAAM,WAAW,iCAAiC;IAChD,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,SAAS,CAAC,MAAM,GAAG,qBAAqB,CAAC,EAAE,CAAA;CACrD;AAED,MAAM,WAAW,8BAA8B;IAC7C,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"observation.js","sourceRoot":"","sources":["../src/observation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuBH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1C,OAAO;IACP,YAAY;IACZ,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;CACC,CAAC,CAAA;AAIX,6DAA6D;AAC7D,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,cAAoC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC3F,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC,CAAA;AAI3F;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,gBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC7F,CAAC;AA4BD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC;IACnD,eAAe;IACf,aAAa;IACb,SAAS;CACD,CAAC,CAAA;AAIX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAEC;IAED,4EAA4E;IAC5E,mEAAmE;IACnE,IAAI,KAAK,CAAC,OAAO,CAAE,QAAkC,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAA;IAEhF,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;QACxB,KAAK,UAAU;YACb,OAAO,eAAe,CAAA;QACxB,KAAK,SAAS;YACZ,OAAO,aAAa,CAAA;QACtB,KAAK,UAAU;YACb,OAAO,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAA;QAClE;YACE,OAAO,SAAS,CAAA;IACpB,CAAC;AACH,CAAC;AA6BD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9C,SAAS;IACT,aAAa;IACb,OAAO;IACP,SAAS;IACT,QAAQ;IACR,MAAM;IACN,OAAO;CACC,CAAC,CAAA;AAIX,gEAAgE;AAChE,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,kBAAwC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC/F,CAAC;AAsED;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,SAAS,CAAU,CAAC,CAAA;AAIvF,qEAAqE;AACrE,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,uBAA6C,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AACpG,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1D,SAAS;IACT,aAAa;IACb,OAAO;IACP,QAAQ;IACR,MAAM;IACN,cAAc;IACd,UAAU;CACF,CAAC,CAAA;AAIX,2EAA2E;AAC3E,MAAM,UAAU,4BAA4B,CAC1C,KAAc;IAEd,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACxB,8BAAoD,CAAC,QAAQ,CAAC,KAAK,CAAC,CACtE,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"observation.js","sourceRoot":"","sources":["../src/observation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAyBH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1C,OAAO;IACP,YAAY;IACZ,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;CACC,CAAC,CAAA;AAIX,6DAA6D;AAC7D,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,cAAoC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC3F,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC,CAAA;AAI3F;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,gBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC7F,CAAC;AA4BD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC;IACnD,eAAe;IACf,aAAa;IACb,SAAS;CACD,CAAC,CAAA;AAIX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAEC;IAED,4EAA4E;IAC5E,mEAAmE;IACnE,IAAI,KAAK,CAAC,OAAO,CAAE,QAAkC,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAA;IAEhF,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;QACxB,KAAK,UAAU;YACb,OAAO,eAAe,CAAA;QACxB,KAAK,SAAS;YACZ,OAAO,aAAa,CAAA;QACtB,KAAK,UAAU;YACb,OAAO,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAA;QAClE;YACE,OAAO,SAAS,CAAA;IACpB,CAAC;AACH,CAAC;AA6BD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9C,SAAS;IACT,aAAa;IACb,OAAO;IACP,SAAS;IACT,QAAQ;IACR,MAAM;IACN,OAAO;CACC,CAAC,CAAA;AAIX,gEAAgE;AAChE,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,kBAAwC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC/F,CAAC;AAsED;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,SAAS,CAAU,CAAC,CAAA;AAIvF,qEAAqE;AACrE,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,uBAA6C,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AACpG,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1D,SAAS;IACT,aAAa;IACb,OAAO;IACP,QAAQ;IACR,MAAM;IACN,cAAc;IACd,UAAU;CACF,CAAC,CAAA;AAIX,2EAA2E;AAC3E,MAAM,UAAU,4BAA4B,CAC1C,KAAc;IAEd,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACxB,8BAAoD,CAAC,QAAQ,CAAC,KAAK,CAAC,CACtE,CAAA;AACH,CAAC"}
@@ -10,6 +10,12 @@
10
10
  * and validates what it is handed so the app and forgewright never fork the
11
11
  * read-side.
12
12
  *
13
+ * OWNERSHIP (jgwill/Miadi#592, packages/CLAUDE.md): this module is the *declaration*
14
+ * of the chronicle→book edge. `@miadi/inquiry-weave` owns its *enumeration* and never
15
+ * authors a story; `packages/passages` owns the *derivation* of a book from a vessel,
16
+ * as a read-only projection of the chronicle; `app/chronicle` renders and serves.
17
+ * No new package is created for this edge.
18
+ *
13
19
  * A story maps to an episode by the episode number parsed from its name
14
20
  * (`Episode_040___…`, `Episode-044-…`). Stories with no parseable episode number
15
21
  * (a pilot title like `The_Room_Lent_It_Ears.html`, or `dummy1.html`) are still
@@ -64,6 +70,14 @@ export interface ObserveStoryLibraryOptions {
64
70
  export declare function observeStoryLibrary(inputs: ReadonlyArray<string | StoryLibraryEntryInput>, options?: ObserveStoryLibraryOptions): StoryLibraryManifest;
65
71
  /** Index the library's stories by the episode number they declare. */
66
72
  export declare function indexStoriesByEpisode(manifest: StoryLibraryManifest): Map<number, StoryManifestEntry[]>;
73
+ export interface LinkStoryFormsOptions {
74
+ /**
75
+ * Sink for link-time diagnostics (`story-library.episode-link-ambiguous`).
76
+ * Linking stays fail-open either way — the shelf is a garnish, never a gate —
77
+ * so an ambiguity refuses the link and reports; it never throws.
78
+ */
79
+ diagnostics?: CompatibilityDiagnostic[];
80
+ }
67
81
  /**
68
82
  * Non-destructively attach each episode's book form(s) to its chronicle entry.
69
83
  *
@@ -71,6 +85,13 @@ export declare function indexStoriesByEpisode(manifest: StoryLibraryManifest): M
71
85
  * published story gains a `stories` array — the seam the `/chronicle` surface
72
86
  * uses to link an episode to its interactive-book form. Episodes without a
73
87
  * published story are returned unchanged (no `stories` field).
88
+ *
89
+ * Episode numbers collide in the chronicle — the folder name is the true key
90
+ * (011, 016, 043, 078, 083, 098, 120 each name two folders today). A story
91
+ * number owned by MORE THAN ONE episode folder is therefore ambiguous: the
92
+ * story is linked to NONE of them — never a silent first match — and a
93
+ * `story-library.episode-link-ambiguous` warning naming every candidate folder
94
+ * is pushed to `options.diagnostics` when a sink is supplied.
74
95
  */
75
- export declare function linkStoryForms(episodes: readonly EpisodeManifestEntry[], library: StoryLibraryManifest): EpisodeManifestEntry[];
96
+ export declare function linkStoryForms(episodes: readonly EpisodeManifestEntry[], library: StoryLibraryManifest, options?: LinkStoryFormsOptions): EpisodeManifestEntry[];
76
97
  //# sourceMappingURL=story-library-manifest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"story-library-manifest.d.ts","sourceRoot":"","sources":["../src/story-library-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAEzF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAEnE,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,CAAA;AAEtD,kEAAkE;AAClE,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAA;IACZ,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,SAAS,CAAA;IACf,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAA;IACpB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,6EAA6E;IAC7E,kBAAkB,EAAE,wBAAwB,EAAE,CAAA;IAC9C,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAA;CACd;AAED,uEAAuE;AACvE,MAAM,WAAW,sBAAsB;IACrC,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,eAAe,CAAA;IACrB,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,kBAAkB,EAAE,CAAA;IAC7B,WAAW,EAAE,uBAAuB,EAAE,CAAA;CACvC;AAED,MAAM,WAAW,0BAA0B;IACzC,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;CACjB;AAgCD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,CAAC,MAAM,GAAG,sBAAsB,CAAC,EACtD,OAAO,GAAE,0BAA+B,GACvC,oBAAoB,CA6DtB;AAED,sEAAsE;AACtE,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,oBAAoB,GAC7B,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CASnC;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,SAAS,oBAAoB,EAAE,EACzC,OAAO,EAAE,oBAAoB,GAC5B,oBAAoB,EAAE,CAQxB"}
1
+ {"version":3,"file":"story-library-manifest.d.ts","sourceRoot":"","sources":["../src/story-library-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAEzF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAEnE,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,CAAA;AAEtD,kEAAkE;AAClE,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAA;IACZ,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,SAAS,CAAA;IACf,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAA;IACpB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,6EAA6E;IAC7E,kBAAkB,EAAE,wBAAwB,EAAE,CAAA;IAC9C,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAA;CACd;AAED,uEAAuE;AACvE,MAAM,WAAW,sBAAsB;IACrC,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,eAAe,CAAA;IACrB,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,kBAAkB,EAAE,CAAA;IAC7B,WAAW,EAAE,uBAAuB,EAAE,CAAA;CACvC;AAED,MAAM,WAAW,0BAA0B;IACzC,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;CACjB;AAgCD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,CAAC,MAAM,GAAG,sBAAsB,CAAC,EACtD,OAAO,GAAE,0BAA+B,GACvC,oBAAoB,CA6DtB;AAED,sEAAsE;AACtE,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,oBAAoB,GAC7B,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CASnC;AAED,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,WAAW,CAAC,EAAE,uBAAuB,EAAE,CAAA;CACxC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,SAAS,oBAAoB,EAAE,EACzC,OAAO,EAAE,oBAAoB,EAC7B,OAAO,GAAE,qBAA0B,GAClC,oBAAoB,EAAE,CAkCxB"}
@@ -10,6 +10,12 @@
10
10
  * and validates what it is handed so the app and forgewright never fork the
11
11
  * read-side.
12
12
  *
13
+ * OWNERSHIP (jgwill/Miadi#592, packages/CLAUDE.md): this module is the *declaration*
14
+ * of the chronicle→book edge. `@miadi/inquiry-weave` owns its *enumeration* and never
15
+ * authors a story; `packages/passages` owns the *derivation* of a book from a vessel,
16
+ * as a read-only projection of the chronicle; `app/chronicle` renders and serves.
17
+ * No new package is created for this edge.
18
+ *
13
19
  * A story maps to an episode by the episode number parsed from its name
14
20
  * (`Episode_040___…`, `Episode-044-…`). Stories with no parseable episode number
15
21
  * (a pilot title like `The_Room_Lent_It_Ears.html`, or `dummy1.html`) are still
@@ -121,11 +127,43 @@ export function indexStoriesByEpisode(manifest) {
121
127
  * published story gains a `stories` array — the seam the `/chronicle` surface
122
128
  * uses to link an episode to its interactive-book form. Episodes without a
123
129
  * published story are returned unchanged (no `stories` field).
130
+ *
131
+ * Episode numbers collide in the chronicle — the folder name is the true key
132
+ * (011, 016, 043, 078, 083, 098, 120 each name two folders today). A story
133
+ * number owned by MORE THAN ONE episode folder is therefore ambiguous: the
134
+ * story is linked to NONE of them — never a silent first match — and a
135
+ * `story-library.episode-link-ambiguous` warning naming every candidate folder
136
+ * is pushed to `options.diagnostics` when a sink is supplied.
124
137
  */
125
- export function linkStoryForms(episodes, library) {
138
+ export function linkStoryForms(episodes, library, options = {}) {
126
139
  const byEpisode = indexStoriesByEpisode(library);
127
- return episodes.map((episode) => {
140
+ const foldersByNumber = new Map();
141
+ for (const episode of episodes) {
128
142
  if (episode.number === undefined)
143
+ continue;
144
+ const folders = foldersByNumber.get(episode.number) ?? [];
145
+ folders.push(episode.name);
146
+ foldersByNumber.set(episode.number, folders);
147
+ }
148
+ const ambiguous = new Set();
149
+ for (const [number, folders] of foldersByNumber) {
150
+ const stories = byEpisode.get(number);
151
+ if (folders.length < 2 || !stories || stories.length === 0)
152
+ continue;
153
+ ambiguous.add(number);
154
+ if (options.diagnostics) {
155
+ for (const story of stories) {
156
+ options.diagnostics.push({
157
+ level: "warning",
158
+ code: "story-library.episode-link-ambiguous",
159
+ message: `story carries episode number ${number}, which ${folders.length} episode folders share (${folders.join(", ")}); the story is linked to none of them — the folder name is the key, and a first match would be silent`,
160
+ path: story.relativePath,
161
+ });
162
+ }
163
+ }
164
+ }
165
+ return episodes.map((episode) => {
166
+ if (episode.number === undefined || ambiguous.has(episode.number))
129
167
  return episode;
130
168
  const matched = byEpisode.get(episode.number);
131
169
  if (!matched || matched.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"story-library-manifest.js","sourceRoot":"","sources":["../src/story-library-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AA6C3D,MAAM,YAAY,GAAG,WAAW,CAAA;AAEhC,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;AACrC,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,cAAc,CAAC,IAAI,CAAC;SACxB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAA;AACX,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY,EAAE,YAAoB;IAI9D,MAAM,UAAU,GAA+B,EAAE,CAAA;IACjD,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;IACjC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAEnE,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAA;IACzC,MAAM,aAAa,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACvE,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;IAC3E,CAAC;IACD,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAA;IACtD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,CAAA;AACtC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAsD,EACtD,UAAsC,EAAE;IAExC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,eAAe,CAAA;IAC5C,MAAM,WAAW,GAA8B,EAAE,CAAA;IACjD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,OAAO,GAAyB,EAAE,CAAA;IAExC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,KAAK,GAA2B,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;QACnF,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,CAAA;QACxB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClD,WAAW,CAAC,IAAI,CAAC;gBACf,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,6BAA6B;gBACnC,OAAO,EAAE,mEAAmE;aAC7E,CAAC,CAAA;YACF,SAAQ;QACV,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,WAAW,CAAC,IAAI,CAAC;gBACf,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,+BAA+B;gBACrC,OAAO,EAAE,iDAAiD;gBAC1D,IAAI,EAAE,IAAI;aACX,CAAC,CAAA;YACF,SAAQ;QACV,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAEd,MAAM,IAAI,GACR,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAA;QACvF,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAEtE,OAAO,CAAC,IAAI,CAAC;YACX,IAAI;YACJ,OAAO,EAAE,SAAS,IAAI,EAAE;YACxB,IAAI;YACJ,YAAY,EAAE,IAAI;YAClB,aAAa;YACb,kBAAkB,EAAE,UAAU;YAC9B,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC;SACxB,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAE7F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,WAAW,CAAC,IAAI,CAAC;YACf,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,kDAAkD;SAC5D,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,QAAQ,GAAyB;QACrC,IAAI,EAAE,eAAe;QACrB,IAAI;QACJ,OAAO;QACP,WAAW;KACZ,CAAA;IACD,IAAI,OAAO,CAAC,GAAG;QAAE,QAAQ,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAA;IACnE,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,qBAAqB,CACnC,QAA8B;IAE9B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAgC,CAAA;IACzD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS;YAAE,SAAQ;QAC/C,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;QACvD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClB,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IAC5C,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,QAAyC,EACzC,OAA6B;IAE7B,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAA;IAChD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,OAAO,CAAA;QAChD,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC7C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,OAAO,CAAA;QACpD,OAAO,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;IACzC,CAAC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"story-library-manifest.js","sourceRoot":"","sources":["../src/story-library-manifest.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@miadi/episodic-memory-schema",
3
- "version": "0.7.1",
4
- "description": "TypeScript types and JSON Schema for episodic memory \u2014 the durable session-to-session memory layer in the Miadi orchestration kit. Narrative layer is NCP-aligned; provenance layer is W3C PROV-DM and OAIS-informed.",
3
+ "version": "0.9.0",
4
+ "description": "TypeScript types and JSON Schema for episodic memory — the durable session-to-session memory layer in the Miadi orchestration kit. Narrative layer is NCP-aligned; provenance layer is W3C PROV-DM and OAIS-informed.",
5
5
  "keywords": [
6
6
  "miadi",
7
7
  "storyweaver",
@@ -40,16 +40,15 @@
40
40
  "README.md",
41
41
  "LICENSE"
42
42
  ],
43
- "scripts": {
44
- "build": "tsc",
45
- "type-check": "tsc --noEmit",
46
- "test": "npm run build && node --test test/*.test.mjs",
47
- "prepublishOnly": "npm run build"
48
- },
49
43
  "devDependencies": {
50
44
  "typescript": "^5.4.0"
51
45
  },
52
46
  "publishConfig": {
53
47
  "access": "public"
48
+ },
49
+ "scripts": {
50
+ "build": "tsc",
51
+ "type-check": "tsc --noEmit",
52
+ "test": "npm run build && node --test test/*.test.mjs"
54
53
  }
55
- }
54
+ }