@c4a/context 0.6.0-beta.5 → 0.6.0-beta.6

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.
@@ -46,7 +46,7 @@ node_modules/@c4a/context/docs/reference/package-templates.md
46
46
  - `unapproved/entities.jsonl` is the committed draft/rejected/deprecated ledger.
47
47
  - `knowledge/` contains approved Markdown.
48
48
  - `dist/` contains generated package outputs.
49
- - file and Lark snapshots live under `sources/file/<source-name>/` and `sources/lark/<source-name>/`.
49
+ - file and Lark documents from one date live as sibling files under `sources/file/<date>/` and `sources/lark/<date>/`; each date directory has one shared `manifest.json`.
50
50
  - `.tmp/context-runtime/` contains ignored runtime cache, logs, review HTML, previews, and locks.
51
51
 
52
52
  Do not create hidden workspace state directories.
@@ -58,7 +58,7 @@ Present only the current workflow surface:
58
58
  | Task | Current route |
59
59
  |---|---|
60
60
  | Register a knowledge boundary | `context source add file/lark/repo ...`, followed by the matching project phase declaration. Source registration is a user-confirmed boundary decision. |
61
- | Capture document sources | Run the declared `capture:file:<source>` or `capture:lark:<source>` phase only after read permission. Capture writes committed snapshots under `sources/file/<source-name>/` or `sources/lark/<source-name>/`. |
61
+ | Capture document sources | Run the declared `capture:file:<date>/<module>` or `capture:lark:<date>/<module>` phase only after read permission. Capture writes a sibling document file under the matching date directory and updates that directory's single `manifest.json`. |
62
62
  | Investigate captured material | Use `context status` and the returned `context run align:<type>:<source>:<collection> --view ...` commands. Evidence views drive reading; raw directory grep is not the workflow. |
63
63
  | Confirm prose structure | `alignProse` validates and stages `unapproved/structure.yaml`. Validation does not equal user confirmation; only confirmed lifecycle state may enter prose compile. |
64
64
  | Compile source-bound drafts | `compileProse` turns confirmed structure into source-bound draft pages. It does not approve knowledge. |
@@ -80,16 +80,14 @@ user first.
80
80
 
81
81
  `missing-source` is a human gate. In user-facing language, describe the next
82
82
  action as adding a knowledge source, not as filling CLI placeholders. Treat this
83
- as a source boundary decision. Explain that the CLI uses today's local date
84
- (`YYYYMMDD`) as the source name by default; do not invent a name from cwd,
85
- parent directories, monorepo layout, package names, git remotes, filenames, or
86
- document content. The source name appears in source refs and phase ids. Approved
87
- paths are derived from collection, containment, and slug. NodeRef/ViewRef are
88
- identity fields, not path strings:
83
+ as a source boundary decision. Document sources use today's local date as their
84
+ name. Repo sources use the date as a batch and require the confirmed module
85
+ identity. Do not invent semantic date suffixes. The concrete repo selector
86
+ appears in source refs, phase ids, and codegraph paths:
89
87
 
90
88
  ```text
91
89
  knowledge/<collection>/<containment>/<slug>.md
92
- repo:<source-name>#symbol:...
90
+ repo:<date>/<module>#symbol:...
93
91
  file:<source-name>/<document>#span:...
94
92
  lark:<source-name>/<document>#span:...
95
93
  capture:file:<source-name>
@@ -97,50 +95,94 @@ align:lark:<source-name>:architecture
97
95
  dist/<source-name>-kb/
98
96
  ```
99
97
 
100
- Approved paths are not derived directly from the source name. Align/compile
101
- derive them from collection, containment, and slug; extraction and structure
102
- planning may choose containment that reflects package/module shape when the
103
- source boundary intentionally covers multiple modules.
98
+ Prose align/compile paths derive from collection, containment, and slug.
99
+ Codegraph paths use the registered date/module grouping before the symbol slug.
104
100
 
105
101
  Ask what the user wants the source to cover: a single local Markdown/MDX document,
106
102
  a local Markdown/MDX directory, an article/documentation repository as a file
