@miadi/inquiry-weave 0.1.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.
Files changed (56) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +174 -0
  3. package/dist/artefact.d.ts +33 -0
  4. package/dist/artefact.d.ts.map +1 -0
  5. package/dist/artefact.js +59 -0
  6. package/dist/artefact.js.map +1 -0
  7. package/dist/bin.d.ts +3 -0
  8. package/dist/bin.d.ts.map +1 -0
  9. package/dist/bin.js +4 -0
  10. package/dist/bin.js.map +1 -0
  11. package/dist/cli.d.ts +21 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +339 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/env.d.ts +22 -0
  16. package/dist/env.d.ts.map +1 -0
  17. package/dist/env.js +26 -0
  18. package/dist/env.js.map +1 -0
  19. package/dist/episode.d.ts +38 -0
  20. package/dist/episode.d.ts.map +1 -0
  21. package/dist/episode.js +109 -0
  22. package/dist/episode.js.map +1 -0
  23. package/dist/index.d.ts +12 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +12 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/issue.d.ts +27 -0
  28. package/dist/issue.d.ts.map +1 -0
  29. package/dist/issue.js +55 -0
  30. package/dist/issue.js.map +1 -0
  31. package/dist/legacy-hch.d.ts +28 -0
  32. package/dist/legacy-hch.d.ts.map +1 -0
  33. package/dist/legacy-hch.js +120 -0
  34. package/dist/legacy-hch.js.map +1 -0
  35. package/dist/relate.d.ts +31 -0
  36. package/dist/relate.d.ts.map +1 -0
  37. package/dist/relate.js +79 -0
  38. package/dist/relate.js.map +1 -0
  39. package/dist/status.d.ts +47 -0
  40. package/dist/status.d.ts.map +1 -0
  41. package/dist/status.js +142 -0
  42. package/dist/status.js.map +1 -0
  43. package/dist/sync.d.ts +28 -0
  44. package/dist/sync.d.ts.map +1 -0
  45. package/dist/sync.js +80 -0
  46. package/dist/sync.js.map +1 -0
  47. package/dist/tree.d.ts +19 -0
  48. package/dist/tree.d.ts.map +1 -0
  49. package/dist/tree.js +44 -0
  50. package/dist/tree.js.map +1 -0
  51. package/dist/weave.d.ts +83 -0
  52. package/dist/weave.d.ts.map +1 -0
  53. package/dist/weave.js +101 -0
  54. package/dist/weave.js.map +1 -0
  55. package/package.json +51 -0
  56. package/rispecs/medicine-wheel-registration.spec.md +72 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Miadi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,174 @@
