data-refinery-cli 0.3.3__tar.gz → 0.4.0__tar.gz

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 (87) hide show
  1. data_refinery_cli-0.4.0/.devague/current +1 -0
  2. data_refinery_cli-0.4.0/.devague/current_plan +1 -0
  3. data_refinery_cli-0.4.0/.devague/frames/data-refinery-cli-ships-the-storage-data-quality-i.json +334 -0
  4. data_refinery_cli-0.4.0/.devague/plans/data-refinery-cli-ships-the-storage-data-quality-i.json +393 -0
  5. data_refinery_cli-0.4.0/.github/workflows/publish-stack.yml +95 -0
  6. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.gitignore +6 -0
  7. data_refinery_cli-0.4.0/AGENTS.colleague.md +55 -0
  8. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/CHANGELOG.md +18 -0
  9. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/CLAUDE.md +38 -25
  10. data_refinery_cli-0.4.0/PKG-INFO +110 -0
  11. data_refinery_cli-0.4.0/README.md +93 -0
  12. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/data_refinery/cli/__init__.py +2 -0
  13. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/data_refinery/cli/_commands/overview.py +5 -4
  14. data_refinery_cli-0.4.0/data_refinery/cli/_commands/stack.py +281 -0
  15. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/data_refinery/explain/catalog.py +37 -0
  16. data_refinery_cli-0.4.0/docker-compose.yml +78 -0
  17. data_refinery_cli-0.4.0/docs/contract.md +91 -0
  18. data_refinery_cli-0.4.0/docs/plans/2026-06-20-data-refinery-cli-ships-the-storage-data-quality-i.md +96 -0
  19. data_refinery_cli-0.4.0/docs/specs/2026-06-20-data-refinery-cli-ships-the-storage-data-quality-i.md +74 -0
  20. data_refinery_cli-0.4.0/docs/stack-image.md +86 -0
  21. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/pyproject.toml +1 -1
  22. data_refinery_cli-0.4.0/tests/test_live_stack.py +131 -0
  23. data_refinery_cli-0.4.0/tests/test_stack.py +209 -0
  24. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/uv.lock +1 -1
  25. data_refinery_cli-0.3.3/AGENTS.colleague.md +0 -11
  26. data_refinery_cli-0.3.3/PKG-INFO +0 -75
  27. data_refinery_cli-0.3.3/README.md +0 -58
  28. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/agent-config/SKILL.md +0 -0
  29. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/agent-config/data/backend-fingerprints.yaml +0 -0
  30. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/agent-config/scripts/show.sh +0 -0
  31. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/ask-colleague/SKILL.md +0 -0
  32. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/ask-colleague/prompts/explore.md +0 -0
  33. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/ask-colleague/prompts/review.md +0 -0
  34. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/ask-colleague/prompts/write.md +0 -0
  35. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/ask-colleague/scripts/ask-colleague.sh +0 -0
  36. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
  37. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
  38. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/cicd/SKILL.md +0 -0
  39. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
  40. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
  41. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
  42. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
  43. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/cicd/scripts/workflow.sh +0 -0
  44. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/communicate/SKILL.md +0 -0
  45. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
  46. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
  47. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
  48. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
  49. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/communicate/scripts/templates/skill-new-brief.md +0 -0
  50. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
  51. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
  52. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
  53. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
  54. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
  55. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/run-tests/SKILL.md +0 -0
  56. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/run-tests/scripts/test.sh +0 -0
  57. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/sonarclaude/SKILL.md +0 -0
  58. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
  59. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/spec-to-plan/SKILL.md +0 -0
  60. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
  61. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/think/SKILL.md +0 -0
  62. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/think/scripts/think.sh +0 -0
  63. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/version-bump/SKILL.md +0 -0
  64. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills/version-bump/scripts/bump.py +0 -0
  65. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.claude/skills.local.yaml.example +0 -0
  66. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.flake8 +0 -0
  67. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.github/workflows/publish.yml +0 -0
  68. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.github/workflows/tests.yml +0 -0
  69. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/.markdownlint-cli2.yaml +0 -0
  70. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/LICENSE +0 -0
  71. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/culture.yaml +0 -0
  72. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/data_refinery/__init__.py +0 -0
  73. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/data_refinery/__main__.py +0 -0
  74. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/data_refinery/cli/_commands/__init__.py +0 -0
  75. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/data_refinery/cli/_commands/cli.py +0 -0
  76. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/data_refinery/cli/_commands/doctor.py +0 -0
  77. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/data_refinery/cli/_commands/explain.py +0 -0
  78. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/data_refinery/cli/_commands/learn.py +0 -0
  79. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/data_refinery/cli/_commands/whoami.py +0 -0
  80. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/data_refinery/cli/_errors.py +0 -0
  81. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/data_refinery/cli/_output.py +0 -0
  82. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/data_refinery/explain/__init__.py +0 -0
  83. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/docs/skill-sources.md +0 -0
  84. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/sonar-project.properties +0 -0
  85. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/tests/__init__.py +0 -0
  86. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/tests/test_cli.py +0 -0
  87. {data_refinery_cli-0.3.3 → data_refinery_cli-0.4.0}/tests/test_cli_introspection.py +0 -0