107
- source, a Lark/Feishu document URL or token, a local code repo/package, a remote
108
- Git repo/package, or a multi-module namespace. If today's date source name
109
- already exists, ask for an explicit date name; do not auto-append a sequence.
110
- Approved paths still come from collection, containment, and slug.
103
+ source, a Lark/Feishu document URL or token, a local code repo/package, or a
104
+ remote Git repo/package. Repo sources use today's date as one batch and a
105
+ confirmed `--module` identity; do not create date suffixes for separate
106
+ packages. The CLI rejects non-date or impossible repo batch names. Use
107
+ `context source ensure <date>` / `context source inspect <date>` to operate on
108
+ all registered modules in one batch, or `<date>/<module>` for one module.
109
+ If the user supplies several repo/file/Lark sources in one request, create one
110
+ `context source add batch <date> --input <payload> --format json` payload and
111
+ register them under a single project write lock. Never parallelize mutating
112
+ `source add` commands; on a lock-held error, wait and retry.
111
113
 
112
114
  Current execution supports repo sources, local Markdown/MDX file sources, and Lark /
113
115
  Feishu document sources. Local
114
- repo/package sources are registered with `context source add repo --local <path>`;
115
- the materialized `sources/repo/<source-name>` entry is an ignored
116
- symlink to the selected checkout or subdirectory view. Local Markdown/MDX sources
117
- are registered with `context source add file --local <path>` plus any
116
+ repo/package sources are registered with `context source add repo [YYYYMMDD] --module <module> --local <path>`;
117
+ the materialized `sources/repo/<date>/<module>` entry is an ignored
118
+ relative symlink to the selected checkout or subdirectory view. If the source
119
+ and Context workspace share a Git root, absolute input is normalized to a
120
+ workspace-relative repo root plus `subpath`; do not rewrite it back to an
121
+ absolute machine path. Local Markdown/MDX sources
122
+ are registered with `context source add file [YYYYMMDD] --module <module> --local <path>` plus any
118
123
  needed `--include` patterns, captured with `captureFile`, then planned through
119
124
  `alignProse` and compiled with
120
125
  `compileProse`. A one-file-to-one-page outcome is a degenerate structure plan,
121
126
  not a separate content path. Remote Git operations require explicit user approval before any
122
127
  clone/checkout; clone into an ignored local path, checkout the requested commit,
123
128
  then register that local checkout. Do not commit cloned source content. Lark /
124
- Feishu sources are registered as document sources, captured through the Lark
125
- capture phase, and written as committed snapshots under `sources/lark/<source-name>/`;
129
+ Feishu sources are registered as document modules under a shared date batch,
130
+ captured through the Lark capture phase, and written as committed snapshots
131
+ as a sibling file under `sources/lark/<date>/`, tracked by the date-level `manifest.json`;
126
132
  do not fetch or import Lark content with ad hoc scripts.
133
+ If the user requests multiple documents together, register and declare all of
134
+ them before capture. The user's explicit batch request supplies one read scope
135
+ and one mainline collection choice. Follow `routing.command_plan`: run
136
+ `immediate` items directly and run `after-human-confirmation` items only after
137
+ the current conversation contains that confirmation. Do not ask for another
138
+ date name or repeat the collection gate per document.
139
+
140
+ ## Current-step protocol
141
+
142
+ Treat `context status --format json` `routing` as the complete protocol for the
143
+ current step:
144
+
145
+ - `human_gate.required` says whether user input is required;
146
+ - `human_gate.kind` says which product decision is being made;
147
+ - `human_gate.confirmation` and `persistence` distinguish conversation-only
148
+ permission from decisions persisted by a workspace command;
149
+ - `configuration` identifies the exact project file and declaration action when
150
+ no CLI command is valid yet;
151
+ - `commands_available` reports whether a command plan exists; and
152
+ - `command_plan[].availability` says whether each command runs immediately or
153
+ only after user confirmation.
154
+
155
+ Do not infer permission from the presence of a command. Do not infer a command
156
+ from prose when `commands_available=false`; complete the returned configuration
157
+ action and rerun status instead.
127
158
 
