dreamteamer 0.15.0 → 0.15.1

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.
@@ -37,7 +37,17 @@ schema:
37
37
  properties:
38
38
  path:
39
39
  type: string
40
- description: Folder holding the records, workspace-relative. `data/` for content, `state/` for operational records, `system/` for sources.
40
+ description: >-
41
+ Folder holding the records, workspace-relative. `data/<collection>` — that is the answer
42
+ unless you can state a reason. `state/<collection>` is DEPRECATED as a convention since
43
+ 2026-08-31: decision 4 created it for runs, triggers, registries and cursors, all seven
44
+ of those collections have been deleted, and the one real operational-data need that
45
+ arrived since went to a gitignored `.cache/*.jsonl` because append-only readings are the
46
+ wrong shape for records. The mechanism still works and is kept, exactly like `group`
47
+ below, so a workspace wanting a second root has one. ⚠ NEVER author `system/` — sources
48
+ have lived in `modules/<module>/<kind>/` since the 2026-08-05 flatten, and a `system/`
49
+ prefix is only how `runtime.js` recognises a RUNTIME collection in a descriptor compiled
50
+ by a pre-flatten engine.
41
51
  codec:
42
52
  type: string
43
53
  enum: [md, yaml, json, file]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dreamteamer",
3
- "version": "0.15.0",
3
+ "version": "0.15.1",
4
4
  "description": "A workspace compiler for coding agents — schema-validated records as plain files over git, compiled into every harness",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Gilad Khen <giladkhen@gmail.com>",
@@ -268,12 +268,24 @@ model wants a shared **template** plus two thin descriptors — or a reference b
268
268
  base collection that exists only to be extended. An abstraction with one concrete consumer is a
269
269
  roadmap, not a model; wait for the second consumer.
270
270
 
271
- ### 11. Where records live: `data/` vs `state/`, codecs, shapes
272
-
273
- - **`data/` holds content; `state/` holds operational records** cursors, run markers, cached
274
- readings; things a human never edits and would not mourn. The split is a `storage.path` choice
275
- and it matters because `data/` is what gets read, searched and reasoned over; polluting it with
276
- machinery makes every list noisier.
271
+ ### 11. Where records live: `data/`, codecs, shapes
272
+
273
+ - **`data/` is where records go.** `storage.path` is free-form, so a collection can be pointed
274
+ anywhere in the workspace, but the answer is `data/<collection>` unless you have a reason you can
275
+ state.
276
+ - **`state/` is DEPRECATED as a convention — do not spend a decision on it.** It was created as
277
+ the home for "operational records": runs, triggers, registries, cursors. All seven of those
278
+ collections were later measured unused and deleted, so its entire reason went with them. The
279
+ mechanism still works end to end (a collection declaring `storage.path: state/<name>` writes,
280
+ lists and checks correctly) and is kept for anyone who wants a second root — but nothing ships
281
+ there, and `dt init` no longer creates the folder.
282
+ - **The need it was aimed at is real; records were the wrong answer.** When genuine operational data
283
+ finally arrived — cached provider readings, thousands of append-only rows — it went to a
284
+ gitignored `.cache/<thing>.jsonl`, and that was right: one record per reading would have been
285
+ thousands of files nobody opens individually, churning git for nothing. So the rule is not "put
286
+ machinery in `state/`", it is **do not model machinery as records at all**. In descending order:
287
+ a field on a record that already exists · a line appended to a gitignored cache file · a real
288
+ collection, if and only if you will genuinely list, filter and read the things one at a time.
277
289
  - **`codec: md` whenever a human reads a body; `yaml` when nobody does.** A record that is all
278
290
  fields and no prose (a lab value, a transaction, a cursor) is `yaml` — the body would only ever
279
291
  be empty. `json` exists for tool-written records.
@@ -33,7 +33,6 @@ demand:
33
33
  | provenance | `.dreamteamer/manifest.yaml` | which module shipped which entry |
34
34
  | sources (write) | `modules/<module>/` — **including the workspace's own**, the `dreamteamer.workspace-module` named in `package.json` | a source folder at the workspace ROOT is a compile ERROR. same-name collisions across modules are compile errors too. after ANY source change: `npm run compile` |
35
35
  | content records | `data/<collection>/` | per each descriptor's `storage.path` |
36
- | operational records | `state/<collection>/` | whatever a module declares there; core ships none |
37
36
 
38
37
  - a record is a `<id>.<suffix>.<ext>` file (or a folder, for folder-shape collections). **the id is
39
38
  the path** inside the collection folder minus suffix and extension — nested folders join in:
package/src/harnesses.js CHANGED
@@ -305,8 +305,7 @@ function orientationBlock(flavor, skillsIndex, sourceLayout = 'flat', namespaces
305
305
  'working with data.** schemas (read): `.dreamteamer/collections/` (provenance:',
306
306
  '`.dreamteamer/manifest.yaml`). sources (write): ' + sourcesLine,
307
307
  '`command-bindings/`, `ui-views/`, `collection-templates/`',
308
- '(see manifest for channels). data: `data/`; operational records:',
309
- '`state/`. records are `<id>.<suffix>.<ext>`',
308
+ '(see manifest for channels). data: `data/`. records are `<id>.<suffix>.<ext>`',
310
309
  'files; ids are paths; references are `<collection>/<id>`. run `dreamteamer check` (`npm run',
311
310
  'check`) after bulk edits; run `dreamteamer compile` (`npm run compile`) after changing any',
312
311
  'source or installing modules.',
package/src/init.js CHANGED
@@ -108,7 +108,14 @@ export function init({ flags = {} } = {}) {
108
108
  const starter = path.join(systemRoot, 'collections', 'notes.collection.yaml');
109
109
  if (!fs.existsSync(starter)) fs.writeFileSync(starter, STARTER_COLLECTION);
110
110
  fs.mkdirSync(path.join(root, dataPath), { recursive: true });
111
- fs.mkdirSync(path.join(root, 'state'), { recursive: true });
111
+ // NO `state/` is created. It was decision-4's home for operational records — runs, triggers,
112
+ // registries, cursors — and every one of those seven collections has since been deleted. When a
113
+ // real operational-data need finally arrived (cached provider readings) it went to a gitignored
114
+ // `.cache/*.jsonl` instead, because thousands of append-only readings are the wrong shape for
115
+ // records at all. So `state/` is a working facility with no users, and seeding an empty folder
116
+ // for it is the "capability that needs a record before it exists" smell. The MECHANISM is kept —
117
+ // `storage.path: state/<name>` still compiles, writes, lists and checks — so a workspace that
118
+ // wants a second root has one; the engine just stops advertising a fork nobody has taken.
112
119
 
113
120
  // NO user record is seeded, and there is no `users` collection — both removed from core in 0.8.0.
114
121
  // It failed the "does the ENGINE read it?" test on a circular justification: `users` was core