@c4a/context-cli 0.5.35-beta.3 → 0.5.38
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.
- package/README.md +7 -7
- package/cli.js +47004 -34404
- package/package.json +2 -1
- package/plugin/README.md +2 -2
- package/plugin/README_CN.md +2 -2
- package/plugin/commands/align.md +32 -98
- package/plugin/commands/capture.md +12 -13
- package/plugin/commands/compile.md +78 -149
- package/plugin/commands/init.md +15 -13
- package/plugin/commands/status.md +2 -0
- package/plugin/skills/skill-align-workflow/SKILL.md +41 -83
- package/plugin/skills/skill-align-workflow/references/candidate-resolution.md +1 -1
- package/plugin/skills/skill-align-workflow/references/density-profile.md +2 -0
- package/plugin/skills/skill-compile-close/SKILL.md +7 -9
- package/plugin/skills/skill-compile-draft/SKILL.md +43 -83
- package/plugin/skills/skill-compile-draft/references/notes.md +3 -3
- package/plugin/skills/skill-compile-draft/references/refresh-and-update.md +5 -5
- package/plugin/skills/skill-compile-draft/references/structural-challenges.md +1 -1
- package/plugin/skills/skill-compile-judge/SKILL.md +15 -12
- package/plugin/skills/skill-semantic-reconcile/SKILL.md +7 -7
- package/plugin/skills/skill-semantic-reconcile/references/leakage-and-ownership.md +1 -1
- package/scripts/build-plugin.ts +8 -6
- package/templates/aspect-runtime/aspectRunnerSdk.ts +749 -0
- package/templates/aspects/README.md +515 -0
- package/templates/aspects/code/aspect.yaml +2 -2
- package/templates/aspects/code/prompt.md +13 -12
|
@@ -57,4 +57,4 @@ block_ownership:
|
|
|
57
57
|
- owners: [local:data-region]
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
-
Refs may point to `llm_slug_hint` or final `slug`; prefer `*_ref` fields when a schema provides them. If the CLI rejects an unknown ref, use the
|
|
60
|
+
Refs may point to `llm_slug_hint` or final `slug`; prefer `*_ref` fields when a schema provides them. If the CLI rejects an unknown ref, use the top-level envelope diagnostics (`issues[].expected_shape.available_node_refs`, `diagnostics.*.available_node_refs`, or the returned repair view) and resubmit the corrected `align-structure-decision` payload. `agent_hints[]`, when present, is only a cutover mirror and must not be the source of truth.
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Use `density_profile` in `align-coarse-read` to describe how much structure the document needs before candidate discovery. This is a reading strategy, not a quality score.
|
|
4
4
|
|
|
5
|
+
This reference applies only when the current envelope asks for `next_action.kind: "submit_coarse_read"`. A small or moderate direct route should follow `validate_align_decision`; do not emit a `single_pass` coarse-read payload unless the CLI requested coarse-read.
|
|
6
|
+
|
|
5
7
|
| Profile | Use When | Agent Behavior |
|
|
6
8
|
|---|---|---|
|
|
7
9
|
| `macro` | A long source has many headings, sections, or broad topic shifts. | Create section proposals around major headings and preserve document-level anchors so later passes do not flatten scope. |
|
|
@@ -30,9 +30,11 @@ command. It does not hand-edit rendered knowledge.
|
|
|
30
30
|
- Content / Section issues (`invalid-section-mount`, `body-ad-hoc-heading`, `dangling-source-alias`) → user re-runs `/context:compile` (draft loop fixes its own Section actions; the close stage does not patch)
|
|
31
31
|
- Structural issues (`contains-cycle`, `edge-dangling-node`, `duplicate-slug`, `invalid-node-type`, `domain-same-file-child`) → user runs `/context:align` to revise the plan
|
|
32
32
|
- Source issues (`dropped-source-reference`) → user runs `/context:drop <id>` to complete the drop
|
|
33
|
-
- Exit 0 → summarise node/section totals, verify, `recompiled`, `locator_updates`, `rebuilt`, fingerprint rebuild count, archive status / archived file count, and any `ready_with_debt` coverage warnings when printed
|
|
33
|
+
- Exit 0 → summarise node/section totals, verify, `recompiled`, `locator_updates`, `rebuilt`, fingerprint rebuild count, archive status / archived file count, and any `ready_with_debt` coverage warnings when printed. If the close receipt reports severely low coverage, surface the returned `--cover-uncovered-only` command as the recommended repair before treating the debt as accepted.
|
|
34
34
|
- Exit 2 → report the full issue list verbatim + point at the right re-entry command above. Do not hand-open the affected rendered article.
|
|
35
|
-
- Coverage
|
|
35
|
+
- Coverage warnings are CLI-owned diagnostics. `ready_with_debt` means close succeeded and unresolved coverage remains visible. For severely low coverage, recommend one `--cover-uncovered-only` repair pass unless the user explicitly accepts the debt; otherwise report the warning and follow returned coverage view commands / `available_actions[]` only if the user chooses a repair or skip round.
|
|
36
|
+
- Coverage and engagement denominators count primary citable content evidence. URL/reference-only, marker, frontmatter, embed, navigation, and context-only evidence is excluded or bucketed as non-blocking bookkeeping by the CLI.
|
|
37
|
+
- User-accepted hard-fact risk is carried as `review_debt`; report it from close/status when present, but do not treat review-debt count as a close failure.
|
|
36
38
|
- Materialized knowledge means either a CLI-written knowledge article, or an explicit no-write placeholder from align: `planned_sections: []` plus source/context/graph support. A compile skip action records reviewed evidence, but it does not by itself materialize an arbitrary finalized Node.
|
|
37
39
|
- Never re-run `context compile draft` from close to paper over verify failures. Draft failures belong in the draft loop.
|
|
38
40
|
- Do not use Python, Node.js, shell scripts, `ls`, `find`, `rg`, `cat`, or similar ad-hoc commands to inspect `WORKSPACE_DIR`, `.context`, knowledge files, or `/tmp` workflow artifacts.
|
|
@@ -63,7 +65,7 @@ Close is one in-process command with one exit code:
|
|
|
63
65
|
| Outcome | Agent action |
|
|
64
66
|
|---|---|
|
|
65
67
|
| Exit 0, 0 issues | Summarise those counts in the user's language: Nodes touched; Sections added / updated / superseded / deprecated / skipped; `recompiled`; `locator_updates`; `rebuilt`; verify green. Stop. |
|
|
66
|
-
| Exit 0, warnings only | Summarise + list warnings verbatim. For coverage
|
|
68
|
+
| Exit 0, warnings only | Summarise + list warnings verbatim. For severely low coverage, recommend the CLI-returned `--cover-uncovered-only` repair command before final acceptance; for other coverage warnings, surface returned coverage view commands / `available_actions[]` instead of inventing a local decision matrix. |
|
|
67
69
|
| Exit 2, Section / content issue | Surface the full issue list; point the user at re-running `/context:compile` (the draft loop owns Section writes). Do NOT Edit the affected rendered article. |
|
|
68
70
|
| Exit 2, `compile-close-finalized-node-missing-knowledge` | If the missing Node has real citation evidence, point the user at `/context:compile` for that Node. If it is intentionally navigation-only or placeholder-only, point the user at `/context:align` to make it explicit no-write with `planned_sections: []` and context-only/ignored relation or placeholder blocks. |
|
|
69
71
|
| Exit 2, structural issue (cycle, duplicate slug, `invalid-node-type`, `domain-same-file-child`) | Surface the full issue list; point the user at `/context:align` to revise structure. Do not re-run compile. |
|
|
@@ -118,12 +120,8 @@ Summarise in the user's language:
|
|
|
118
120
|
|
|
119
121
|
Stop. Do not auto-invoke follow-on commands.
|
|
120
122
|
|
|
121
|
-
### Step 5 —
|
|
123
|
+
### Step 5 — Final guardrails
|
|
122
124
|
|
|
123
|
-
|
|
124
|
-
- [ ] If exit 2, every error is surfaced to the user with a re-entry command (compile / align / drop); no silent ignores — **Step 3**.
|
|
125
|
-
- [ ] No agent-hand edits to rendered knowledge — if any, revert; the close stage is read-only for knowledge content.
|
|
126
|
-
- [ ] No Read / Glob / Grep / Write was used against `WORKSPACE_DIR`; CLI-owned output archival is allowed.
|
|
127
|
-
- [ ] No ad-hoc script or shell file traversal was used against `WORKSPACE_DIR`, `.context`, or `/tmp` workflow artifacts.
|
|
125
|
+
Run close once, surface every error with its re-entry command, and never inspect or edit rendered knowledge outside the CLI.
|
|
128
126
|
|
|
129
127
|
</procedures>
|
|
@@ -4,9 +4,9 @@ description: >
|
|
|
4
4
|
Packaged skill invoked by `/context:compile`; not a user slash command. For one Node at a time, reads
|
|
5
5
|
the CLI-provided `NodeContext` (planned metadata, raw snippets, and
|
|
6
6
|
existing Sections if any), classifies every raw fragment into a Section
|
|
7
|
-
kind via the priority chain, writes `content` + optional `summary` + `
|
|
8
|
-
and emits a compile draft JSON document
|
|
9
|
-
|
|
7
|
+
kind via the priority chain, writes `content` + optional `summary` + `source_block_ids[]`,
|
|
8
|
+
and emits a compile draft JSON document for the caller to submit to the current envelope's
|
|
9
|
+
`next_action.command`.
|
|
10
10
|
Activates when `/context:compile` iterates across the confirmed align plan.
|
|
11
11
|
tools:
|
|
12
12
|
- Bash
|
|
@@ -18,19 +18,21 @@ Classify raw evidence for one Node into `add` / `skip` (and on refresh: `update`
|
|
|
18
18
|
|
|
19
19
|
## TL;DR — Non-negotiables
|
|
20
20
|
|
|
21
|
-
- One Node per invocation — `
|
|
22
|
-
- Agent emits JSON only; no markdown, no direct workspace file writes. The caller
|
|
23
|
-
- Evidence boundary: treat
|
|
21
|
+
- One Node per invocation — `node_slug` MUST equal `node.slug`; no cross-Node writes. Finish the current Node's draft quality checks before the caller moves to another Node's review/apply loop.
|
|
22
|
+
- Agent emits JSON only; no markdown, no direct workspace file writes. The caller submits the JSON to the current envelope's `next_action.command`; the CLI validates and stores workflow payloads.
|
|
23
|
+
- Evidence boundary: treat the CLI-provided NodeContext and evidence views as complete. Cite only block ids surfaced as citation-eligible in `source-refs-index` `items[]`, `citable_source_refs[]`, or `raw_snippet_indexes.citation_eligible`; treat `supporting_context_refs[]`, `context_only`, and secondary-shared snippets as background. `request_full_text` may expose visible text for inspection through the narrow text view (`context compile context <slug> --request-full-text <block_id> --view text --format json`), and it does not change citation eligibility. If supporting/context-only evidence is needed as a citation, emit `pending_ownership_challenge` or `structure_challenge` — see [references/structural-challenges.md](references/structural-challenges.md). Never `grep` / `sed` / `jq` / `cat` / `head` raw `--format json` stdout or workflow scratch files in `/tmp` or `.context/.cache/`; use semantic views and follow returned `next_command` / `how_to_explore[]`. For write commands that take `--payload-digest`, omit the flag unless the CLI explicitly asks for a stale guard.
|
|
24
24
|
- Actions are candidate write actions, not final semantic decisions; `context reconcile prepare` re-derives near-duplicate / conflict / merge relations from `candidates[]` on its own. Op naming is scoped by schema: compile-draft `actions[]` already targets Sections, so Section lifecycle ops are verb-only (`add`, `update`, `supersede`, `deprecate`, `skip`). Do not use align-style names such as `add_section`, `write_section`, or `propose_section`.
|
|
25
25
|
- Source support passing is not completion. Before emitting, estimate coverage from the provided `raw_snippets[]`: if there are 3+ citation-eligible snippets, a one-action draft is valid only when the later snippets are duplicates, navigation, placeholders, or continuations of the same fact. Small dense docs still need multiple actions when later snippets state distinct capabilities, constraints, examples, risks, FAQ, or usage notes. Large manuals/design docs should compile to several orthogonal actions in the same draft. Do not switch into "speed mode" because the first action validates; coverage is part of the draft task.
|
|
26
|
-
- Pick `kind`
|
|
26
|
+
- Pick `kind` from the CLI's `context schema compile-draft` contract, especially `section_kind_priority` and the mount matrix. First matching form wins. A `decision` needs at least two surfaced alternatives plus a reason; bare "we use X because Y" is `spec`. Reach `description` only after every more specific kind fails.
|
|
27
27
|
- `node.planned_sections[]` is an align-time scaffold hint, not a hard completion gate. Prefer a planned kind when the evidence fits; if a source-backed stronger kind differs, emit it and let the CLI warning guide review.
|
|
28
28
|
- `kind × node.type` must satisfy the CLI Section mount matrix; mismatches get rejected at write time. When the strongest kind is blocked by mount matrix, fall to the next legal kind whose form actually fits — do not collapse to `description` just because it mounts everywhere, and do not invent thin precision (e.g. one-line `spec`) just to avoid `description` either. See [Description anti-abuse gates](#description-anti-abuse-gates) for the classification checks at the description boundary.
|
|
29
|
-
- Every write action cites raw via `
|
|
29
|
+
- Every write action cites raw via `source_block_ids[]` from `source-refs-index` `items[].block_id` or `citable_source_refs[].block_id`; the CLI expands it to canonical `source_refs[]` before saving. Use explicit `source_refs[]` only when the CLI gives no block id for the needed citation. Never mix both fields in one action, fabricate ids, or cite navigation-only blocks as evidence for a content Section.
|
|
30
|
+
- For large source-ref views, prefer the returned `source_refs_index_command` / `source_refs_command` / `--view source-refs-index` when you only need block ids; open `source_refs_detail_command` only when you need quote preview or explicit `source_refs[]`.
|
|
30
31
|
- Use `content` for the Section text the reader should see. It may be long and may contain URLs, tables, commands, config, or code fences. Add `summary` for long content or when it helps readers/query output; omit it when content is short. Summary quality checks are warning hints only, not schema or evidence failures. The CLI rejects retired fields (`body`, `detail`, `raw`, singular `source_ref`, quoted-evidence) with canonical repair hints — read those hints rather than memorising the blacklist. Omit optional fields when empty.
|
|
31
|
-
- Preserve
|
|
32
|
+
- Preserve user-facing Markdown structure from cited raw when it carries meaning: inline code/code fences, Markdown links and URLs, blockquotes, list nesting, tables, and emphasis around key terms. Summary remains plain text; content may keep raw Markdown when that is the clearest faithful Section text.
|
|
33
|
+
- Preserve literals required by the CLI. When source-refs or scaffold output lists `required_preserved_literals[]`, keep those URL, code identifier, `source_ref`, or `block_id` literals visible in the relevant `content`, `summary`, skip reason, or repair challenge. Do not rely on memorized URL rules; let CLI literal fields and citation diagnostics define what must be preserved.
|
|
32
34
|
- `refers_to_nodes[]` only carries slugs present in the context's glossary, existing Sections, or the current align plan; never invent one.
|
|
33
|
-
- `skip` is the honest default when raw adds nothing. Bare `skip` (no
|
|
35
|
+
- `skip` is the honest default when raw adds nothing. Bare `skip` (no evidence) is only for deterministic no-ops such as unchanged input, pure navigation, or context-only/background snippets. When a citation-eligible snippet was reviewed and intentionally not written, emit `skip` with `source_block_ids[]` from `source-refs-index` `items[].block_id` or `citable_source_refs[].block_id` so semantic review can record `reviewed_no_write`. Never attach `context_only` / supporting block ids to skip; raise a challenge if they should become citation evidence.
|
|
34
36
|
- Any Node may legitimately compile to no Sections when the provided snippets contain only navigation (`Parent` / `Children` / `Related` / `Relations`) or placeholder text that explicitly says no detailed content is available. Emit `skip`; do not turn align summaries, parent/child lists, sibling links, or placeholders into `description` Sections. The align graph and Node metadata preserve structure; active Sections need citation-eligible content.
|
|
35
37
|
- FAQ collections attach to the most specific finalized Node (Entity → Action → Domain fallback); never create a standalone FAQ container.
|
|
36
38
|
- Output language: Node-facing summaries and user-facing draft explanations follow `NodeContext.generation_policy.language` when present; otherwise match the raw material. Section `summary` may follow either the workspace language or the source-bound `content` language; do not rewrite it only to switch languages. Draft `content` is source-bound: prefer the cited source language when it differs from the workspace language, and do not translate quoted English facts into Chinese just to satisfy workspace language. Preserve product names, code identifiers, CLI flags, slugs, `block_id` / `source_ref` tokens, and exact quoted evidence as printed. Kind / confidence / identifier fields stay English.
|
|
@@ -57,69 +59,37 @@ Boundary recap (rules not captured by the schema enums):
|
|
|
57
59
|
|
|
58
60
|
- `mentions[]` are raw positions that named this Node; `raw_snippets[]` are the wider context blocks around those positions, or the changed raw blocks selected by `context compile scan`. These two arrays are the evidence floor — never reach outside them.
|
|
59
61
|
- `node.sources[]` are the only sources that may be cited as `src-N`. `node.context_sources[]` contribute `raw_snippets[]` for comparison or background only and must not be cited unless the CLI has also placed that source in `node.sources[]`.
|
|
60
|
-
- `source_id` is the source registry id (e.g. `local:billing`); `src-N` aliases only appear inside `source_ref` strings
|
|
62
|
+
- `source_id` is the source registry id (e.g. `local:billing`); `src-N` aliases only appear inside `source_ref` strings. Prefer `source-refs-index` `items[].block_id` or `citable_source_refs[].block_id` in draft `source_block_ids[]`; if you must use explicit `source_refs[]`, copy `raw_snippets[].source_ref` verbatim.
|
|
61
63
|
|
|
62
64
|
## Output — Compile Draft JSON (main path)
|
|
63
65
|
|
|
64
66
|
Canonical shape: `context schema compile-draft --format yaml` (or `--format json`). The CLI is the source of truth for fields, enums, and validation — do not memorise the shape from this file.
|
|
65
67
|
|
|
66
|
-
Main-path ops are **`add`** and **`skip`**. A typical new Section action is `{ op: "add", kind: "<chain-picked>", content: "...",
|
|
68
|
+
Main-path ops are **`add`** and **`skip`**. A typical new Section action is `{ op: "add", kind: "<chain-picked>", content: "...", source_block_ids: ["<block_id>"] }`; never spell that as `add_section` because the `actions[]` array already names the target object. A bare skip is `{ op: "skip", reason: "..." }`; a reviewed-no-write skip carries `source_block_ids[]` only from citation-eligible `source-refs-index` `items[].block_id` or `citable_source_refs[].block_id`.
|
|
67
69
|
|
|
68
|
-
|
|
70
|
+
Minimal valid draft envelope:
|
|
69
71
|
|
|
70
|
-
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"schema_version": "compile.draft.v2",
|
|
75
|
+
"node_slug": "<matches node.slug>",
|
|
76
|
+
"actions": []
|
|
77
|
+
}
|
|
78
|
+
```
|
|
71
79
|
|
|
72
|
-
|
|
80
|
+
`update` / `supersede` / `deprecate` ops live in [references/refresh-and-update.md](references/refresh-and-update.md). `structure_challenge` / `pending_ownership_challenge` ops live in [references/structural-challenges.md](references/structural-challenges.md). Do not emit them from the main path.
|
|
73
81
|
|
|
74
|
-
|
|
82
|
+
`source_block_ids[]` is a mechanical shorthand over the same citation-eligible evidence; a single citation is still a single-element array. When one Section summarises contiguous multi-block evidence, list only the block ids the `content` actually consumes. If using explicit `source_refs[]`, copy them verbatim from `raw_snippets[].source_ref`. If the CLI reports `compile-source-refs-auto-narrowed`, it safely reduced an over-wide citation; removed refs are still uncovered, so add separate actions for distinct knowledge or leave them to an evidence-carrying `skip`. Preserve raw wording in `content` when it is already clear. Preserving a cited prose/bullet list as the Section's user-facing content is allowed when that list is the actual knowledge; the anti-pattern is copying raw text only as traceability or lexical-score padding. For `example` Sections that cite command / config / code fences, include the relevant fenced block in `content`.
|
|
75
83
|
|
|
76
|
-
|
|
77
|
-
example -> comparison -> faq -> incident -> changelog ->
|
|
78
|
-
decision -> spec -> warning -> principle -> description
|
|
79
|
-
```
|
|
84
|
+
## Section Kind Choice
|
|
80
85
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
| `incident` | happened event with time, impact, and root cause / handling | time, severity/impact, root cause, timeline/actions | dated outage postmortem; "risk may happen" is `warning` |
|
|
87
|
-
| `changelog` | version/date plus change description | version, change type, migration notes if present | `v1.2.0 added X`; "X supports Y" without version is `spec` or `description` |
|
|
88
|
-
| `decision` | text surfaces at least two alternatives plus a reason | selected option, alternatives, reason, impact | "choose async rather than sync because..."; bare "use X because..." is `spec` |
|
|
89
|
-
| `spec` | verifiable behavior, threshold, default, limit, or check method | object, condition, value/constraint | retry max 3; vague "consider concurrency" is `principle` or `description` |
|
|
90
|
-
| `warning` | factual risk, caveat, or negative consequence | trigger condition and consequence | "without warmup first 30s timeout"; "don't change config" without consequence is too vague |
|
|
91
|
-
| `principle` | stable design invariant / philosophy with no check method and no choice action | invariant and reason | "single way to write UI"; retry max 3 is `spec`; "choose X over Y" is `decision` |
|
|
92
|
-
| `description` | fallback definition, overview, or plain narrative | definition, purpose, scope, distinction | only after the nine kinds above fail; do not use it to hide lists, rules, tables, samples, risks, or decisions |
|
|
93
|
-
|
|
94
|
-
Mount matrix:
|
|
95
|
-
|
|
96
|
-
| kind | domain | entity | action |
|
|
97
|
-
|---|:---:|:---:|:---:|
|
|
98
|
-
| `description` | yes | yes | yes |
|
|
99
|
-
| `spec` | no | yes | yes |
|
|
100
|
-
| `warning` | yes | yes | yes |
|
|
101
|
-
| `principle` | yes | yes | no |
|
|
102
|
-
| `decision` | yes | yes | yes |
|
|
103
|
-
| `incident` | no | yes | yes |
|
|
104
|
-
| `example` | no | yes | no |
|
|
105
|
-
| `changelog` | no | yes | no |
|
|
106
|
-
| `comparison` | no | yes | no |
|
|
107
|
-
| `faq` | yes | yes | yes |
|
|
108
|
-
|
|
109
|
-
When the strongest kind is not mountable on this Node type, choose the next legal kind that the evidence truly supports, or `skip` with a structural challenge reason. Do not force `description` just because it mounts everywhere.
|
|
110
|
-
|
|
111
|
-
## Confidence rubric
|
|
112
|
-
|
|
113
|
-
Four legal values; pick per raw evidence strength.
|
|
114
|
-
|
|
115
|
-
| `confidence` | When |
|
|
116
|
-
|---|---|
|
|
117
|
-
| `verified` | Raw shows the fact already happened or held — recorded run output, observed metric value, incident timestamp, benchmark result, or explicit "ran X, got Y" log. Executable form alone is not enough; without execution evidence, downgrade to `confirmed`. |
|
|
118
|
-
| `confirmed` | Raw states the fact in normative voice or as a documented spec / config / example, without showing the run that confirmed it. This is the default for code blocks, configuration samples, feature lists, and design rules. |
|
|
119
|
-
| `inferred` | You combined ≥2 raw fragments into a load-bearing conclusion that no single fragment states. |
|
|
120
|
-
| `speculative` | Raw only hints; the Section is a best-effort reading that may not survive review. |
|
|
86
|
+
Use `context schema compile-draft --view minimal --format json` (or yaml) for the current legal kind list, priority order, and mount matrix. This skill adds only semantic guardrails:
|
|
87
|
+
|
|
88
|
+
- Stop at the first kind whose source-backed form fits.
|
|
89
|
+
- Do not choose `description` to hide lists, rules, tables, samples, risks, choices, or Q+A evidence that has a more precise kind.
|
|
90
|
+
- When the strongest kind is not mountable on this Node type, choose the next legal kind that the evidence truly supports, or `skip` with a structural challenge reason.
|
|
121
91
|
|
|
122
|
-
|
|
92
|
+
Confidence is optional. Omit it for ordinary confirmed claims; set it only when the evidence is clearly verified, inferred, or speculative according to the schema enum.
|
|
123
93
|
|
|
124
94
|
## Description anti-abuse gates
|
|
125
95
|
|
|
@@ -137,6 +107,8 @@ When raw mentions a name that overlaps the workspace glossary, put that name's s
|
|
|
137
107
|
|
|
138
108
|
If the CLI returns `compile-missing-refers-to-node`, treat it as advisory: add the suggested slug only when the Section actually depends on that Node; otherwise leave the draft unchanged and rely on the cited `source_ref`.
|
|
139
109
|
|
|
110
|
+
If the CLI returns source-ref narrowing, candidate hard-fact, summary quality, or low-coverage advisories with `agent_recommended_action: ignore`, do not patch solely to satisfy the advisory. Patch only when the cited source actually loses meaning, a confirmed hard fact is unsupported, or the returned `next_action` asks for a draft patch.
|
|
111
|
+
|
|
140
112
|
## FAQ attachment priority
|
|
141
113
|
|
|
142
114
|
| FAQ topic | Attach to |
|
|
@@ -160,20 +132,14 @@ Check edge case conditions from the routing table at the top of this skill. If a
|
|
|
160
132
|
|
|
161
133
|
Estimate coverage from the provided `raw_snippets[]` before writing actions. Treat "the first quote is supported" as only a validation result, not a completion signal.
|
|
162
134
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
1. Count citation-eligible, non-navigation snippets and group them by `block_locator_id` heading prefix.
|
|
166
|
-
2. For 3-11 such snippets, read each snippet once. If later snippets are distinct facts, emit separate actions before moving to the next Node. Do not stop after one supported description just because the file is short.
|
|
167
|
-
3. For roughly 12+ citation-eligible snippets or 5+ distinct locator areas, plan multiple Sections in this single draft. Large manuals/design docs usually need several orthogonal actions.
|
|
168
|
-
4. This is not a quota: skip duplicates, navigation-only blocks, placeholders, and unsupported fragments. The goal is coverage of distinct source-backed knowledge, not maximum Section count.
|
|
169
|
-
5. If `context reconcile prepare` returns `compact-source-low-coverage` or `dense-source-low-coverage`, revise the same draft to cover the suggested uncovered evidence candidates before review/apply. Do not treat those warnings as ignorable polish.
|
|
135
|
+
Use the CLI-provided citation-eligible snippets and diagnostics as the coverage contract. Distinct source-backed facts should become distinct actions or evidence-carrying skips; duplicates, navigation-only blocks, placeholders, and unsupported fragments can be skipped. If later CLI diagnostics report low coverage, repair the same draft through the returned `next_action`.
|
|
170
136
|
|
|
171
137
|
### Step 2 — Classify each raw snippet
|
|
172
138
|
|
|
173
139
|
For each `raw_snippets[]` entry:
|
|
174
140
|
|
|
175
141
|
1. If the snippet only contains navigation or placeholder evidence (`Parent` / `Children` / `Related` / `Relations`, sibling links, "no detailed content", etc.), emit `skip`. Do not create a Section whose content is just "Children: ..." or "Related: ..." and do not summarize facts that are not present in the snippet.
|
|
176
|
-
2.
|
|
142
|
+
2. Pick kind using [Section Kind Choice](#section-kind-choice); stop at the first kind whose trigger fires.
|
|
177
143
|
3. Verify the kind against the mount matrix for `node.type`. Mismatch → pick the next legal kind down the chain, or emit `skip` with a reason pointing at a better Node. Never "fall through to description" just to place evidence.
|
|
178
144
|
4. If you land on `description`, walk the [Description anti-abuse gates](#description-anti-abuse-gates). Any gate fires → split or `skip`.
|
|
179
145
|
|
|
@@ -186,29 +152,23 @@ For each classified snippet:
|
|
|
186
152
|
1. Write `content` as the Section text the reader should see. It can include long prose, URLs, tables, command/config/code fences, or short raw wording. Keep one coherent, cited fact group per action.
|
|
187
153
|
2. Keep `content` faithful to the cited raw terms: do not introduce acronyms, abbreviations, translations, or aliases that do not appear in the cited raw snippet unless raw itself defines the equivalence or the user confirms it later during semantic review.
|
|
188
154
|
- Default to raw wording. Only make semantic-preserving edits for formatting, typo fixes, casing, entity/alias consistency, or sentence cleanup. If the raw text is already clear, `content` should equal the raw text.
|
|
189
|
-
-
|
|
155
|
+
- Preserve meaningful Markdown formatting from the cited raw: inline code markers, fenced blocks, Markdown link targets, blockquote markers, nested list structure, tables, and emphasis on key terms. Do not flatten these into plain prose unless the formatting is purely decorative.
|
|
156
|
+
- `source_support` is advisory lexical diagnostics, not the final semantic judge or a keyword gate. Do not stuff raw text into `content` just to raise matched-term counts, and do not patch a clear draft only to satisfy a lexical term mismatch.
|
|
190
157
|
- There is no separate default `evidence-echo` warning. Treat "echo" as an anti-pattern: raw copied only to show basis/evidence, while `source_ref` already provides traceability.
|
|
191
158
|
- For `description` / `spec`, a concise summary plus the cited bullet list is acceptable when the bullets are the useful user-facing knowledge. It becomes echo only when the copied text is not meant to be read as active knowledge.
|
|
192
159
|
- For `example` Sections that cite a code, config, or command fence, keep `content` centered on the cited fenced block. Put framing prose such as "basic configuration example" in `summary`, or cite a separate prose block in a separate action when that prose is itself source-backed knowledge.
|
|
193
|
-
3.
|
|
194
|
-
4.
|
|
195
|
-
5. Omit `confidence` for ordinary confirmed claims. Assign
|
|
160
|
+
3. For long `content`, add `summary` when it helps readers or query output. Summary is LLM-authored reader/query aid: one plain paragraph, no Markdown, and should stay compact. The CLI only reports advisory hints for missing summaries on long content, Markdown/multi-paragraph formatting, or clearly overlong summaries; it does not enforce a content-length ratio and does not treat summary quality as an evidence failure. Lexical `source_support` checks `content` (and legacy `detail` when present), not `summary`; keep summaries faithful to `content`, but do not copy raw-only keywords into `summary` for lexical scoring.
|
|
161
|
+
4. Preserve `required_preserved_literals[]` from the CLI evidence view. For link-heavy citation-eligible evidence, keep the listed URLs in `content` when the action writes knowledge; for supporting-only literals, keep them in the repair/challenge context instead of citing them.
|
|
162
|
+
5. Omit `confidence` for ordinary confirmed claims. Assign it only when the evidence is clearly verified, inferred, or speculative according to the schema enum.
|
|
196
163
|
6. Fill `refers_to_nodes[]` per [Glossary and refers_to_nodes](#glossary-and-refers_to_nodes).
|
|
197
|
-
7. Cite evidence with `
|
|
164
|
+
7. Cite evidence with `source_block_ids[]`, picking values from `source-refs-index` `items[].block_id` or `citable_source_refs[].block_id`. When one Section summarizes contiguous multi-block evidence, list only the block ids consumed by that Section content; the CLI expands and verifies that the refs can collapse to one canonical citation token and may auto-narrow over-wide citations. If the evidence is non-contiguous or contains separable claims, split the draft into separately cited actions instead of stretching one action across unrelated blocks. For `skip`, include `source_block_ids[]` only when the skip represents reviewed no-write material from citation-eligible evidence; omit evidence for purely deterministic no-ops, navigation, and context-only/background snippets. Never submit singular `source_ref`, mix `source_block_ids` with `source_refs`, or use quoted-evidence fields; the CLI rejects them.
|
|
198
165
|
|
|
199
166
|
Rendered knowledge starts with optional `c4a:summary`, then the active `content`. If `content` differs from the cited raw, the CLI may render a debug-only `c4a:raw` block for audit; agents must not emit `raw`.
|
|
200
167
|
|
|
201
168
|
### Step 4 — Emit the JSON
|
|
202
169
|
|
|
203
|
-
Emit one compile draft JSON document for the caller to
|
|
204
|
-
|
|
205
|
-
### Step 5 — Self-verify
|
|
170
|
+
Emit one compile draft JSON document for the caller to submit to the current envelope's `next_action.command`. No markdown wrapper, no leading prose, no trailing commentary.
|
|
206
171
|
|
|
207
|
-
|
|
208
|
-
- [ ] Every `description` action survives the [Description anti-abuse gates](#description-anti-abuse-gates). If not, **Step 2** to split or `skip`.
|
|
209
|
-
- [ ] Coverage matches evidence density: dense raw with one broad action returns to **Step 2** unless remaining snippets are duplicates / navigation / placeholders / already covered. Citation-eligible URL blocks are either preserved or `skip`-with-evidence.
|
|
210
|
-
- [ ] `skip` semantics: bare `skip` only for deterministic no-op (unchanged input or pure navigation); reviewed-no-write `skip` carries `source_refs[]` from the cited snippet. When raw adds nothing, exactly one `op: skip` with a reason — not `actions: []`. If not, **Step 3**.
|
|
211
|
-
- [ ] If any edge case condition applies (action/domain Node, note snippets, existing Sections, non-changed-only incremental, or structural defect), the relevant reference's Self-verify items were also satisfied.
|
|
212
|
-
- [ ] NodeContext was the only evidence source — no Read / Glob / Grep / Write / ad-hoc script or shell file traversal against `WORKSPACE_DIR`, `.context`, `/tmp` workflow artifacts, or CLI `--format json` stdout. If any was used, restart from the CLI-provided NodeContext.
|
|
172
|
+
Before returning, ensure `schema_version` is `compile.draft.v2`, `node_slug` matches `node.slug`, fields conform to `context schema compile-draft`, `required_preserved_literals[]` are preserved or carried into an evidence-backed skip/repair challenge, and NodeContext was the only evidence source.
|
|
213
173
|
|
|
214
174
|
</procedures>
|
|
@@ -22,13 +22,13 @@ When a `raw_snippets[]` entry has `source_type: "note"`:
|
|
|
22
22
|
|
|
23
23
|
`revision_kind` (`replace` / `clarify` / ...) refines the choice within `revision`.
|
|
24
24
|
|
|
25
|
-
3. **No-write reviewed-no-write case.** If the note says "don't modify active knowledge yet" or the correct outcome is no-write after review, emit `skip` with `
|
|
25
|
+
3. **No-write reviewed-no-write case.** If the note says "don't modify active knowledge yet" or the correct outcome is no-write after review, emit `skip` with `source_block_ids[]` containing the note's citation-eligible block id. This lets semantic review record `reviewed_no_write` instead of treating the skip as an unreviewed no-op.
|
|
26
26
|
|
|
27
|
-
4. **Bare skip is not allowed for notes.** A bare `skip` (no
|
|
27
|
+
4. **Bare skip is not allowed for notes.** A bare `skip` (no evidence) is only for deterministic no-op cases such as unchanged input or pure navigation. Notes always carry an anchor and an intent; the skip must cite the note's block id or explicit source_ref.
|
|
28
28
|
|
|
29
29
|
## Where this lives in the main procedure
|
|
30
30
|
|
|
31
31
|
- **Step 2 — Classify**: run the note-first comparison **before** the generic kind priority chain. If the note resolves to `update` / `supersede` / `skip` (reviewed), record the action and move on; do not also process the same note through the generic chain.
|
|
32
|
-
- **Step 5 — Self-verify**: every note snippet was either consumed by an anchored action or carried into a `skip` with `
|
|
32
|
+
- **Step 5 — Self-verify**: every note snippet was either consumed by an anchored action or carried into a `skip` with `source_block_ids[]`.
|
|
33
33
|
|
|
34
34
|
Notes never become structure_challenge or pending_ownership_challenge on their own. If a note describes a structural problem (missing Action, wrong parent, etc.), capture the underlying evidence in raw form and emit the challenge from that — see `references/structural-challenges.md`.
|
|
@@ -41,9 +41,9 @@ When `existing.sections[]` is non-empty, every `section-N` id you read here is a
|
|
|
41
41
|
|
|
42
42
|
### `update` / `supersede.new` mechanics
|
|
43
43
|
|
|
44
|
-
- `update` keeps the same `section-N` id; provide new `content` (optional `summary`, optional new `
|
|
45
|
-
- `supersede.new` is a fresh Section; it needs `kind`, `content`, `
|
|
46
|
-
- `deprecate` only needs `target_section_id` and `reason`. Do not pass `content` or `source_refs[]`.
|
|
44
|
+
- `update` keeps the same `section-N` id; provide new `content` (optional `summary`, optional new `source_block_ids[]`) but do not include `kind` unless the kind itself is changing.
|
|
45
|
+
- `supersede.new` is a fresh Section; it needs `kind`, `content`, `source_block_ids[]`, and may carry `summary`, `refers_to_nodes[]`, and `confidence` per the same rules as `add`.
|
|
46
|
+
- `deprecate` only needs `target_section_id` and `reason`. Do not pass `content`, `source_block_ids[]`, or `source_refs[]`.
|
|
47
47
|
|
|
48
48
|
## Output schema (refresh ops)
|
|
49
49
|
|
|
@@ -53,12 +53,12 @@ When `existing.sections[]` is non-empty, every `section-N` id you read here is a
|
|
|
53
53
|
{ "op": "update", "target_section_id": "section-3",
|
|
54
54
|
"content": "...",
|
|
55
55
|
"refers_to_nodes": null,
|
|
56
|
-
"
|
|
56
|
+
"source_block_ids": ["c0d4e5f61728"] },
|
|
57
57
|
{ "op": "supersede", "target_section_id": "section-5",
|
|
58
58
|
"reason": "raw published a new retention value",
|
|
59
59
|
"new": { "kind": "spec", "content": "...",
|
|
60
60
|
"refers_to_nodes": ["..."],
|
|
61
|
-
"
|
|
61
|
+
"source_block_ids": ["9d1e2f3a4b5c"] } },
|
|
62
62
|
{ "op": "deprecate", "target_section_id": "section-2", "reason": "..." }
|
|
63
63
|
]
|
|
64
64
|
}
|
|
@@ -62,7 +62,7 @@ Supported `structure_challenge.kind` values: `missing_action_node`, `extra_actio
|
|
|
62
62
|
}
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
Different `kind` values demand different sub-fields.
|
|
65
|
+
Different `kind` values demand different sub-fields. On shape errors, follow the CLI's top-level diagnostics / `expected_shape` / returned repair `next_action` instead of guessing. `agent_hints[]`, when present, is only a cutover mirror and must not be the source of truth.
|
|
66
66
|
|
|
67
67
|
## What these are NOT
|
|
68
68
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: skill-compile-judge
|
|
3
3
|
description: >
|
|
4
|
-
Packaged skill invoked by `/context:compile`; not a user slash command. Consumes the
|
|
5
|
-
judges each draft action's source support and relation to listed candidates,
|
|
6
|
-
and emits a compile.judge-decisions.
|
|
4
|
+
Packaged skill invoked by `/context:compile`; not a user slash command. Consumes the budget-safe compile prepare summary
|
|
5
|
+
and candidate detail views, judges each draft action's source support and relation to listed candidates,
|
|
6
|
+
and emits a compile.judge-decisions.v2 document for `context reconcile review`.
|
|
7
7
|
tools:
|
|
8
8
|
- Bash
|
|
9
9
|
---
|
|
@@ -16,9 +16,10 @@ decisions only; the CLI reviews, applies, and writes every workspace change.
|
|
|
16
16
|
|
|
17
17
|
## TL;DR — Non-negotiables
|
|
18
18
|
|
|
19
|
-
-
|
|
19
|
+
- Invoke this skill only when the caller's top-level envelope has `next_action.kind: "review_reconcile_decisions"` or the prepare payload contains `judge_handoff`. If the active envelope asks for `patch_compile_draft`, `continue_compile_cycle`, or another action, stop and follow that `next_action.command` instead.
|
|
20
|
+
- Input is the budget-safe compile prepare summary. For items with candidates, load only that item's candidate detail view with `context workflow show --payload prepare --view candidates --item-id <item-id> --unwrap --format json`.
|
|
20
21
|
- Do not inspect workspace storage directly or run ad-hoc scripts to reconstruct candidates. Use only `items[]`, `evidence[]`, `source_support` diagnostics, `candidates[]`, `previous_decisions[]`, and `judge_handoff`.
|
|
21
|
-
- Output exactly one JSON or YAML document with `schema_version: "compile.judge-decisions.
|
|
22
|
+
- Output exactly one JSON or YAML document with `schema_version: "compile.judge-decisions.v2"` and `decisions[]`.
|
|
22
23
|
- Keep one decision per prepared `item_id`, preserving prepare order.
|
|
23
24
|
- For support, output `support_verdict: supported | weak | unsupported` plus `support_reason`.
|
|
24
25
|
- For relation, output `relation_verdict: new | duplicate | supersede | conflict | merge_into` plus `relation_reason`.
|
|
@@ -27,7 +28,8 @@ decisions only; the CLI reviews, applies, and writes every workspace change.
|
|
|
27
28
|
- Escape hatch: when an item has no candidates, `relation_verdict: new` with `compared_section_ids: []` and `compared_count: 0` is valid and expected.
|
|
28
29
|
- For `duplicate`, `supersede`, `conflict`, or `merge_into`, set `target_section_id` to the matched candidate Section id.
|
|
29
30
|
- Same `source_ref` can support different Section kinds only when the semantic role differs. Detect and explain same-source-ref multi-kind cases instead of treating them as automatic duplicates.
|
|
30
|
-
- A supported judge verdict may override low lexical `source_support`
|
|
31
|
+
- `source_support` is advisory lexical diagnostics, not a keyword gate. A supported judge verdict may override low lexical `source_support` when the cited raw evidence semantically covers the claim.
|
|
32
|
+
- Evidence-boundary errors, missing URLs, and split-by-evidence candidates remain blocking evidence issues. Do not patch drafts merely because `source_support.missing_hard_terms[]` contains a spelling, casing, punctuation, or paraphrase mismatch.
|
|
31
33
|
- Weak support is a warning-level verdict, not permission to invent missing facts. Unsupported support should normally pair with `conflict` or a later user question rather than a write decision.
|
|
32
34
|
|
|
33
35
|
<reference>
|
|
@@ -35,7 +37,7 @@ decisions only; the CLI reviews, applies, and writes every workspace change.
|
|
|
35
37
|
## Output Shape
|
|
36
38
|
|
|
37
39
|
```yaml
|
|
38
|
-
schema_version: "compile.judge-decisions.
|
|
40
|
+
schema_version: "compile.judge-decisions.v2"
|
|
39
41
|
mode: compile
|
|
40
42
|
decisions:
|
|
41
43
|
- item_id: claim-001
|
|
@@ -50,7 +52,7 @@ decisions:
|
|
|
50
52
|
For a relation against an existing candidate:
|
|
51
53
|
|
|
52
54
|
```yaml
|
|
53
|
-
schema_version: "compile.judge-decisions.
|
|
55
|
+
schema_version: "compile.judge-decisions.v2"
|
|
54
56
|
mode: compile
|
|
55
57
|
decisions:
|
|
56
58
|
- item_id: claim-002
|
|
@@ -80,10 +82,11 @@ decisions:
|
|
|
80
82
|
|
|
81
83
|
<procedures>
|
|
82
84
|
|
|
83
|
-
### Step 1 — Load
|
|
85
|
+
### Step 1 — Load Prepare Summary And Candidate Details
|
|
84
86
|
|
|
85
|
-
|
|
86
|
-
load
|
|
87
|
+
Use the caller-provided compact prepare output. For every item with candidates,
|
|
88
|
+
load its candidate detail view before judging relation. Do not infer missing
|
|
89
|
+
candidates from memory or bypass the candidate detail view.
|
|
87
90
|
|
|
88
91
|
### Step 2 — Judge Support
|
|
89
92
|
|
|
@@ -101,7 +104,7 @@ candidate list is empty, emit `new` with an empty compared list and
|
|
|
101
104
|
|
|
102
105
|
### Step 4 — Emit Judge Decisions
|
|
103
106
|
|
|
104
|
-
Return only the `compile.judge-decisions.
|
|
107
|
+
Return only the `compile.judge-decisions.v2` document. The caller passes it
|
|
105
108
|
directly to `context reconcile review --decisions -`.
|
|
106
109
|
|
|
107
110
|
</procedures>
|
|
@@ -5,7 +5,7 @@ description: >
|
|
|
5
5
|
and compile scope-review fallback; not a user slash command. Ordinary compile
|
|
6
6
|
prepare judgment uses `skill-compile-judge`. This skill consumes only
|
|
7
7
|
`context reconcile prepare` output, judges semantic relation/action for each item,
|
|
8
|
-
and emits a
|
|
8
|
+
and emits a `semantic-decisions.v2` decision document for `context reconcile review`;
|
|
9
9
|
apply consumes the current workflow's ready review artifact.
|
|
10
10
|
tools:
|
|
11
11
|
- Bash
|
|
@@ -19,7 +19,7 @@ only; the CLI performs every write.
|
|
|
19
19
|
|
|
20
20
|
## TL;DR — Non-negotiables
|
|
21
21
|
|
|
22
|
-
- Input is the
|
|
22
|
+
- Input is the budget-safe `context reconcile prepare` summary or issues view. When an item lists candidates, load that item's candidate detail view with `context workflow show --payload prepare --view candidates --item-id <item-id> --unwrap --format json`; request broader detail only when a CLI `next_action` or detail command explicitly asks for it. Never `grep` / `sed` / `jq` / `cat` / `head` workflow scratch files or `--format json` stdout to recover prepare fields, and do not Read / Glob / Grep / Write workspace `raw/` / `knowledge/` / `archive/` / `decisions/` — the prepare payload and review output are the only inputs.
|
|
23
23
|
- Ordinary compile prepare judgment belongs to `skill-compile-judge`. Use this skill for refresh/drop/non-compile reconcile, or when compile review asks for scope/omit/user-confirmation reasoning that is outside the judge handoff.
|
|
24
24
|
- Output: one YAML or JSON document conforming to `context schema semantic-decisions --format yaml`. The schema defines canonical `relation` and `action` enums and the per-action required fields; do not memorise the enum list from this skill.
|
|
25
25
|
- Accept a prepared `default_decision` with the compact form `{ item_id, accept_default: true }` (optionally `decided_by` / `rationale`); the CLI hydrates `target` / `proposed`. Empty `decisions: []` means "no items in prepare," not "accept all defaults." Without `--accept-safe-defaults`, emit one compact accept entry per safe default you intend to accept. With `--accept-safe-defaults`, the CLI auto-accepts mechanically safe no-candidate supported writes and reviewed-no-write skips, so emit only the manual decisions that still need judgment.
|
|
@@ -37,7 +37,7 @@ only; the CLI performs every write.
|
|
|
37
37
|
|---|---|
|
|
38
38
|
| `prepare.mode` is `drop` or `refresh` (covers `remove_unsupported` mode semantics, `reanchor`, `split_then_reanchor`) | [references/mode-semantics.md](references/mode-semantics.md) |
|
|
39
39
|
| review returned `support_confirmation`, `omit_confirmation`, `scope_review_required`, or any `ask_user` you need to upgrade to an executable decision | [references/user-confirmation.md](references/user-confirmation.md) |
|
|
40
|
-
| review
|
|
40
|
+
| review diagnostics or cutover hints returned `code: "context-only-leakage-high"` | [references/leakage-and-ownership.md](references/leakage-and-ownership.md) |
|
|
41
41
|
| items carry `temporal_prior` / `source_captured_at` / `temporal_disposition`, `source_support.evidence_block_*`, or prepared long `proposed.content` / `proposed.summary` | [references/temporal-and-evidence.md](references/temporal-and-evidence.md) |
|
|
42
42
|
| considering `action: omit`, or items look redundant / low-value / scope-wrong | [references/scope-review-and-omit.md](references/scope-review-and-omit.md) |
|
|
43
43
|
|
|
@@ -50,7 +50,7 @@ If none of the above hold, you are on this skill's main path: refresh/drop/non-c
|
|
|
50
50
|
Accept a prepared `default_decision` with the compact form:
|
|
51
51
|
|
|
52
52
|
```yaml
|
|
53
|
-
schema_version: "
|
|
53
|
+
schema_version: "semantic-decisions.v2"
|
|
54
54
|
decisions:
|
|
55
55
|
- item_id: claim-001
|
|
56
56
|
accept_default: true
|
|
@@ -59,7 +59,7 @@ decisions:
|
|
|
59
59
|
For a changed action or hand-authored decision, emit the full shape with the action's required fields (see Action Rules below):
|
|
60
60
|
|
|
61
61
|
```yaml
|
|
62
|
-
schema_version: "
|
|
62
|
+
schema_version: "semantic-decisions.v2"
|
|
63
63
|
decisions:
|
|
64
64
|
- item_id: claim-001
|
|
65
65
|
relation: near_duplicate
|
|
@@ -120,9 +120,9 @@ Drop-mode-only branches (`reanchor`, `split_then_reanchor`, `remove_unsupported`
|
|
|
120
120
|
|
|
121
121
|
### Step 3 — Emit Decisions
|
|
122
122
|
|
|
123
|
-
Emit one document with `schema_version: "
|
|
123
|
+
Emit one document with `schema_version: "semantic-decisions.v2"` and `decisions[]`. Include only executable final decisions plus unresolved `ask_user` questions. Do not include prose outside the document.
|
|
124
124
|
|
|
125
|
-
If the latest review rejected the batch with `context-only-leakage-high`, do not convert it into a generic `ask_user`. Follow [references/leakage-and-ownership.md](references/leakage-and-ownership.md): regenerate the affected decision using
|
|
125
|
+
If the latest review rejected the batch with `context-only-leakage-high`, do not convert it into a generic `ask_user`. Follow [references/leakage-and-ownership.md](references/leakage-and-ownership.md): regenerate the affected decision using the review diagnostic's explicit repair options and cited item ids, then rerun `context reconcile review`.
|
|
126
126
|
|
|
127
127
|
### Step 4 — Self-verify
|
|
128
128
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Context-only leakage and ownership upgrades
|
|
2
2
|
|
|
3
|
-
Consult this reference when `context reconcile review` returns
|
|
3
|
+
Consult this reference when `context reconcile review` returns diagnostics or cutover hints with `code: "context-only-leakage-high"`. For runs without that code, ignore this file.
|
|
4
4
|
|
|
5
5
|
## What the hint means
|
|
6
6
|
|
package/scripts/build-plugin.ts
CHANGED
|
@@ -34,6 +34,8 @@ const repoRoot = resolve(pkgRoot, "../..");
|
|
|
34
34
|
const PLUGINS_ROOT = process.env.C4A_PLUGINS_ROOT
|
|
35
35
|
? resolve(process.env.C4A_PLUGINS_ROOT)
|
|
36
36
|
: resolve(repoRoot, "c4a-plugins");
|
|
37
|
+
const MARKETPLACE_NAME = "c4a";
|
|
38
|
+
const PLUGIN_NAME = "context";
|
|
37
39
|
|
|
38
40
|
interface CommandSource {
|
|
39
41
|
slug: string;
|
|
@@ -601,29 +603,29 @@ async function ensurePluginsRoot(): Promise<void> {
|
|
|
601
603
|
|
|
602
604
|
async function writeMarketplaceManifests(version: string): Promise<void> {
|
|
603
605
|
const claudeMarketplace = {
|
|
604
|
-
name:
|
|
606
|
+
name: MARKETPLACE_NAME,
|
|
605
607
|
owner: { name: "c4a" },
|
|
606
608
|
plugins: [{
|
|
607
|
-
name:
|
|
609
|
+
name: PLUGIN_NAME,
|
|
608
610
|
source: "./claude",
|
|
609
611
|
description: "Context For AI — local knowledge workspace. Capture docs, extract code structure, compile into an interlinked wiki with source-traced facts.",
|
|
610
612
|
}],
|
|
611
613
|
};
|
|
612
614
|
const cursorMarketplace = {
|
|
613
|
-
name:
|
|
615
|
+
name: MARKETPLACE_NAME,
|
|
614
616
|
owner: { name: "Context4AI", email: "support@context4ai.dev" },
|
|
615
617
|
metadata: { description: "C4A Context plugin marketplace" },
|
|
616
618
|
plugins: [{
|
|
617
|
-
name:
|
|
619
|
+
name: PLUGIN_NAME,
|
|
618
620
|
source: "./cursor",
|
|
619
621
|
description: "Turn project sources into a local, source-linked knowledge workspace your agent can maintain and query.",
|
|
620
622
|
}],
|
|
621
623
|
};
|
|
622
624
|
const codexMarketplace = {
|
|
623
|
-
name:
|
|
625
|
+
name: MARKETPLACE_NAME,
|
|
624
626
|
interface: { displayName: "C4A Marketplace" },
|
|
625
627
|
plugins: [{
|
|
626
|
-
name:
|
|
628
|
+
name: PLUGIN_NAME,
|
|
627
629
|
source: { source: "local", path: "./codex" },
|
|
628
630
|
policy: { installation: "AVAILABLE", authentication: "ON_INSTALL" },
|
|
629
631
|
category: "Productivity",
|