128
159
  Extraction scope is also a human gate. If no extract phase is declared, explain
129
160
  what code area and symbol policy will become draft knowledge, then ask which
130
161
  registered source and file/symbol range to ingest. Do not inspect the source
131
- repository to choose packages or globs on the user's behalf.
132
-
133
- For monorepos, one source may conceptually cover the whole repo/subspace or one
134
- package/subdirectory. Explain that the date source name becomes a source-ref and
135
- phase-id namespace. A parent date source name can support grouped codegraph NodeRefs
136
- such as `knowledge/codegraph/product-ui/component-web/...` and
137
- `knowledge/codegraph/product-ui/component-lynx/...`. In the current executable
138
- flow, use the whole repo/subspace only for inspection/planning. If the user wants
139
- a focused package manual and chooses `packages/button`, register that
140
- subdirectory as its own source and write
141
- `extractTs({ source: source("button"), ... })`. Do not use
162
+ repository to choose packages or globs on the user's behalf. Status reports
163
+ `needs-extract-phase` with `routing.configuration` until that confirmed scope is
164
+ declared; only a declared phase can advance to `ready-to-extract` and return an
165
+ executable preview or extraction command.
166
+
167
+ For a fresh mixed-source workspace, capture every confirmed file/Lark source
168
+ first. If repo code is still unprocessed and document structure has not started,
169
+ `context status` prioritizes `ready-to-extract` over document investigation.
170
+ Complete the code extraction and its batch Review before starting prose align.
171
+ Once a document structure draft exists, keep that current human gate and do not
172
+ switch workflows mid-review.
173
+
174
+ For monorepos, the date is one registration batch and every selected package is
175
+ a module under it. Stable codegraph paths omit that batch date and therefore
176
+ look like `knowledge/codegraph/module-a/...` and
177
+ `knowledge/codegraph/module-b/...`. Date/module remains in phase ids and
178
+ repo source refs. Use the whole repo/subspace
179
+ only for inspection when it contains multiple modules. If the user chooses
180
+ `packages/button`, register it with `--module button` under the same date and
181
+ write `extractTs({ source: source("20260712", "button"), ... })`. Do not use
142
182
  `include: ["packages/button/src/**"]` to choose a package from a larger source;
143
- `include` only filters files inside the selected source.
183
+ `include` only filters files inside the selected source. Repo module names are
184
+ project-wide codegraph identities; refresh an existing module through its
185
+ original date/module selector instead of reusing its name under a later date.
144
186
 
145
187
  For a non-standard package, configure source-relative `entries` on `extractTs`;
146
188
  every entry must match `include`. If the user wants all declarations in the
@@ -150,7 +192,7 @@ file or package manifest field to the source repository solely to make Context
150
192
  run.
151
193
 
152
194
  Follow the source inspection pattern when scope is unclear: run
153
- `context source inspect <source-name> --format json`, show the candidate package
195
+ `context source inspect <date>/<module> --format json`, show the candidate package
154
196
  paths from that CLI output, wait for the user to choose the package path(s), then
155
197
  declare sources/phases. If the extraction preview reports modules outside the
156
198
  confirmed source boundary, stop before review and repair the source declaration.
@@ -158,7 +200,7 @@ confirmed source boundary, stop before review and repair the source declaration.
158
200
  Before running extraction, prefer:
159
201
 
160
202
  ```bash
161
- context source inspect <source-name> --format json
203
+ context source inspect <date>/<module> --format json
162
204
  context run <extract-phase-id> --dry-run --format json
163
205
  ```
164
206
 
@@ -166,13 +208,26 @@ After the preview, run codegraph extraction normally unless the user explicitly
166
208
  asked for CI/CD automation. The first normal run requires Review for all code
167
209
  candidates. Subsequent normal runs require Review only for added, changed, or
168
210
  removed symbols; unchanged approved symbols stay approved. Always inspect
169
- `next_action.human_gate`: open Review only when it is `true`, and continue when
170
- it is `false`.
211
+ `next_action.human_gate`: `continue-codegraph-batch` means run status and finish
212
+ the remaining confirmed module phases. Open one Review only after
213
+ `pendingExtractPhases` is empty and the returned gate is `true`.
171
214
 