@@ -0,0 +1 @@
1
+ data-refinery-cli-ships-the-storage-data-quality-i
@@ -0,0 +1 @@
1
+ data-refinery-cli-ships-the-storage-data-quality-i
@@ -0,0 +1,334 @@
1
+ {
2
+ "slug": "data-refinery-cli-ships-the-storage-data-quality-i",
3
+ "title": "data-refinery-cli ships the storage + data-quality infra layer split out of eidetic-cli: a docker stack (mongo 27018 + neo4j 7687) published as a multi-arch GHCR image, files/cypher/mongo store adapters, and a consumer-agnostic data-quality CLI surface (validate, dedup, integrity, freshness) that eidetic consumes over a subprocess boundary as its first consumer",
4
+ "schema_version": 1,
5
+ "status": "exported",
6
+ "created": "2026-06-20T15:18:32Z",
7
+ "updated": "2026-06-20T15:31:17Z",
8
+ "claims": [
9
+ {
10
+ "id": "c1",
11
+ "kind": "announcement",
12
+ "text": "data-refinery-cli ships the storage + data-quality infra layer split out of eidetic-cli: a docker stack (mongo 27018 + neo4j 7687) published as a multi-arch GHCR image, files/cypher/mongo store adapters, and a consumer-agnostic data-quality CLI surface (validate, dedup, integrity, freshness) that eidetic consumes over a subprocess boundary as its first consumer",
13
+ "origin": "user",
14
+ "status": "confirmed",
15
+ "honesty_conditions": [
16
+ {
17
+ "id": "h1",
18
+ "text": "eidetic adopts data-refinery's stack + boundary with no regression to remember/recall, and the split is documented well enough that eidetic pins a known version",
19
+ "status": "confirmed"
20
+ }
21
+ ],
22
+ "hard_questions": [],
23
+ "links": []
24
+ },
25
+ {
26
+ "id": "c2",
27
+ "kind": "audience",
28
+ "text": "eidetic-cli (first consumer, over a subprocess-not-import boundary) and any future agent needing a dependency-light data store + quality checks; plus the data-refinery-cli mesh agent operator",
29
+ "origin": "llm",
30
+ "status": "confirmed",
31
+ "honesty_conditions": [
32
+ {
33
+ "id": "h11",
34
+ "text": "eidetic consumes the layer over a process boundary, and the surface is generic enough that a non-memory consumer could use store+quality without inheriting any memory concepts",
35
+ "status": "confirmed"
36
+ }
37
+ ],
38
+ "hard_questions": [],
39
+ "links": []
40
+ },
41
+ {
42
+ "id": "c3",
43
+ "kind": "before_state",
44
+ "text": "the storage/quality substrate lives in eidetic-cli (neo4j+pymongo deps, its own docker-compose, store/cypher adapters) \u2014 but data-refinery-cli's README already promises to own it and the code was originally cited FROM data-refinery; today data-refinery-cli has dependencies=[] and only the introspection scaffold",
45
+ "origin": "llm",
46
+ "status": "confirmed",
47
+ "honesty_conditions": [
48
+ {
49
+ "id": "h12",
50
+ "text": "verifiable today: data-refinery-cli has dependencies=[] and no compose/store code, while eidetic owns neo4j+pymongo+its own compose",
51
+ "status": "confirmed"
52
+ }
53
+ ],
54
+ "hard_questions": [],
55
+ "links": []
56
+ },
57
+ {
58
+ "id": "c4",
59
+ "kind": "after_state",
60
+ "text": "data-refinery-cli owns the docker stack (GHCR image) + the store adapters + a consumer-agnostic data-quality CLI; eidetic pulls the image and (phase 2) calls the CLI over a process boundary, dropping its own DB drivers",
61
+ "origin": "llm",
62
+ "status": "confirmed",
63
+ "honesty_conditions": [
64
+ {
65
+ "id": "h13",
66
+ "text": "after the split data-refinery-cli's repo contains the compose + GHCR workflow + (later) store/quality surface, and eidetic can point at them with a pinned version",
67
+ "status": "confirmed"
68
+ }
69
+ ],
70
+ "hard_questions": [],
71
+ "links": []
72
+ },
73
+ {
74
+ "id": "c5",
75
+ "kind": "why_it_matters",
76
+ "text": "the storage + data-quality layer is reusable beyond agent-memory; returning it to its origin makes data-refinery-cli the canonical owner instead of a cited-from reference, and unblocks eidetic to be a thin agentic-memory layer",
77
+ "origin": "llm",
78
+ "status": "confirmed",
79
+ "honesty_conditions": [
80
+ {
81
+ "id": "h14",
82
+ "text": "the storage+quality layer is demonstrably reusable beyond agent-memory (a non-eidetic consumer shape is expressible) and eidetic becomes thinner",
83
+ "status": "confirmed"
84
+ }
85
+ ],
86
+ "hard_questions": [],
87
+ "links": []
88
+ },
89
+ {
90
+ "id": "c6",
91
+ "kind": "boundary",
92
+ "text": "Phased: wave 1 ships the docker stack + a stack-management CLI + the GHCR image; wave 2 ships the generic store adapters + consumer-agnostic data-quality CLI; wave 3 ships the pinnable contract + eidetic consumption. data-refinery stores OPAQUE documents and never interprets them as memories",
93
+ "origin": "llm",
94
+ "status": "confirmed",
95
+ "honesty_conditions": [
96
+ {
97
+ "id": "h15",
98
+ "text": "each wave is independently landable: wave 1 (stack + GHCR + stack CLI) ships and is usable by eidetic before wave 2 exists",
99
+ "status": "confirmed"
100
+ }
101
+ ],
102
+ "hard_questions": [],
103
+ "links": []
104
+ },
105
+ {
106
+ "id": "c7",
107
+ "kind": "non_goal",
108
+ "text": "data-refinery does NOT own relevance ranking, the freshness *signal* (ranking blend), lifecycle (shadow/archive/no-hard-delete), or the memory record schema with temporal fields \u2014 those stay in eidetic. It exposes freshness as a *check* (age/staleness facts), not a ranking signal",
109
+ "origin": "llm",
110
+ "status": "confirmed",
111
+ "honesty_conditions": [],
112
+ "hard_questions": [],
113
+ "links": []
114
+ },
115
+ {
116
+ "id": "c8",
117
+ "kind": "non_goal",
118
+ "text": "Not a new clonable template, and not a reimplementation of the autonomous-intelligence/data-refinery extraction pipeline (pdf->entities). The introspection scaffold stays only as the agent-first CLI contract host",
119
+ "origin": "llm",
120
+ "status": "confirmed",
121
+ "honesty_conditions": [],
122
+ "hard_questions": [],
123
+ "links": []
124
+ },
125
+ {
126
+ "id": "c9",
127
+ "kind": "requirement",
128
+ "text": "docker-compose.yml brings up mongo:8.0 (host 27018->27017) + neo4j:5-community (7687 bolt, 7474 ui, apoc, NEO4J_AUTH=none) with healthchecks + volumes, matching eidetic's ports/auth so eidetic connects with no config change; container names data-refinery-*",
129
+ "origin": "llm",
130
+ "status": "confirmed",
131
+ "honesty_conditions": [
132
+ {
133
+ "id": "h2",
134
+ "text": "starting the compose yields mongo reachable on localhost:27018 and neo4j on bolt://localhost:7687 with apoc; eidetic's existing default env connects with zero config change",
135
+ "status": "confirmed"
136
+ }
137
+ ],
138
+ "hard_questions": [],
139
+ "links": []
140
+ },
141
+ {
142
+ "id": "c10",
143
+ "kind": "requirement",
144
+ "text": "A multi-arch (amd64+arm64) image published to GHCR on tag/release that brings up the mongo+neo4j substrate, so a consumer docker-pulls instead of hand-rolling compose; image name + tag scheme documented for pinning",
145
+ "origin": "llm",
146
+ "status": "confirmed",
147
+ "honesty_conditions": [
148
+ {
149
+ "id": "h3",
150
+ "text": "a consumer on amd64 OR arm64 docker-pulls a tagged image and brings up the same substrate; the tag scheme is documented and immutable per release",
151
+ "status": "confirmed"
152
+ }
153
+ ],
154
+ "hard_questions": [],
155
+ "links": []
156
+ },
157
+ {
158
+ "id": "c11",
159
+ "kind": "requirement",
160
+ "text": "A stack-management CLI (e.g. data-refinery stack up/down/status) wrapping the compose/image so the agent manages the infra it owns; --json status, no traceback, structured errors",
161
+ "origin": "llm",
162
+ "status": "confirmed",
163
+ "honesty_conditions": [
164
+ {
165
+ "id": "h4",
166
+ "text": "data-refinery stack up/down/status manages the substrate and status --json reports health with no traceback when docker is absent (CliError code 2 + hint)",
167
+ "status": "confirmed"
168
+ }
169
+ ],
170
+ "hard_questions": [],
171
+ "links": []
172
+ },
173
+ {
174
+ "id": "c12",
175
+ "kind": "requirement",
176
+ "text": "Files + cypher(neo4j) + mongo store adapters behind a backend Protocol (upsert/get/list/all + scope-filtered fetch), returned from eidetic, with neo4j+pymongo behind an optional extra [store], lazy-imported in function bodies, CliError(code=2)+install hint when absent; dependencies=[] stays the default and a static test asserts no top-level optional import",
177
+ "origin": "llm",
178
+ "status": "confirmed",
179
+ "honesty_conditions": [
180
+ {
181
+ "id": "h5",
182
+ "text": "with dependencies=[] installed, non-store verbs work; a store verb without the [store] extra exits code 2 with an install hint; a static test asserts neo4j/pymongo are never imported at module top level",
183
+ "status": "confirmed"
184
+ }
185
+ ],
186
+ "hard_questions": [],
187
+ "links": []
188
+ },
189
+ {
190
+ "id": "c13",
191
+ "kind": "requirement",
192
+ "text": "A consumer-agnostic data-quality CLI surface: validate (envelope shape), dedup (by id/hash, idempotent upsert \u2014 never duplicate), integrity (hash matches content / referential checks), freshness (age/staleness facts) \u2014 all JSON in/out, no eidetic memory semantics",
193
+ "origin": "llm",
194
+ "status": "confirmed",
195
+ "honesty_conditions": [
196
+ {
197
+ "id": "h6",
198
+ "text": "dedup is idempotent: running it twice over the same input yields identical store state and never creates a duplicate by id or hash; validate/integrity/freshness return structured JSON facts",
199
+ "status": "confirmed"
200
+ }
201
+ ],
202
+ "hard_questions": [],
203
+ "links": []
204
+ },
205
+ {
206
+ "id": "c14",
207
+ "kind": "requirement",
208
+ "text": "public/private scope no-leak survives the boundary: a private-scope document is never reachable via a public-scope fetch (can_serve preserved at the storage layer); this is enforced by data-refinery, not just eidetic",
209
+ "origin": "llm",
210
+ "status": "confirmed",
211
+ "honesty_conditions": [
212
+ {
213
+ "id": "h7",
214
+ "text": "a test stores a private-scope document and proves a public-scope fetch can never return it, across every backend adapter",
215
+ "status": "confirmed"
216
+ }
217
+ ],
218
+ "hard_questions": [],
219
+ "links": []
220
+ },
221
+ {
222
+ "id": "c15",
223
+ "kind": "requirement",
224
+ "text": "Full agent-first CLI contract on every new verb: --json everywhere, strict stdout(result)/stderr(error) split, hint: on errors, documented exit codes (0/1/2/3+), no Python traceback ever (CliError + dispatcher wrap)",
225
+ "origin": "llm",
226
+ "status": "confirmed",
227
+ "honesty_conditions": [
228
+ {
229
+ "id": "h8",
230
+ "text": "teken cli doctor . --strict passes for every new verb: --json present, no traceback, hint: on errors, documented exit codes",
231
+ "status": "confirmed"
232
+ }
233
+ ],
234
+ "hard_questions": [],
235
+ "links": []
236
+ },
237
+ {
238
+ "id": "c16",
239
+ "kind": "requirement",
240
+ "text": "The package is importable as a library in addition to the subprocess CLI: a stable public Python API (e.g. data_refinery.store, data_refinery.quality) so a consumer can import OR shell out; both surfaces share one implementation",
241
+ "origin": "llm",
242
+ "status": "confirmed",
243
+ "honesty_conditions": [
244
+ {
245
+ "id": "h9",
246
+ "text": "import data_refinery; data_refinery.store.put(...) works as a library AND data-refinery store put behaves identically over one shared implementation; both surfaces are tested",
247
+ "status": "confirmed"
248
+ }
249
+ ],
250
+ "hard_questions": [],
251
+ "links": []
252
+ },
253
+ {
254
+ "id": "c17",
255
+ "kind": "requirement",
256
+ "text": "A versioned, documented contract eidetic can pin: the CLI verbs + JSON shapes AND the image name/tag scheme, with semver discipline; documented in repo (docs/) so eidetic pins a known surface",
257
+ "origin": "llm",
258
+ "status": "confirmed",
259
+ "honesty_conditions": [
260
+ {
261
+ "id": "h10",
262
+ "text": "the documented contract carries a version eidetic can reference, and changing a JSON shape or image tag requires a semver bump",
263
+ "status": "confirmed"
264
+ }
265
+ ],
266
+ "hard_questions": [],
267
+ "links": []
268
+ },
269
+ {
270
+ "id": "c18",
271
+ "kind": "success_signal",
272
+ "text": "eidetic, unchanged, docker-pulls the GHCR image and its existing 27018/7687 defaults connect; then (phase 2) eidetic stores+fetches through data-refinery's CLI/library over a process boundary and can drop neo4j+pymongo from its own runtime deps; idempotent dedup + scope no-leak hold across the boundary",
273
+ "origin": "llm",
274
+ "status": "confirmed",
275
+ "honesty_conditions": [
276
+ {
277
+ "id": "h16",
278
+ "text": "a live test shows eidetic's default env connecting to the data-refinery stack with zero config change; dedup idempotency + scope no-leak hold across the boundary",
279
+ "status": "confirmed"
280
+ }
281
+ ],
282
+ "hard_questions": [],
283
+ "links": []
284
+ },
285
+ {
286
+ "id": "c19",
287
+ "kind": "decision",
288
+ "text": "data-refinery defines a GENERIC storage envelope {id, hash, content, scope{name,visibility}, metadata} \u2014 the storage-neutral subset of eidetic's Record. eidetic's memory-specific fields (lifecycle/signal/recall_count/supersedes/links/created) ride inside metadata or stay eidetic's concern; data-refinery never depends on them",
289
+ "origin": "llm",
290
+ "status": "confirmed",
291
+ "honesty_conditions": [],
292
+ "hard_questions": [],
293
+ "links": []
294
+ },
295
+ {
296
+ "id": "c20",
297
+ "kind": "assumption",
298
+ "text": "model-gear embeddings/rerank stay external to data-refinery (HTTP, with the dep-free local lexical fallback carried over). Raw vector storage = opaque blob attached to a document if needed; vector indexing/ANN is deferred past the initial waves",
299
+ "origin": "llm",
300
+ "status": "confirmed",
301
+ "honesty_conditions": [],
302
+ "hard_questions": [],
303
+ "links": []
304
+ },
305
+ {
306
+ "id": "c21",
307
+ "kind": "decision",
308
+ "text": "GHCR deliverable = the versioned docker-compose published as an OCI artifact (docker compose publish) referencing upstream mongo:8.0 + neo4j:5-community (multi-arch for free); a 'data-refinery stack up/down/status' CLI wraps pull+run. No fat single-DB image.",
309
+ "origin": "user",
310
+ "status": "confirmed",
311
+ "honesty_conditions": [],
312
+ "hard_questions": [],
313
+ "links": []
314
+ },
315
+ {
316
+ "id": "c22",
317
+ "kind": "decision",
318
+ "text": "Scope of THIS effort = Wave 1 only (docker-compose + GHCR publish workflow + stack CLI + image/tag docs), landed as one PR. Wave 2 (envelope + store adapters + data-quality verbs) and Wave 3 (pinnable contract + eidetic consumption) are tracked as follow-up issues via /communicate, not built now.",
319
+ "origin": "user",
320
+ "status": "confirmed",
321
+ "honesty_conditions": [],
322
+ "hard_questions": [],
323
+ "links": []
324
+ }
325
+ ],
326
+ "open_vagueness": [
327
+ {
328
+ "id": "v1",
329
+ "text": "raw vector storage / ANN indexing ownership + timing \u2014 opaque-blob now vs a real vector index later; revisit once a consumer needs semantic search THROUGH data-refinery rather than eidetic",
330
+ "kind": "follow_up",
331
+ "claim_id": null
332
+ }
333
+ ]
334
+ }