1
+ # @miadi/inquiry-weave
2
+
3
+ Relate and sync three identities of one inquiry — and never write the inquiry itself.
4
+
5
+ ```
6
+ ┌────────────────────────────┐ inquire (vessel + issue) ┌──────────────────────┐
7
+ │ Inquiry artefact │ ◄─────────────────────────── │ Chronicle episode │
8
+ │ $MIADI_INQUIRY_ROOT/<dir> │ │ <chronicle>/<date>- │
9
+ │ (IAIP tree — │ ───────────────────────────► │ episode-NNN-<slug>/ │
10
+ │ system-of-record) │ promote / sync (mirror) │ inquiry/<dir>/ │
11
+ └─────────────┬──────────────┘ └──────────┬───────────┘
12
+ │ │
13
+ │ ┌────────────────────────┐ │
14
+ └──────────► │ GitHub issue │ ◄────────────────┘
15
+ .weave.yaml│ owner/repo#N │ inquiry/weave.yaml
16
+ └────────────────────────┘
17
+ ```
18
+
19
+ ## The three identities (worked example: ep126 / #245)
20
+
21
+ | Identity | Example |
22
+ |---|---|
23
+ | Inquiry artefact | `/src/IAIP/prototypes/artefacts/ep126-mila-ai-event-260715-b08218a8-…` |
24
+ | GitHub issue | `miadisabelle/Etuaptmumk-RSM#245` |
25
+ | Chronicle episode | `…/miadi-chronicle/2026-07-13-episode-126-mila-ai-indigenous-gathering/` |
26
+
27
+ This package generalizes the manual prior art (`<episode>/inquiry/_sync.sh`, a one-way tar
28
+ copy) into a repeatable workflow: `relate`, `promote`, `inquire`, `sync`, `status`.
29
+
30
+ ## The mystery boundary
31
+
32
+ **The package never generates inquiry content.** Creating an inquiry's substance — the
33
+ question, the search, the listening — is human work and stays that way. `inquire` creates
34
+ only the *vessel*: a named empty directory, its GitHub issue, and the relation metadata.
35
+ This boundary is enforced by an executable test (the vessel must contain relation
36
+ metadata only).
37
+
38
+ ## CLI
39
+
40
+ ```
41
+ inquiry-weave relate --artefact <name|path> --episode <num|name|path> [--issue owner/repo#N]
42
+ inquiry-weave promote --artefact <name|path> (--episode <ref> | --new-episode <slug> [--title <t>])
43
+ inquiry-weave inquire --episode <ref> --slug <slug> [--title <t>] [--repo owner/repo] [--no-issue]
44
+ inquiry-weave sync (--artefact <ref> [--episode <ref>] | --episode <ref> [--all])
45
+ inquiry-weave status (--episode <ref> | --artefact <ref>) [--json]
46
+ ```
47
+
48
+ Global flags: `--inquiry-root`, `--chronicle-root`, `--repo`, `--dry-run`, `--json`.
49
+ Exit codes: `0` ok, `1` operational error, `2` usage/resolution error (ambiguous episode
50
+ numbers list their candidates — duplicates exist in the wild).
51
+
52
+ ## Environment
53
+
54
+ | Variable | Fallback chain | Default |
55
+ |---|---|---|
56
+ | `MIADI_INQUIRY_ROOT` | → `INQUIRY_ROOT` | `/src/IAIP/prototypes/artefacts` |
57
+ | `MIADI_CHRONICLE_ROOT` | — | `/srv/miadi/episodes/miadi-chronicle` |
58
+ | `MIADI_INQUIRY_REPO` | — | `miadisabelle/Etuaptmumk-RSM` |
59
+ | `INQUIRY_WEAVE_ISSUE_LIB` | → `/a/src/scripts/fn_github_issue.sh` → `/src/scripts/fn_github_issue.sh` | — |
60
+
61
+ ## Metadata contract
62
+
63
+ `weave.yaml` / `.weave.yaml` — written and owned by this package — is the authoritative
64
+ record of the relation. Sync state lives episode-side only, so the artefact-side file can
65
+ be mirrored verbatim without a self-invalidating hash loop.
66
+
67
+ **Episode side, `<episode>/inquiry/weave.yaml`:**
68
+
69
+ ```yaml
70
+ weave: 1
71
+ episode:
72
+ number: 126
73
+ slug: mila-ai-indigenous-gathering
74
+ path: 2026-07-13-episode-126-mila-ai-indigenous-gathering
75
+ inquiries:
76
+ - artefact: ep126-mila-ai-event-260715-b08218a8-0441-4596-a16e-47483d3ab57c
77
+ issue: miadisabelle/Etuaptmumk-RSM#245
78
+ issue_url: https://github.com/miadisabelle/Etuaptmumk-RSM/issues/245
79
+ related_at: 2026-07-15T00:00:00.000Z
80
+ last_sync:
81
+ at: 2026-07-15T00:00:00.000Z
82
+ tree_sha256: <sha256 of the sorted relpath:filehash:size manifest>
83
+ file_count: 4
84
+ bytes_total: 341001
85
+ ```
86
+
87
+ **Artefact side, `<artefact>/.weave.yaml`:**
88
+
89
+ ```yaml
90
+ weave: 1
91
+ artefact: ep126-mila-ai-event-260715-b08218a8-0441-4596-a16e-47483d3ab57c
92
+ issue: miadisabelle/Etuaptmumk-RSM#245
93
+ issue_url: https://github.com/miadisabelle/Etuaptmumk-RSM/issues/245
94
+ episodes:
95
+ - path: 2026-07-13-episode-126-mila-ai-indigenous-gathering
96
+ number: 126
97
+ related_at: 2026-07-15T00:00:00.000Z
98
+ ```
99
+
100
+ `relate` also appends the ep090-style back-link into the artefact's `AGENTS.md`
101
+ (episode path + `related issue owner/repo#N`) — append-if-missing, never overwriting.
102
+
103
+ ### `.hch/` is legacy input — and an open decision
104
+
105
+ `.hch/` (the issue-harness cache written by `fn_github_issue.sh` and its predecessors) is
106
+ read **best-effort, once**, to seed `.weave.yaml` when relating a pre-existing artefact.
107
+ Tolerated shapes: the correct `issue_<N>.env`, the V2-era bug shape (literal `issue_.env`
108
+ with no `issue_url`), and the newest `issue_add__*.json` as fallback. This package never
109
+ writes `.hch`.
110
+
111
+ **Open decision (deliberately not settled in v0):** does `.hch` get (a) formalized as a
112
+ shared contract across tools, (b) kept as `fn_github_issue.sh`'s private cache and mapped
113
+ into `.weave.yaml` at relate time — v0's de-facto behavior — or (c) retired? v0 is
114
+ compatible with all three outcomes.
115
+
116
+ ## IAIP is the external system-of-record
117
+
118
+ The inquiry root lives in the IAIP tree (a checkout of `miadisabelle/Etuaptmumk-RSM`).
119
+ Sync is one-way (artefact → episode): the episode copy is a snapshot, deletions
120
+ propagate, and local edits to the copy are flagged as `episode-copy-diverged` before
121
+ being overwritten.
122
+
123
+ **Vercel API evaluation note:** `https://etuaptmumk.vercel.app/` exposes only
124
+ `/api/articles` and `/api/articles/seed` (which read `prototypes/artefacts` markdown into
125
+ Redis) — there is no inquiry CRUD. It is a documented future interface; v0 has no
126
+ dependency on it.
127
+
128
+ **Deferred decision, explicitly named:** absorbing IAIP into Miadi packages is out of
129
+ scope and not planned here.
130
+
131
+ ## GitHub issues via fn_github_issue.sh
132
+
133
+ `inquire` delegates issue creation to the sourced `issue_add` function of
134
+ `fn_github_issue.sh` (a `gh` CLI wrapper), invoked with cwd = the artefact directory and
135
+ an explicit `owner/repo`. The created identity is parsed from stdout (`* owner/repo#N`)
136
+ and recorded straight into `.weave.yaml`. Issue title convention: the artefact's absolute
137
+ path (as with #245). `--no-issue` skips creation.
138
+
139
+ ## Medicine-wheel registration & forgewright visibility (spec-only)
140
+
141
+ The future `inquiry-weave register` will project `WeaveRecord` (exported from this
142
+ package as the seam) into medicine-wheel storage so forgewright can render Inquiry
143
+ Weaves in episode views. Nothing is implemented in v0 — see the RISE specs:
144
+
145
+ - `rispecs/medicine-wheel-registration.spec.md` (this package)
146
+ - `medicine-wheel:rispecs/inquiry-weave-registration.spec.md`
147
+ - `forgewright:rispecs/09-inquiry-weave-visibility.spec.md` (branch `4-plan-episode-visibility`)
148
+
149
+ ## Kinship with @miadi/passages
150
+
151
+ Episode *creation* as a first-class command (`mkepisode -n 133 -t <slug> -g "<goal>"`)
152
+ likely belongs to `packages/passages` ("Narrative Formulations for the Miadi Chronicle").
153
+ This package keeps its `--new-episode` scaffolding inside one exported function
154
+ (`scaffoldEpisode`) so passages can own creation later, and inquiry-weave consumes any
155
+ pre-existing episode regardless of its creator.
156
+
157
+ ## Chronicle repo rule
158
+
159
+ All work in `miadi-chronicle/` is committed directly to `main` (per its `AGENTS.md`) —
160
+ this package writes there only when you run it, and never commits anything itself.
161
+
162
+ ## Development
163
+
164
+ ```
165
+ pnpm --filter @miadi/inquiry-weave build
166
+ pnpm --filter @miadi/inquiry-weave test
167
+ ```
168
+
169
+ Tests are fixture-based (`node --test` in temp roots), with no network and no real `gh`
170
+ calls (`INQUIRY_WEAVE_ISSUE_LIB` injects a fake issue lib).
171
+
172
+ ---
173
+ 🌸: A loom, not a pen — the weave holds artefact, issue, and episode in relation so none
174
+ drifts from the others, while the question itself stays yours to ask.
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Inquiry artefact identity and the empty vessel.
3
+ *
4
+ * The mystery boundary lives here: scaffoldVessel() creates a named, empty
5
+ * directory and nothing else. The inquiry's substance is written by humans
6
+ * (and their chosen ceremonies), never by this package.
7
+ */
8
+ export interface ArtefactIdentity {
9
+ name: string;
10
+ dir: string;
11
+ }
12
+ export declare class ArtefactResolutionError extends Error {
13
+ }
14
+ export declare function resolveArtefact(inquiryRoot: string, ref: string): ArtefactIdentity;
15
+ export interface ArtefactNameParts {
16
+ episodeNumber: number;
17
+ slug: string;
18
+ date?: Date;
19
+ uuid?: string;
20
+ }
21
+ /** Newest convention observed in the wild: ep<NNN>-<slug>-<YYMMDD>-<uuid>. */
22
+ export declare function buildArtefactName(parts: ArtefactNameParts): string;
23
+ export declare function scaffoldVessel(inquiryRoot: string, name: string): Promise<ArtefactIdentity>;
24
+ export interface BackLinkInput {
25
+ episodeAbsPath: string;
26
+ issue?: string;
27
+ }
28
+ /**
29
+ * Append the ep090-style back-link into the artefact's AGENTS.md — only when
30
+ * the episode path is not already mentioned. Never overwrites existing text.
31
+ */
32
+ export declare function appendBackLink(artefactDir: string, input: BackLinkInput): Promise<boolean>;
33
+ //# sourceMappingURL=artefact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artefact.d.ts","sourceRoot":"","sources":["../src/artefact.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,qBAAa,uBAAwB,SAAQ,KAAK;CAAG;AAErD,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAclF;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAA;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,8EAA8E;AAC9E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAIlE;AAED,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,gBAAgB,CAAC,CAO3B;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,OAAO,CAAC,CAUlB"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Inquiry artefact identity and the empty vessel.
3
+ *
4
+ * The mystery boundary lives here: scaffoldVessel() creates a named, empty
5
+ * directory and nothing else. The inquiry's substance is written by humans
6
+ * (and their chosen ceremonies), never by this package.
7
+ */
8
+ import { appendFile, mkdir, readFile } from "node:fs/promises";
9
+ import { existsSync, statSync } from "node:fs";
10
+ import { randomUUID } from "node:crypto";
11
+ import { basename, isAbsolute, join, resolve } from "node:path";
12
+ export class ArtefactResolutionError extends Error {
13
+ }
14
+ export function resolveArtefact(inquiryRoot, ref) {
15
+ const trimmed = ref.trim().replace(/\/+$/, "");
16
+ const candidates = [
17
+ join(inquiryRoot, trimmed),
18
+ isAbsolute(trimmed) ? trimmed : resolve(trimmed),
19
+ ];
20
+ for (const candidate of candidates) {
21
+ if (existsSync(candidate) && statSync(candidate).isDirectory()) {
22
+ return { name: basename(candidate), dir: candidate };
23
+ }
24
+ }
25
+ throw new ArtefactResolutionError(`artefact not found: ${ref} (looked under ${inquiryRoot} and as a path)`);
26
+ }
27
+ /** Newest convention observed in the wild: ep<NNN>-<slug>-<YYMMDD>-<uuid>. */
28
+ export function buildArtefactName(parts) {
29
+ const date = parts.date ?? new Date();
30
+ const yymmdd = date.toISOString().slice(2, 10).replace(/-/g, "");
31
+ return `ep${parts.episodeNumber}-${parts.slug}-${yymmdd}-${parts.uuid ?? randomUUID()}`;
32
+ }
33
+ export async function scaffoldVessel(inquiryRoot, name) {
34
+ const dir = join(inquiryRoot, name);
35
+ if (existsSync(dir)) {
36
+ throw new ArtefactResolutionError(`artefact directory already exists: ${dir}`);
37
+ }
38
+ await mkdir(dir, { recursive: true });
39
+ return { name, dir };
40
+ }
41
+ /**
42
+ * Append the ep090-style back-link into the artefact's AGENTS.md — only when
43
+ * the episode path is not already mentioned. Never overwrites existing text.
44
+ */
45
+ export async function appendBackLink(artefactDir, input) {
46
+ const filePath = join(artefactDir, "AGENTS.md");
47
+ let existing = "";
48
+ if (existsSync(filePath))
49
+ existing = await readFile(filePath, "utf8");
50
+ if (existing.includes(input.episodeAbsPath))
51
+ return false;
52
+ const lines = [`\`${input.episodeAbsPath}\``];
53
+ if (input.issue)
54
+ lines.push(`related issue ${input.issue}`);
55
+ const separator = existing === "" || existing.endsWith("\n") ? "" : "\n";
56
+ await appendFile(filePath, `${separator}${existing === "" ? "" : "\n"}${lines.join("\n")}\n`);
57
+ return true;
58
+ }
59
+ //# sourceMappingURL=artefact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artefact.js","sourceRoot":"","sources":["../src/artefact.ts"],"names":[],"mappings":"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"}
package/dist/bin.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
package/dist/bin.js ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { runCli } from "./cli.js";
3
+ process.exitCode = await runCli(process.argv.slice(2));
4
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,OAAO,CAAC,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ /**
2
+ * inquiry-weave CLI — pure runCli(argv, options), side-effect-free on import.
3
+ *
4
+ * Exit codes: 0 ok, 1 operational error, 2 usage/resolution error.
5
+ */
6
+ import { parseEpisodeName } from "./episode.js";
7
+ export interface CliStreams {
8
+ stdout: {
9
+ write(chunk: string): unknown;
10
+ };
11
+ stderr: {
12
+ write(chunk: string): unknown;
13
+ };
14
+ }
15
+ export interface RunCliOptions extends Partial<CliStreams> {
16
+ env?: NodeJS.ProcessEnv;
17
+ now?: () => Date;
18
+ }
19
+ export declare function runCli(argv: string[], options?: RunCliOptions): Promise<number>;
20
+ export { parseEpisodeName };
21
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,EAGL,gBAAgB,EAIjB,MAAM,cAAc,CAAA;AAOrB,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;IACzC,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CAC1C;AAED,MAAM,WAAW,aAAc,SAAQ,OAAO,CAAC,UAAU,CAAC;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;CACjB;AA6TD,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6CzF;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAA"}