172
215
  For a non-interactive pipeline, use `context run <extract-phase-id>
173
216
  --auto-promote --format json`. This flag applies only to codegraph, applies its
174
- deterministic deltas, runs verify, and fails the command if verify fails. Never
175
- use it for semantic knowledge collections.
217
+ deterministic deltas, refreshes deterministic close when needed, runs verify,
218
+ and fails the command if close or verify fails. Read `autoPromotion.close` and
219
+ `autoPromotion.verify` before continuing. Package build remains explicit: when
220
+ the pipeline publishes packages, run `context build` after successful auto
221
+ promotion. Never use auto promotion for semantic knowledge collections.
222
+
223
+ If verify reports `approved-source-ref-ambiguous` on approved codegraph pages
224
+ created by beta.5, do not send those pages back through Review and do not filter
225
+ approved symbols away. Rerun the declared codegraph extraction phase to refresh
226
+ the trusted file-aware symbol index, then run `context review
227
+ migrate-codegraph-refs` and `context verify`. Tell the user that this preserves
228
+ their decisions and approved content while upgrading evidence metadata. If the
229
+ reported ref already contains `<file>:<symbol>:<kind>`, treat it as a duplicate
230
+ symbol-index defect instead of a legacy migration.
176
231
 
177
232
  Use the preview `mode`, optional `entries`, `preview.sources[].modules[]`,
178
233
  `candidateEstimate`, and `agent_hints`
@@ -185,26 +240,25 @@ Treat `NO_ENTRY_DETECTED` as a configuration failure: choose explicit
185
240
  never report an empty extraction as success. Report discovered, AST-analyzed,
186
241
  skipped, symbol, and relation counts separately. The extractor follows
187
242
  tsconfig/jsconfig `baseUrl` and `paths`, so do not ask users to rewrite `@/`
188
- imports solely for Context. Explain that approved pages will be written under
189
- paths derived from collection, containment, and slug:
243
+ imports solely for Context. Explain the concrete output shape:
190
244
 
191
245
  ```text
192
- knowledge/<collection>/<containment>/<slug>.md
246
+ knowledge/codegraph/<module>/symbol/<slug>.md
193
247
  ```
194
248
 
195
- If the source name, optional module segment, or resulting path shape looks
196
- wrong, stop and ask whether to rename the source or change the source boundary
197
- before running extraction. A source that already points at one package/module
198
- root should not repeat the package name in the path. A source rename after
199
- extraction is a migration, not a cosmetic change. Do not write ad hoc scripts to
249
+ If the module or resulting path shape looks wrong, stop and repair the
250
+ module registration before running extraction. An extra repeated package
251
+ segment below the module may indicate an over-broad source boundary. Do not write ad hoc scripts to
200
252
  count packages, parse `package.json`, or sample `unapproved/entities.jsonl`.
201
253
 
202
254
  ## Review Rules
203
255
 
204
- - Use `context review html <collection> --open` for visual review. If the
205
- browser cannot be opened, provide the emitted `file://` URL to the user.
256
+ - Use `context review html <collection> --open --format json` for visual review.
257
+ Check `opened`: say the browser opened only when it is `true`; otherwise
258
+ report `open_error` and provide the emitted `file_url` plus `absolute_path`.
206
259
  - Use `context review list <collection>` only for a textual overview.
207
- - Ask the user to paste the copied JSONL payload into chat. The agent writes
260
+ - Ask the user to paste the copied review decision Payload into chat. Uniform
261
+ decisions use one JSON line; exceptions add JSONL lines. The agent writes
208
262
  that pasted payload to a temporary scratch file and runs `context review apply
209
263
  <payload-file>` only after the user has reviewed and provided the payload.
210
264
  - Do not synthesize review payloads from HTML, JSON, runtime snapshots, or
@@ -214,7 +268,7 @@ count packages, parse `package.json`, or sample `unapproved/entities.jsonl`.
214
268
  `context review approve <candidate-id> --collection <collection>` /
215
269
  `context review reject <candidate-id> --collection <collection>` or `--all`.
216
270
  These commands still enforce the scoped candidate-id gate.
217
- - Do not expand compact review JSONL into pretty JSON unless the user asks.
271
+ - Do not expand the compact review decision Payload into pretty JSON unless the user asks.
218
272
  - Do not edit approved Markdown by hand as part of review apply.
219
273
 
220
274
  ## Prose Align And Compile Rules
@@ -225,8 +279,10 @@ product sequence:
225
279
  1. investigate material through Context evidence views;
226
280
  2. propose a structure draft with nodes, section plans, supported edges, and
227
281
  unresolved items;
228
- 3. ask the user to confirm the structure, because confirmation freezes paths,
229
- section ownership, relationships, and compile order for this round;
282
+ 3. repair validator blockers until `confirmation_ready=true`, stage the
283
+ structure, open its HTML report, then ask the user to confirm it because
284
+ confirmation freezes paths, section ownership, relationships, and compile
285
+ order for this round;
230
286
  4. compile source-bound draft pages from confirmed structure;
231
287
  5. send compiled drafts through human review, then close and build.
232
288
 
@@ -248,9 +304,16 @@ context run align:<type>:<source>:<collection> --stage --input <structure.yaml>
248
304
 
249
305
  Read source material only through these evidence views. `source-index` gives a
250
306
  compact refs-first map when run with `--compact`; use `span-detail` /
251
- `span-text` only for exact evidence. `structure-summary` is the review surface
252
- for the structure confirmation gate. Do not inspect `sources/` or `.tmp`
253
- directly.
307
+ `span-text` only for exact evidence. When validate returns
308
+ `repair_confirmation_blockers`, follow its repair route without asking for
309
+ preliminary approval. `--repair suggested-splits` mechanically handles
310
+ non-contiguous source Sections. For oversized Views, use the returned child
311
+ View and contains-edge suggestions while classifying child Nodes from evidence.
312
+ Stage only after
313
+ `confirmation_ready=true`; stage opens the final `structure-summary` report for
314
+ the structure confirmation gate. Ask a separate structure-design question only
315
+ when evidence supports multiple incompatible semantic choices, and make clear
316
+ that it is not final review. Do not inspect `sources/` or `.tmp` directly.
254
317
 
255
318
  Compile:
256
319
 
@@ -262,6 +325,10 @@ context run compile:<type>:<source>:<collection> --validate --input <compile-act
262
325
  context run compile:<type>:<source>:<collection> --stage --input <compile-actions.yaml> --format json
263
326
  ```
264
327
 
328
+ Compile each confirmed View sequentially, but do not stop for Review after each
329
+ write. Follow `continue_compile_batch` until no planned View remains; then open
330
+ one collection-level Review, apply one Payload, and run close once.
331
+
265
332
  Default compile actions should mirror source spans into `verbatim` body and
266
333
  attach summary/kind/source refs. Explicit reader-visible content is not part of
267
334
  the current compile action contract; split evidence or return to structure
@@ -182,10 +182,16 @@ Approved Markdown and kb package OKF output are an OKF superset:
182
182
  Accepted section `source_ref` forms:
183
183
 
184
184
  ```text
185
- src-N#symbol:<symbol-id>:<kind>@<digest>
185
+ src-N#symbol:<file>:<symbol-id>:<kind>@<digest>
186
186
  src-N#span:<heading-hint> L<start>-<end>@<span-hash>
187
187
  ```
188
188
 
189
+ The code symbol form includes the source-relative file so same-name symbols in
190
+ different files resolve to one exact symbol-index row. Consumers should still
191
+ treat the complete `source_ref` as opaque. Codegraph pages keep
192
+ `candidate_fingerprint` at the top level and do not duplicate this evidence in
193
+ `code_origin`.
194
+
189
195
  `#span:` refs retain source snapshot line ranges for human review, diffing, and
190
196
  stable re-pinning. They resolve against committed file/lark document snapshots,
191
197
  not the code symbol index.