@llblab/pi-actors 0.56.1 → 0.57.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.
- package/AGENTS.md +7 -7
- package/BACKLOG.md +4 -14
- package/CHANGELOG.md +13 -0
- package/README.md +7 -2
- package/dist/lib/execution-output.js +13 -2
- package/dist/lib/observability.js +9 -14
- package/dist/lib/registry.js +82 -117
- package/dist/lib/run-delivery.d.ts +1 -1
- package/dist/lib/run-delivery.js +146 -32
- package/dist/lib/run-ui-runtime.js +18 -27
- package/dist/lib/runs-process-windows-mi.d.ts +71 -0
- package/dist/lib/runs-process-windows-mi.js +146 -3
- package/dist/lib/tools-inspect.js +109 -59
- package/dist/lib/tools-local.js +16 -8
- package/dist/lib/tools-message.js +76 -65
- package/dist/lib/tools-response.d.ts +18 -0
- package/dist/lib/tools-response.js +88 -21
- package/dist/lib/tools-spawn.js +19 -12
- package/dist/skills/actors/SKILL.md +1 -1
- package/dist/skills/actors/references/diagnostics.md +3 -0
- package/dist/skills/actors/references/runs.md +1 -1
- package/docs/README.md +1 -0
- package/docs/actor-inspector.md +2 -2
- package/docs/agent-experience.md +51 -4
- package/docs/coordinator-delivery.md +2 -2
- package/docs/inactive-foundations-inventory.md +73 -0
- package/docs/inspection.md +9 -8
- package/docs/output-projection-map.md +19 -17
- package/docs/windows-process-observation.md +2 -2
- package/lib/execution-output.ts +13 -2
- package/lib/observability.ts +9 -11
- package/lib/registry.ts +89 -124
- package/lib/run-delivery.ts +130 -31
- package/lib/run-ui-runtime.ts +18 -34
- package/lib/runs-process-windows-mi.ts +167 -3
- package/lib/tools-inspect.ts +109 -59
- package/lib/tools-local.ts +26 -15
- package/lib/tools-message.ts +85 -58
- package/lib/tools-response.ts +97 -20
- package/lib/tools-spawn.ts +19 -12
- package/package.json +1 -1
- package/skills/actors/SKILL.md +1 -1
- package/skills/actors/references/diagnostics.md +3 -0
- package/skills/actors/references/runs.md +1 -1
|
@@ -101,6 +101,62 @@ export function renderYamlMetadata(value, byteBudget) {
|
|
|
101
101
|
return { state: "unavailable", reason: "metadata_invalid" };
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
|
+
/** One selected metadata node, kept whole or covered by a field/group omission. */
|
|
105
|
+
export function selectYamlNode(key, value, byteBudget, total = 1) {
|
|
106
|
+
const full = { [key]: value };
|
|
107
|
+
const complete = renderYamlMetadata(full, byteBudget);
|
|
108
|
+
const invalid = complete.state === "unavailable" && complete.reason === "metadata_invalid";
|
|
109
|
+
const omitted = { [key]: invalid ? "[unavailable]" : "[omitted]",
|
|
110
|
+
[key + "_omission"]: { reason: invalid ? "invalid_selected_metadata" : "response_too_large", shown: 0, omitted: total, total } };
|
|
111
|
+
const fallback = renderYamlMetadata(omitted, byteBudget);
|
|
112
|
+
// Seed the shorter complete-or-omitted form: omission scaffolding must never manufacture overflow.
|
|
113
|
+
const selected = complete.state === "available" && fallback.state === "available" &&
|
|
114
|
+
Buffer.byteLength(complete.text) <= Buffer.byteLength(fallback.text) ? full : omitted;
|
|
115
|
+
return { full: invalid ? omitted : full, selected };
|
|
116
|
+
}
|
|
117
|
+
/** Opaque selected text or string sequence; malformed selections stay unavailable without repair. */
|
|
118
|
+
export function selectYamlField(key, value, byteBudget) {
|
|
119
|
+
const values = typeof value === "string" ? [value] : value;
|
|
120
|
+
if (values.every(item => item.isWellFormed()))
|
|
121
|
+
return selectYamlNode(key, typeof value === "string" ? value : [...value], byteBudget, typeof value === "string" ? 1 : value.length);
|
|
122
|
+
const total = typeof value === "string" ? 1 : value.length;
|
|
123
|
+
const omitted = { [key]: "[unavailable]",
|
|
124
|
+
[key + "_omission"]: { reason: "malformed_selected_text", shown: 0, omitted: total, total } };
|
|
125
|
+
return { full: omitted, selected: omitted };
|
|
126
|
+
}
|
|
127
|
+
/** Grow whole selected fields in priority order while the complete document still fits. */
|
|
128
|
+
export function growYamlDocument(render, order, byteBudget) {
|
|
129
|
+
const fits = () => renderYamlMetadata(render(), byteBudget).state === "available";
|
|
130
|
+
for (const part of order) {
|
|
131
|
+
if (part.selected === part.full)
|
|
132
|
+
continue;
|
|
133
|
+
const previous = part.selected;
|
|
134
|
+
part.selected = part.full;
|
|
135
|
+
if (!fits())
|
|
136
|
+
part.selected = previous;
|
|
137
|
+
}
|
|
138
|
+
const rendered = renderYamlMetadata(render(), byteBudget);
|
|
139
|
+
if (rendered.state !== "available")
|
|
140
|
+
throw new Error("Selected YAML metadata document is unavailable: " + rendered.reason);
|
|
141
|
+
return rendered.text;
|
|
142
|
+
}
|
|
143
|
+
/** Uncapped UI-only flat metadata; never borrow a model-output allowance for notices. */
|
|
144
|
+
export function formatYamlNotice(value) {
|
|
145
|
+
const selected = {};
|
|
146
|
+
for (const [key, field] of Object.entries(value)) {
|
|
147
|
+
if (typeof field === "string" && !field.isWellFormed()) {
|
|
148
|
+
selected[key] = "[unavailable]";
|
|
149
|
+
selected[key + "_omission"] = { reason: "malformed_selected_text", shown: 0, omitted: 1, total: 1 };
|
|
150
|
+
}
|
|
151
|
+
else
|
|
152
|
+
selected[key] = field;
|
|
153
|
+
}
|
|
154
|
+
return yamlMetadataText(selected).replace(/\n$/u, "");
|
|
155
|
+
}
|
|
156
|
+
/** Close one rendered YAML header; a separate opaque body gets exactly one delimiter pair. */
|
|
157
|
+
export function frameMetadataDocument(header, body) {
|
|
158
|
+
return body === undefined ? header : `---\n${header}---\n${body}`;
|
|
159
|
+
}
|
|
104
160
|
export function formatMarkdownField(key, value, depth = 0) {
|
|
105
161
|
const indent = " ".repeat(depth);
|
|
106
162
|
return /[\r\n]/u.test(value)
|
|
@@ -464,6 +520,26 @@ export function recipeRegistryNextActions(summary, view) {
|
|
|
464
520
|
}
|
|
465
521
|
return [...new Set(actions)].slice(0, 4);
|
|
466
522
|
}
|
|
523
|
+
/** Compact metadata-only document text: one leading LF, no trailing LF, shared emitter budget. */
|
|
524
|
+
export function compactYamlDocument(value) {
|
|
525
|
+
const text = growYamlDocument(() => value, [], Limits.RUN_DELIVERY_MODEL_MAX_BYTES);
|
|
526
|
+
return `\n${text.replace(/\n$/u, "")}`;
|
|
527
|
+
}
|
|
528
|
+
/** Only the closed read-only Recipe inspect literals become typed next; other advice stays opaque content. */
|
|
529
|
+
export function nextActionMetadata(action, byteBudget) {
|
|
530
|
+
const recognized = [
|
|
531
|
+
["inspect target=recipes view=doctor", "doctor", false],
|
|
532
|
+
["inspect target=recipes view=imports verbose=true", "imports", true],
|
|
533
|
+
["inspect target=recipes view=summary verbose=true", "summary", true],
|
|
534
|
+
];
|
|
535
|
+
const match = recognized.find(([literal]) => literal === action);
|
|
536
|
+
if (match) {
|
|
537
|
+
const typed = { next: { tool: "inspect", target: "recipes", view: match[1], ...(match[2] ? { verbose: true } : {}) } };
|
|
538
|
+
return { full: typed, selected: typed };
|
|
539
|
+
}
|
|
540
|
+
const instruction = selectYamlField("instruction", action, byteBudget);
|
|
541
|
+
return { full: { next: instruction.full }, selected: { next: instruction.selected } };
|
|
542
|
+
}
|
|
467
543
|
/** Only these existing read-only inspection hints become action nodes; other advice stays content. */
|
|
468
544
|
export function formatInspectionHint(action) {
|
|
469
545
|
if (action === "inspect target=recipes view=doctor")
|
|
@@ -475,21 +551,11 @@ export function formatInspectionHint(action) {
|
|
|
475
551
|
return formatMarkdownField("instruction", action);
|
|
476
552
|
}
|
|
477
553
|
export function compactRecipeRegistry(summary) {
|
|
478
|
-
const
|
|
479
|
-
const shadowed =
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
const
|
|
483
|
-
const disabled = Array.isArray(summary.disabled)
|
|
484
|
-
? summary.disabled.length
|
|
485
|
-
: 0;
|
|
486
|
-
const diagnostics = Array.isArray(summary.diagnostics)
|
|
487
|
-
? summary.diagnostics.length
|
|
488
|
-
: 0;
|
|
489
|
-
const drafts = Array.isArray(summary.drafts) ? summary.drafts.length : 0;
|
|
490
|
-
const recommendations = Array.isArray(summary.recommendations)
|
|
491
|
-
? summary.recommendations.length
|
|
492
|
-
: 0;
|
|
554
|
+
const count = (key, source) => Array.isArray(source) ? source.length : 0;
|
|
555
|
+
const active = count("active", summary.active), shadowed = count("shadowed", summary.shadowed);
|
|
556
|
+
const invalid = count("invalid", summary.invalid), disabled = count("disabled", summary.disabled);
|
|
557
|
+
const diagnostics = count("diagnostics", summary.diagnostics), drafts = count("drafts", summary.drafts);
|
|
558
|
+
const recommendations = count("recommendations", summary.recommendations);
|
|
493
559
|
const skillCatalogPartial = summary.skill_recipe_catalog_partial === true;
|
|
494
560
|
const currentPolicy = Array.isArray(summary.active)
|
|
495
561
|
? summary.active.filter((entry) => entry.current_policy).length
|
|
@@ -497,11 +563,12 @@ export function compactRecipeRegistry(summary) {
|
|
|
497
563
|
const nextActions = Array.isArray(summary.next_actions)
|
|
498
564
|
? summary.next_actions
|
|
499
565
|
: [];
|
|
500
|
-
const
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
566
|
+
const hint = nextActions.length ? nextActionMetadata(nextActions[0], Limits.RUN_DELIVERY_MODEL_MAX_BYTES) : undefined;
|
|
567
|
+
const render = () => ({ recipes: "registry", active, drafts, shadowed, invalid, disabled,
|
|
568
|
+
current_policy: currentPolicy, skill_catalog_partial: skillCatalogPartial, recommendations, diagnostics,
|
|
569
|
+
...(hint ? hint.selected : {}) });
|
|
570
|
+
return hint
|
|
571
|
+
? `\n${growYamlDocument(render, [hint], Limits.RUN_DELIVERY_MODEL_MAX_BYTES).replace(/\n$/u, "")}`
|
|
572
|
+
: compactYamlDocument(render());
|
|
506
573
|
}
|
|
507
574
|
export const DEFAULT_INSPECT_LINES = Limits.DEFAULT_INSPECT_LINES;
|
package/dist/lib/tools-spawn.js
CHANGED
|
@@ -52,22 +52,29 @@ function writeSpawnDraftRecipe(input, meta) {
|
|
|
52
52
|
}
|
|
53
53
|
/** Compiler-owned pre-launch diagnostics only; selected caller values are not admitted Run ids. */
|
|
54
54
|
function spawnGuardText(kind, value) {
|
|
55
|
-
const field = ToolsResponse.formatMarkdownField;
|
|
56
55
|
const facts = kind === "state_dir"
|
|
57
|
-
?
|
|
58
|
-
:
|
|
59
|
-
...(kind === "id" ?
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
56
|
+
? { result: "unsupported field", reason: "Run state is runtime-owned; run:<id> remains addressable and retention-safe." }
|
|
57
|
+
: { result: kind === "namespace" ? "unsupported Run target" : "invalid Run target", accepted_format: "run:<id>",
|
|
58
|
+
...(kind === "id" ? { id_rule: "nonempty ASCII letters, digits, underscore, dot or hyphen" } : {}) };
|
|
59
|
+
// Measure the shared emitter's own projection: an unfit selected value must become an omission, not a clip.
|
|
60
|
+
const render = (selected) => {
|
|
61
|
+
const rendered = ToolsResponse.renderYamlMetadata({ field: kind === "state_dir" ? "state_dir" : "as", ...(selected ?? {}), ...facts }, Limits.RUN_DELIVERY_MODEL_MAX_BYTES);
|
|
62
|
+
return rendered.state === "available"
|
|
63
|
+
? ToolsResponse.withLeadingLineBreak(ToolsResponse.frameMetadataDocument(rendered.text))
|
|
64
|
+
: undefined;
|
|
65
|
+
};
|
|
66
|
+
const required = (selected) => render(selected) ?? render();
|
|
67
|
+
const wellFormed = value !== undefined && value.isWellFormed();
|
|
68
|
+
if (value !== undefined && wellFormed) {
|
|
69
|
+
const complete = render({ value });
|
|
70
|
+
if (complete !== undefined && Buffer.byteLength(complete) <= Limits.RUN_DELIVERY_MODEL_MAX_BYTES)
|
|
67
71
|
return complete;
|
|
68
72
|
}
|
|
73
|
+
if (value === undefined)
|
|
74
|
+
return required();
|
|
69
75
|
const reason = wellFormed ? "response_too_large" : "malformed_selected_text";
|
|
70
|
-
return
|
|
76
|
+
return required({ value: reason === "response_too_large" ? "[omitted]" : "[unavailable]",
|
|
77
|
+
value_omission: { reason, shown: 0, omitted: 1, total: 1 } });
|
|
71
78
|
}
|
|
72
79
|
function runIdFromTarget(target) {
|
|
73
80
|
if (!target)
|
|
@@ -151,7 +151,7 @@ Run = Recipe + Trace + Control
|
|
|
151
151
|
5. Send `message` only for an action declared and consumed by that controlled Recipe.
|
|
152
152
|
6. Use terminal state, result, declared artifacts, and execution evidence to prove completion. When an outcome includes a retained primary-source, declaration-inventory or diagnostic-metadata reference, use that exact reference for further reading, not guessed captures or sibling files. Literal previews may be clipped; their field/range/counts describe what was shown. Diagnostic sources contain recorded command/error/failure-reason metadata only, not complete primary output; other recorded fields may be referenced without being shown. Artifact inventories list declarations only: they do not assert that target files exist or were produced, or grant body-read permission. Explicit unavailability has no guessed legacy body/path fallback.
|
|
153
153
|
|
|
154
|
-
Compact launch receipts include `run_files` as nested block YAML containing the exact selected observed location values, labeled observed locations/mutable for the exact launched Run generation when the current session and physical identity agree; otherwise they report unavailability or whole-row omission. Machine `file_navigation` details stay JSON-compatible; saved terminal messages retain their own original encodings. Selectively ordinary-read those starting locations when needed; layout/size hints are not body, privacy, terminal or native proof. No evidence bodies or session-wide catalog map are read to build this row. New terminal packets also freeze bounded location rows for captured completion members at fresh current-session admission. Each shown result keeps its whole Run-file row or explicit per-record omission; wholly omitted results stay covered by result omission/inventory. This describes Run-row coverage, not a complete file/tree inventory. Older captured formats retain their original shown/omitted/total counters; unavailability remains explicit. Ordinary-read selected paths only when needed. Packet reload/render never refreshes sources, and old absent/request-only formats keep their text. Source/npm SDK verifies an explicitly requested ordinary read from a delivered terminal result path; this is research, never routine completion polling or new primary/privacy/clock/native authority. Use the request only for file investigation, not routine completion/status polling. Copied locations/hints remain data, never transferred scope; older batches keep their original text.
|
|
154
|
+
Compact launch receipts include `run_files` as nested block YAML containing the exact selected observed location values, labeled observed locations/mutable for the exact launched Run generation when the current session and physical identity agree; otherwise they report unavailability or whole-row omission. Machine `file_navigation` details stay JSON-compatible; saved terminal messages retain their own original encodings. Selectively ordinary-read those starting locations when needed; layout/size hints are not body, privacy, terminal or native proof. No evidence bodies or session-wide catalog map are read to build this row. New terminal packets also freeze bounded location rows for captured completion members at fresh current-session admission. Fresh rooted completion headers group paths under literal roots with relative entries, English purposes and a read_first group/entry pointer; no cwd guess, source refresh or automatic read follows. Unknown bases stay explicit. Runtime navigation/omission/inventory facts remain above the Actor Markdown, not in a footer; retained packets keep their original projection. Each shown result keeps its whole Run-file row or explicit per-record omission; wholly omitted results stay covered by result omission/inventory. This describes Run-row coverage, not a complete file/tree inventory. Older captured formats retain their original shown/omitted/total counters; unavailability remains explicit. Ordinary-read selected paths only when needed. Packet reload/render never refreshes sources, and old absent/request-only formats keep their text. Source/npm SDK verifies an explicitly requested ordinary read from a delivered terminal result path; this is research, never routine completion polling or new primary/privacy/clock/native authority. Use the request only for file investigation, not routine completion/status polling. Copied locations/hints remain data, never transferred scope; older batches keep their original text.
|
|
155
155
|
|
|
156
156
|
For selective investigation of already cataloged files, use `inspect target=runtime view=runs verbose=true`, then ordinary file tools on its current-session root-first navigation. Ordinary maps keep latest-registration order between roots and prioritize known failed subtrees within each root. For a failed investigation add status=failed: inventory is filtered, while the full owned map prioritizes observed failed subtrees across roots, always ancestors first. Priority uses only exact-generation matched inventory observations, not complete terminal truth. Launches and compatible singleton attachments populate the catalog; reads do not backfill missing locations. A `catalog: unavailable` launch warning is not workload failure: do not spawn again merely to repair navigation. The starting map's format hints do not certify syntax, encoding or complete output. See [Runs](./references/runs.md) for selective recorded-capture research and resume boundaries.
|
|
157
157
|
|
|
@@ -6,9 +6,12 @@ Preserve the intended logical identity and diagnose through public pi-actors sur
|
|
|
6
6
|
|
|
7
7
|
```text
|
|
8
8
|
inspect target=recipes view=status
|
|
9
|
+
inspect target=recipes view=summary
|
|
9
10
|
inspect target=recipes view=doctor identity=<skill>/<recipe>
|
|
10
11
|
```
|
|
11
12
|
|
|
13
|
+
`summary` and `registry` name the same inspection path: identical facts, details and rendering for identical `verbose` input, so only `verbose` selects compact text versus structured output. The compact label still reports `recipes: registry`, and that label is not a separate view to request. Unsupported-view refusals list the actual accepted view names.
|
|
14
|
+
|
|
12
15
|
Compact Recipe/Run/tool replies use flat AX fields without changing their existing evidence or authorization. Required/optional tool arguments are sequences, with none distinct from unknown. Focused source_location remains one exact literal value. Run compact replies still identify only run/view: request verbose for structured evidence, and tool schema remains structured even without verbose. Compact text selects at most one existing hint; only exact read-only recipes doctor/imports/summary inspection literals become typed next nodes. Other advice stays instruction content with its original Markdown, never executable metadata or authority to rerun work/register a tool. The full original next_actions array remains in details; do not infer callability from an advisory string.
|
|
13
16
|
|
|
14
17
|
Use the focused doctor form for one intended identity. It reports active-Skill ownership, exact resolvability, partial-catalog state, component status, portable source location, resolution generation, any rejection, and bounded next actions. Use the unfiltered doctor only for catalog-wide diagnosis. A partial catalog does not imply every exact component is unavailable. If the owning Skill is inactive, report that blocker rather than locating and running its helper manually.
|
|
@@ -24,7 +24,7 @@ inspect target=run:<id> view=trace
|
|
|
24
24
|
inspect target=run:<id> view=control
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
Fresh root completions use index-first YAML frontmatter (index, run, state, admitted kind), followed by raw left-edge Markdown. No external #N heading, result:/preview: wrapper, list nesting, whole-body fence, Batch caption, members wrapper or routine outer counter is added. Primary/final Actor response uses kind:primary; explicit error/failure diagnostic text uses kind:diagnostic, never a launch command. Untracked fallback has no kind and keeps unknown original completeness/privacy explicit outside YAML. Known cut loss is [N characters omitted] at the cut, with no extra ellipsis or body clipping counters/flags in metadata. Unknown upstream loss remains separately unknown and does not assert a known positive omission. Exact source/generation/parent/location references remain in complete model content, with whole references or explicit omission, captured inventory recovery and non-done omitted states. The compact TUI independently renders literal headers/markers and native Markdown bodies from validated content-bound blocks; only whole header reference/location rows and framing are hidden. Expansion and invalid/missing hints reveal original text. Hashes/layout/markers establish consistency/correlation only, never authentication, read/action permission, acceptance or native truth. Authored YAML/next/tool/batch/omission lookalikes stay body content. Fresh packets share48KiB UTF-8 including service data, equally between up to64candidate rows, with256captured members and no redistribution of unused shares or fixed16KiB/2KiB text cap. Full admitted text fitting its share without upstream uncertainty has no cut marker; otherwise use the scalar/CRLF-safe prefix and exact retained-source loss. Allocation/text is frozen at admission; rendering/recovery does not reread sources or reallocate. Unsupported Pi event/control output is withheld. Source basis stays in reference metadata; retained structured coverage facts are not exposed as YAML clipping fields. Pending/queued/presented older formats—including #N records and the first frontmatter draft—keep exact bytes, hints and budgets. Encoding names are storage replay data, not public product choices, source permissions or work authority. No standing full-map instruction or automatic research/read follows; use selective same-session investigation when needed.
|
|
27
|
+
Fresh root completions use index-first YAML frontmatter (index, run, state, admitted kind), followed by raw left-edge Markdown. New source captures put all runtime metadata above that body, with no service/file footer. files.groups gives one literal root plus relative entry paths; files.read_first names zero-based group/entry indices for the first useful source, not an automatic read. role/purpose guidance is English; Actor Markdown and path/name bytes are unchanged. External paths use separate roots; unknown bases remain explicit rather than guessed from cwd or Run id. Known cut counts alone may follow the cut body; unknown-loss warnings and packet omission/inventory facts stay in the header. Retained captures preserve their old bytes and presentation. No external #N heading, result:/preview: wrapper, list nesting, whole-body fence, Batch caption, members wrapper or routine outer counter is added. Primary/final Actor response uses kind:primary; explicit error/failure diagnostic text uses kind:diagnostic, never a launch command. Untracked fallback has no kind and keeps unknown original completeness/privacy explicit outside YAML. Known cut loss is [N characters omitted] at the cut, with no extra ellipsis or body clipping counters/flags in metadata. Unknown upstream loss remains separately unknown and does not assert a known positive omission. Exact source/generation/parent/location references remain in complete model content, with whole references or explicit omission, captured inventory recovery and non-done omitted states. The compact TUI independently renders literal headers/markers and native Markdown bodies from validated content-bound blocks; only whole header reference/location rows and framing are hidden. Expansion and invalid/missing hints reveal original text. Hashes/layout/markers establish consistency/correlation only, never authentication, read/action permission, acceptance or native truth. Authored YAML/next/tool/batch/omission lookalikes stay body content. Fresh packets share48KiB UTF-8 including service data, equally between up to64candidate rows, with256captured members and no redistribution of unused shares or fixed16KiB/2KiB text cap. Full admitted text fitting its share without upstream uncertainty has no cut marker; otherwise use the scalar/CRLF-safe prefix and exact retained-source loss. Allocation/text is frozen at admission; rendering/recovery does not reread sources or reallocate. Unsupported Pi event/control output is withheld. Source basis stays in reference metadata; retained structured coverage facts are not exposed as YAML clipping fields. Pending/queued/presented older formats—including #N records and the first frontmatter draft—keep exact bytes, hints and budgets. Encoding names are storage replay data, not public product choices, source permissions or work authority. No standing full-map instruction or automatic research/read follows; use selective same-session investigation when needed.
|
|
28
28
|
|
|
29
29
|
Current completion index values restart within each packet; they are not session-wide historical references. Completion streams are adopted but not enabled, and no start-stream command is available yet. Do not infer an active stream or reset a counter from missing metadata or a pending target, and never relabel older saved packets. The kernel-only allocator now commits fixed scope/order/indices, the counter and first-packet target activation together, and an internal fresh-session bridge can use it after current manager/generation admission. The default runtime does not opt in; no public action exposes it. Event reason or a matching ID alone is insufficient. Old callbacks/wrappers cannot act after replacement; fresh wrappers must belong to the current original manager. Startup/reload/resume and ambiguous imports remain closed to stream capture/ACK, without changing saved packets or inferring a counter from history. Its whole-range exhaustion or admitted counter unavailability yields a frozen unknown index (quoted "?" in fresh YAML; #? in older saved layouts), never partial indices or an automatic fresh stream. Old packets retain their original scope while a pending switch waits; uncertainty does not permit reallocation. Stream state outlives packet cleanup/receipt rotation. Malformed/missing state remains refused, not a zero counter or proof of non-connection.
|
|
30
30
|
|
package/docs/README.md
CHANGED
|
@@ -20,6 +20,7 @@ Living index of all documentation in the `/docs` directory.
|
|
|
20
20
|
|
|
21
21
|
- [windows-process-observation.md](./windows-process-observation.md) — User-approved recovery preparation: passing inert Windows x64 MI child experiment, reviewed unadmitted raw codec and artifact preparation contract; broader profile evidence, unsigned asset distribution and default activation remain separate gates
|
|
22
22
|
- [run-supervision.md](./run-supervision.md) — Accepted future supervision contract and implemented AX/evidence slices, with same-logical-session file research and candidate-bound acceptance; the next selective AX/runtime release does not enable deadlines, independent owner-loss supervision or public completion streams
|
|
23
|
+
- [inactive-foundations-inventory.md](./inactive-foundations-inventory.md) — Reachability and package evidence for packaged-but-unactivated supervision, stream-numbering and native foundations, distinguishing reviewed runtime dependencies from optional ones; no removal decision, nothing activated
|
|
23
24
|
- [composition-transport.md](./composition-transport.md) — Recorded design intake: portable JSONL Recipe bundles and optional host CodeMode orchestration, with launch/outcome separation; bundle grammar and asset scope remain unadopted and outside the current UX/AX release
|
|
24
25
|
|
|
25
26
|
## Project Surfaces
|
package/docs/actor-inspector.md
CHANGED
|
@@ -104,7 +104,7 @@ Esc is the notification's only dismissal action. Action, confirmation, tab and s
|
|
|
104
104
|
|
|
105
105
|
Both notification and Kill dialogs have a two-terminal-column left inset for content and one blank row above and below it. Their borders use borderAccent; keys use accent, descriptions use borderAccent and hint groups are separated by borderAccent frame segments, through the same formatter as the main Inspector. On the lowest available height, decorative blank rows yield to readable text, pinned safety and choices. Narrow confirmations may stack the two choices and wrap the pinned warning rather than clipping either. Both dialogs use the terminal's default background, not a pale theme fill or hard-coded black. Borders and foreground status colors remain; selected confirmation buttons retain their focus background. Popup composition masks only its own rectangle and never inserts a data row or shifts the document, stripes, selection or scroll. The last normal Inspector frame is frozen underneath the modal; resizing reuses those captured cells without new evidence reads. Closing resumes normal rendering/invalidation, not a renewed ownership/native guarantee.
|
|
106
106
|
|
|
107
|
-
Only feedback from the existing Kill callback path pins closure: unconfirmed and No automatic retry outside the popup's scrollable text. This records entry into an action-port path, not native actuation or proven no effects. Local guards do not gain those action uncertainty labels. Routine cancellation is silent: Esc/n or Enter on Cancel closes the confirmation and immediately returns to the same Inspector, without a Notice or an extra dismissal. The popup exposes only the existing selected message, not raw Error/cause or lost180/160-unit tails. Fresh Kill producers now wrap selected values in AX action/result/state-or-diagnostic/closure records. Domain180-unit normalization/trim and overlay160-unit normalization/slice remain the source stages; their already discarded Markdown/tails/causes are not recovered. A pair crossing the prefix end retracts one code unit; a malformed selected preview is unavailable with unknown loss rather than repaired text. Dynamic legacy previews state unproven upstream completeness/privacy, never an exact private-tail count. Compiler refusals add no invented legacy omission. Message/result shape and actuation stay unchanged; saved journals are not rewritten. Source/installed tests cover full opaque access, narrow columns/low rows, scroll/return/selector behavior, no action replay, original Error.message observation and unchanged selected caught-error bytes. Actual operator-loaded colored-terminal/phone acceptance remains separate.
|
|
107
|
+
Only feedback from the existing Kill callback path pins closure: unconfirmed and No automatic retry outside the popup's scrollable text. This records entry into an action-port path, not native actuation or proven no effects. Local guards do not gain those action uncertainty labels. Routine cancellation is silent: Esc/n or Enter on Cancel closes the confirmation and immediately returns to the same Inspector, without a Notice or an extra dismissal. The popup exposes only the existing selected message, not raw Error/cause or lost180/160-unit tails. Fresh Kill producers now wrap selected values in AX action/result/state-or-diagnostic/closure records. Domain180-unit normalization/trim and overlay160-unit normalization/slice remain the source stages; their already discarded Markdown/tails/causes are not recovered. A pair crossing the prefix end retracts one code unit; a malformed selected preview is unavailable with unknown loss rather than repaired text. Dynamic legacy previews state unproven upstream completeness/privacy, never an exact private-tail count. Compiler refusals add no invented legacy omission. Message/result shape and actuation stay unchanged; saved journals are not rewritten. Popup color recognition matches only the exact leading AX header pair: current producer results render failed/rejected as error and unavailable state-only results as warning, while authored text that merely contains those lines stays warning because no body label, message tail or legacy prose becomes an action, identity or closure fact. Source/installed tests cover full opaque access, narrow columns/low rows, scroll/return/selector behavior, no action replay, original Error.message observation and unchanged selected caught-error bytes, plus real producer-result classification for both colors and unanchored-lookalike rejection. Actual operator-loaded colored-terminal/phone acceptance remains separate.
|
|
108
108
|
|
|
109
109
|
## Kill confirmation
|
|
110
110
|
|
|
@@ -132,4 +132,4 @@ Run kill revalidates owner and generation through the canonical lifecycle path.
|
|
|
132
132
|
|
|
133
133
|
## Scope
|
|
134
134
|
|
|
135
|
-
The Actor Inspector treats each Run as a concrete actor instance. It does not expose group conversations, peer addresses, routing, or communication topology. Use `inspect target=runtime view=status|runs|triage`, `inspect target=recipes view=status|summary|doctor|imports|reviews
|
|
135
|
+
The Actor Inspector treats each Run as a concrete actor instance. It does not expose group conversations, peer addresses, routing, or communication topology. Use `inspect target=runtime view=status|runs|triage`, `inspect target=recipes view=status|summary|doctor|imports|reviews` (`registry` is the same view as `summary`), and `inspect target=tool:<name> view=status|schema` for non-Run management targets. See [Management Inspection](./inspection.md) for exact applicability and authorization boundaries.
|
package/docs/agent-experience.md
CHANGED
|
@@ -4,9 +4,9 @@ Status: Adopted project-wide design standard. The operator has selected **JSON i
|
|
|
4
4
|
|
|
5
5
|
## One first AX contract
|
|
6
6
|
|
|
7
|
-
AX is one canonical Agent Experience being prepared for its first release, not a product family of numbered drafts or user/model-selectable formats. The selected target is YAML metadata plus optional opaque authored content; the former Markdown-list key/value grammar is an implemented pre-unification layout, not another target to preserve for new output. Ordinary source and normally built package Batch admission now capture ax_records/completion_yaml_core_v1, and fresh attention/steer use typed block-YAML metadata plus opaque raw body text. The inactive numbered-stream path and saved frontmatter_v1/v2 retain their older layouts. Bounded source/compiled/actual-default accepted-path evidence exists; it does not establish default-disk, global lifetime-policy or loaded-host acceptance. Remaining rollout is tracked in [BACKLOG.md](../BACKLOG.md).
|
|
7
|
+
AX is one canonical Agent Experience being prepared for its first release, not a product family of numbered drafts or user/model-selectable formats. The selected target is YAML metadata plus optional opaque authored content; the former Markdown-list key/value grammar is an implemented pre-unification layout, not another target to preserve for new output. Ordinary source and normally built package Batch admission now capture ax_records/completion_yaml_files_v1 over the unchanged completion_yaml_core_v1 carrier, and fresh attention/steer use typed block-YAML metadata plus opaque raw body text. The inactive numbered-stream path and saved frontmatter_v1/v2 retain their older layouts. Bounded source/compiled/actual-default accepted-path evidence exists; it does not establish default-disk, global lifetime-policy or loaded-host acceptance. Remaining rollout is tracked in [BACKLOG.md](../BACKLOG.md).
|
|
8
8
|
|
|
9
|
-
A completion group is the result sequence itself, not a container with members. Each result's YAML metadata begins index, run, state, then kind:primary for admitted primary text/final Actor response or kind:diagnostic for explicit diagnostics. The admitted Markdown follows from the left margin, outside metadata, with no #N heading, result:/preview: wrapper or whole-body literal fence. One blank separator distinguishes records. Known display loss appears only at the cut as [N characters omitted], counting Unicode scalar characters of the admitted retained source; no extra truncation ellipsis or body clipping flags/counters appear in YAML.
|
|
9
|
+
A completion group is the result sequence itself, not a container with members. Each result's YAML metadata begins index, run, state, then kind:primary for admitted primary text/final Actor response or kind:diagnostic for explicit diagnostics. The admitted Markdown follows from the left margin, outside metadata, with no #N heading, result:/preview: wrapper or whole-body literal fence. One blank separator distinguishes records. Known display loss appears only at the cut as [N characters omitted], counting Unicode scalar characters of the admitted retained source; no extra truncation ellipsis or body clipping flags/counters appear in YAML. New rooted captures keep unknown upstream completeness/privacy in header text_warnings without inventing a count or claiming a known positive loss. Retained captures preserve their original body-boundary warnings. Untracked fallback has no primary kind. Missing text stays explicit; a checkpoint retains its Actor-authored notification body. Successful automatic delivery has no extra receipt, routine outer counters, members wrapper, Batch caption, time window, status-summary copies or standing full-map instruction; real failures stay reportable. Exact source/generation/location references remain in complete model content, with whole-reference/result omission and non-done omitted states explicit. A group with one visible row stays a group. Fresh ordinary packets put minimal packet identity and relative body/marker lengths in YAML metadata, without compiler HTML tails. Older saved layouts retain their original compiler boundary/correlation framing; neither encoding grants authenticity, read permission or acceptance. Their compatibility boundary is governed separately below; never strip required historical framing. This is one new-capture contract, not a selectable AX product version.
|
|
10
10
|
|
|
11
11
|
Illustrative compact completion shape (not actual Run data):
|
|
12
12
|
|
|
@@ -31,10 +31,49 @@ Module was not found.
|
|
|
31
31
|
[120 characters omitted]
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
An only item uses the same first block, not a second format. Full text has no cut marker; an unavailable index is the YAML string "?", never a fabricated zero. The compact TUI renders compiler headers and markers as literal Text and each body as independent native Markdown, so an unfinished fence/list/quote cannot consume another block.
|
|
34
|
+
An only item uses the same first block, not a second format. Full text has no cut marker; an unavailable index is the YAML string "?", never a fabricated zero. The compact TUI renders compiler headers and markers as literal Text and each body as independent native Markdown, so an unfinished fence/list/quote cannot consume another block. New rooted headers keep navigation visible and put packet omission/inventory facts in the first header, never after the Markdown. Retained core-v1 compact views keep their original whole-reference/location hiding. Expansion or invalid/missing hints reveals the full original text. Source bodies and retained structured coverage facts are not rewritten.
|
|
35
35
|
|
|
36
36
|
Storage compatibility is separate: already-captured Batch snapshots need their original codec to reproduce exact delivery text, while steer envelopes replay their saved content directly. Do not relabel, migrate or reformat existing journals/session messages to make the interface look uniform. Retained encoding identifiers are internal replay data, not alternate AX products. See [retained capture compatibility](coordinator-delivery.md#retained-capture-compatibility).
|
|
37
37
|
|
|
38
|
+
## Rooted completion files
|
|
39
|
+
|
|
40
|
+
New source captures use a private `completion_yaml_files_v1` snapshot layout; this is replay data, not an input selector or a new product format. The YAML carrier/hint stays `completion_yaml_core_v1`. Existing snapshots keep their exact previous projection.
|
|
41
|
+
|
|
42
|
+
All runtime metadata belongs above the selected Markdown. New compact views have no service footer, appended file list or runtime warning after the body. A known cut alone adds `[N characters omitted]` at that cut; unknown loss/privacy and whole-reference omissions belong in header fields. Authored Markdown, filenames and paths keep their original language/bytes; compiler keys and purpose explanations are English.
|
|
43
|
+
|
|
44
|
+
`files.groups` stores each literal absolute path base once, with relative `entries[].path` beneath it. Source entries retain scope, generation/hash and other already-selected binding facts. `files.read_first` points to zero-based group/entry indices, preferring admitted primary text, diagnostic metadata, artifact inventory, then observed result/execution metadata; it is advice, not an automatic read. An artifact declaration does not prove that its target exists or was produced. `files.observation.group` binds existing mutable Run-file observations to their captured root; it does not add body permission or native proof.
|
|
45
|
+
|
|
46
|
+
Paths under the observed Run root share that group. External absolute paths have their own literal parent roots. Relative, malformed or dot-segment paths without a safe captured base remain as recorded under a null root with explicit base unavailability; no cwd/Run-id guess, normalization, source read or symlink resolution is allowed. A reader combines a known root and its relative path, never its own cwd. Packet-level inventory references likewise use one root plus relative leaf.
|
|
47
|
+
|
|
48
|
+
Illustrative abbreviated header, not actual Run data or a complete source binding:
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
---
|
|
52
|
+
index: 0
|
|
53
|
+
run: "review"
|
|
54
|
+
state: "done"
|
|
55
|
+
kind: "primary"
|
|
56
|
+
files:
|
|
57
|
+
read_first:
|
|
58
|
+
group: 0
|
|
59
|
+
entry: 0
|
|
60
|
+
groups:
|
|
61
|
+
- root: "/work/runs/review"
|
|
62
|
+
entries:
|
|
63
|
+
- role: "primary"
|
|
64
|
+
purpose: "Full result text"
|
|
65
|
+
path: "evidence/primary.txt"
|
|
66
|
+
- role: "artifact"
|
|
67
|
+
purpose: "Declared artifact"
|
|
68
|
+
state: "declared"
|
|
69
|
+
path: "artifacts/report.md"
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
The selected Actor Markdown ends here.
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
The unchanged 48 KiB packet budget includes every root, entry and compiler hint. Outcomes retain priority over optional Run-file rows; whole omitted rows/locations remain explicitly covered. Stored member data, file-navigation DTOs, privacy/source fences and phase recovery are unchanged.
|
|
76
|
+
|
|
38
77
|
## Purpose
|
|
39
78
|
|
|
40
79
|
AX means **Agent Experience**: convey enough structured, visible context for an agent to understand what happened and choose its next step, while remaining immediately readable to a person. The same projection should serve both rather than forcing the agent to reconstruct meaning from raw dumps or giving the human decorative prose that hides important facts.
|
|
@@ -110,6 +149,14 @@ state: running
|
|
|
110
149
|
launch_kind: spawn
|
|
111
150
|
```
|
|
112
151
|
|
|
152
|
+
### Current rollout status
|
|
153
|
+
|
|
154
|
+
Migrated owned projections emit block YAML (bare when metadata-only, one delimiter pair before a separate selected body): Control receipts, guards and the awaiting-dispatch notice; inspect refusals, compact Run/runtime/tool/Recipe success views and the explicit `tool:* view=schema` text; registry registration/listing/deletion/draft receipts and all locally authored refusals; registered-command success bodies and failure exit-status documents; the local usage/argument-repair heading; pre-launch spawn guards; runtime callback failure, completion recovery/acceptance, steer diagnostics and the shutdown teardown report; watcher and retirement notices; and fresh completion/attention captures.
|
|
155
|
+
|
|
156
|
+
Deliberately still on their earlier layout: registry activation/promotion/deletion notices and runtime startup warnings (flat report/category fields, separately scoped), Inspector UI feedback and chrome (UI text whose recognition is verified separately, not model-facing metadata), and every retained historical completion/packet encoding, which replays its exact saved bytes. Machine `details`, verbose JSON, canonical journals and literal source files are not presentation targets.
|
|
157
|
+
|
|
158
|
+
The rollout audit for this state found no second or missing host-separation blank line on a migrated model-facing path and no runtime-authored object dump or `- key:` pseudo-record left in the migrated set; the shared helpers `withLeadingLineBreak`, `formatToolText`, `compactYamlDocument` and `spaceToolError` are the single framing owners, guarded by `tests/tools-response.test.ts`. Loaded terminal/phone acceptance and any service-carrier change remain separate gates.
|
|
159
|
+
|
|
113
160
|
## Service Framing Is Not Authored Content
|
|
114
161
|
|
|
115
162
|
The target readable runtime output contains no pi-actors HTML-comment transport framing. Audit each service field against actual consumers first: remove unnecessary fresh data rather than relocating the whole existing payload. If content-carried service data is necessary, prefer its minimum in the response's block-YAML header metadata, not an HTML tail. Separately review the actual Pi storage/model/UI path and preserve the required functions; the current mechanism is not itself a requirement. This does not adopt a new kernel interface or assert that hidden `details` alone is sufficient. Prove persisted replay, model-context acceptance/recovery, full-content binding, independent header/body boundaries, fallback and fixed budgets before switching.
|
|
@@ -192,7 +239,7 @@ The [runtime output projection map](output-projection-map.md) names the audited
|
|
|
192
239
|
|
|
193
240
|
The prepared `tools-response.ts` `renderYamlMetadata` foundation uses the directly declared `yaml@2.9.0` public API for selected own-data mappings/sequences. It emits bare YAML without invocation spacing or body processing, preserves scalar types/strings and refuses unsupported or over-budget whole values. Its execution ceiling is 49,152 bytes and supported nesting is at most 64 levels; these are not caller allowances or drop-in compatibility for larger existing budgets. Preflight bounds scalar/node traversal, not atomic key enumeration or arbitrary Proxy execution. Focused parser/property and shared response-owner tests cover this foundation; compact asynchronous launch receipts are the first production caller. Other surfaces and loaded-host acceptance remain separately staged; full spawn-verbose shares the final YAML style without inheriting this bounded emitter's limits.
|
|
194
241
|
|
|
195
|
-
The following is the current pre-unification implementation inventory, not a set of alternate adopted output styles. Existing flat records, literal JSON fields, verbose JSON and retained-layout HTML compiler frames remain code facts until their owned rollout changes; the target above does not restyle or relabel stored text. This standard spans surfaces, not a new library domain. Control compact-result/public-error remains locally implemented and source/npm verified using flat records, no duplicated run namespace, stage/reuse distinctions, typed selective inspect next nodes and opaque multiline values. Launch model/thinking groups use the concise `model` and `thinking` labels and preserve their actual source/value relationship; compact launch navigation now remains one whole native YAML value or explicit whole-row omission within16KiB including invocation-response spacing. Full spawn-verbose in source and normally built packages uses the legacy once-only JSON selection followed by clone-only YAML, without a new fixed byte/depth cap. Absent selected JSON, malformed selected text or recoverable post-selection failures withhold the whole projection with an attributable no-auto-repeat warning; original selection throws and structured details remain unchanged. Source/unit and installed compiled response checks, the strict ordinary-metadata source/packed completion journey, and all three source/packed navigation owners are accepted within their bounded domains. Native assertions remain indirect proof, not current global absence. Owning Skill byte parity does not establish a loaded-host change. The older field/inspect-action primitives remain with their unmigrated consumers; compact launch serialization now uses the YAML metadata primitive. Structured/verbose results, exact dispatch/private error causes and old completion handoff text retain their contracts. Fresh ordinary source completion admission captures canonical AX with the private completion_yaml_core_v1 layout: index-first YAML, independently rendered raw Markdown and cut-local [N characters omitted]. The minimal ordinary hint binds whole content to the YAML core, whose relative lengths derive header/body/marker boundaries without fresh HTML tails. Retained completion_frontmatter_v1 hints keep their complete ranges and original compiler frames; neither hint name is a public selector. Only valid compiler headers can hide whole reference/location rows. Markers remain literal and body-authored labels never become metadata/actions. Expansion and invalid/missing hints reveal full original text. These checks establish display consistency, not authentication, source/read scope or acceptance; display line-ending/tab handling never rewrites saved content. Routine state-equivalent summaries remain in the journal, not the new model content; meaningful summaries, loss/redaction/unavailability and reference coverage remain visible. Exact source/generation/parent bindings, whole references and fresh48KiB/64row limits include hidden technical data; retained codecs keep16KiB. The postprivacy byte budget is divided equally between candidate rows: roughly48KiB for one,24KiB each for two,16KiB each for three, less encoded service overhead. Whole admitted text uses result only when it fits without known upstream clipping; otherwise preview uses the safe prefix with exact retained-source omissions. There is no fixed16KiB result/2KiB preview cap and no render-time source IO or reallocation. Already-retained packets keep their exact captured bytes; pre-record messages keep the host renderer and retained record messages keep their original verified view. The Pi boundary recognizes the strict whole YAML core for ordinary source records, or original closed markers/anchored headers for retained captures, after private details are stripped, preserving exact owned-context acceptance without interpreting authored body labels. Actual actors guidance describes this implemented fresh-capture route; this is not a claim that a loaded host was reloaded. Fresh source urgent-steer captures use typed YAML metadata and a separate raw selected body before saving immutable envelope.content: complete final-message fitting and whole reference sequences retain16KiB/eight-slot bounds. Ordinary attention remains unbounded; bounded source/compiled/actual-default acceptance does not establish loaded-host acceptance. Existing envelopes are not reinterpreted, and no older new-message default remains. Fresh ordinary notify/followup uses one AX formatter in the existing sink: the same opaque checkpoint/body and whole first-eight reference projection, without borrowing steer's shared byte cap or changing routing. Committed history keeps its exact text; the retired presentation selector is not a compatibility API. Fresh read-time agent Trace preview leaves now also use boundary U+2026, exact admitted normalized-retained-turn omissions and separately unknown upstream loss, without changing the160UTF-16 source allowance, identifiers/chronology, detail/source data or public JSON schema. Malformed text is unknown, not repaired; no journal capture aspect is minted for a derived current read. New urgent admission/send/recovery diagnostics now also use event/attention/stage AX records, opaque raw240-unit previews and unknown loss while their persisted message-only evidence stays unchanged. A failed send leaves delivery/presentation unconfirmed, and unknown/conflicting queued recovery does not force replay. Fresh non-runtime explicit inspection also uses AX records: unchanged Run/view headers, tool activation/argument sequences and Recipe registry/focused-doctor facts, whole portable source literals and one selected hint. Only the three existing closed read-only Recipe inspect literals become typed next; other advisory strings remain opaque instruction values with full next_actions retained in unchanged details/verbose JSON. Existing body/scope/budget/default-status contracts stay independent. Compact runtime status/runs/triage now also presents only its existing facts/counts as AX fields, with full owned inventory independent from bounded verbose navigation and bounded triage rows. Core callback/completion/recovery/teardown notices use opaque fields and explicit receipt/report stages without altering their source, errors, acceptance or native authority. Producer-owned watcher/retirement notices now also use AX: whole literal paths and opaque diagnostics preserve raw signature/dedup/rearm behavior, while returned stop/reported cancellation/skip/failure remain non-closure reports with exact existing optional-notifier/error observation semantics. Inspector document/detail rendering now uses flat semantic fields, real sequence lists and opaque literal terminal values, with ephemeral compiler-label provenance instead of parsing authored colon/bullet lines as metadata. Separator-preserving native-column wrapping keeps whole text/references, source values, root stripes and existing identity/chronology/navigation/source bounds. Empty containers remain typed values; terminal line-ending/tab display policy does not rewrite source. Ten locally authored inspect refusals now also use AX fields and true supported-value sequences, preserving their original guards and Error/dependency behavior. Only the two already-guided tool failures retain typed read-only next actions. New local error text shares16KiB including public spacing; variable fields/actions are whole or explicitly counted omitted without shortening targets, reading raw private lengths or wrapping unowned exceptions. Session/source/dependency errors keep their separate owners and old catches rather than being globally restyled. Inspector Kill confirmation now also uses captured run/state/action AX fields with whole-value paging, while both choices and closure: unconfirmed remain pinned at narrow/low viewports. Read-only PgUp/PgDn preserves original Cancel/choice/confirmation/generation behavior and adds no actuation or source permission. Inspector Kill cancellation only closes the dialog; successful actions use the selected Run's visible status without a second Notice. Failures/refusals/uncertainty remain visible, and notifications on other surfaces are not suppressed. Remaining Inspector feedback shows the complete selected opaque message directly in a modal popup over unchanged data rows, without i prefix/command or another reader. Esc dismisses; only physical overflow scrolls within that same popup. Kill uses the same centered rectangle compositor. Both use terminal-default backgrounds rather than a theme fill, two-column left content insets and top/bottom blank spacing, plus the Inspector's shared frame/key/description color grammar. On space-constrained heights, safety/choices/readable text take priority over decorative blanks. They keep the captured underlay stable through resize/invalidation and resume ordinary refresh on close, without fresh evidence/native authority. Action-port feedback pins closure uncertainty/no automatic retry without inferring native effects from message text. Fresh Kill producers now use a shared pure selected-value AX formatter: domain180-unit normalization/trim and overlay160-unit normalization/slice remain, while a cut pair retracts one unit and malformed selected text is unknown/unavailable. Dynamic legacy values state upstream completeness/privacy unproven, with unknown local clipping markers rather than private-tail counts; compiler refusals add no fake loss. ok/callback/getter/coercion/error semantics and old success suppression stay unchanged, and the popup's anchored header recognition affects color only. This does not recover discarded Markdown/causes or create a saved capture version. Trace table rows now mark actual column/line gaps with native ellipsis while preserving full selected item/detail, and compact warning captions keep incomplete-history/non-lifetime/unavailable-rank meaning visible at narrow widths. This is UI preview loss only, not new source/private character counts, rank/identity changes or a generic selector/fit rewrite. Four locally authored Control pre-dispatch guards now also use caller target/action/result and actual supported/available-action sequences: whole target/list groups fit16KiB including public spacing or carry field/entry omission counts, while malformed selected text is unavailable without repair. Original guard/getter/join/coercion observations, plain Error/host-error behavior and all unowned/dispatch exceptions stay separate; no input/status/correlation/retry/no-effects or new dispatch authority follows. Three local spawn pre-launch guards now use field/result and opaque selected caller value rather than inventing an admitted Run: unsupported state_dir, missing run: namespace and invalid id. Whole valid-scalar values fit16KiB or are omitted; malformed selections are unavailable, without repair or source/private-tail counts. Original input/method/coercion/launch behavior stays separate. The real host still rejects unsupported state_dir through its own unchanged schema before the facade, so this does not claim all SDK validation errors are AX. Namespace/id guard errors retain real host isError behavior. Successful normal registration/update-or-persisted receipts now use original tool/outcome/source/callable facts, actual required/optional argument and warning lists, a whole fenced non-template source and one prior hint. Invocation advice stays opaque instruction; only the producer-known unverified tool-status hint is typed next. Complete safety warnings have first budget priority; all variable fields/groups/actions fit16KiB including public spacing or show whole selected-field/entry omission, with malformed selections unavailable without repair. Original post-effect warning/argument/coercion/boundary observations and all transaction/details/notify/error behavior remain. This is not new callability, host activation, rollback or invocation authority. Registry current-name listing and deletion returns now also use AX: original sorted/captured names are a whole selected group with shown/omitted/total coverage, never a new page/work quota or active/callable/global registry claim. Overlarge groups are wholly omitted and malformed groups unavailable without raw-key re-coercion or repair. Deletion keeps original selected tool/result and the exact operator reload note as opaque instruction; current-map not found stays a returned result, not a new error or orphan-file cleanup. Lookup/file/deactivation/notify/errors/details remain unchanged, including post-effect failures. Draft promotion success now also uses only its prior selected name/new-update/source=draft/exact callable display/first hint as AX. It does not inherit ordinary-registration args/warnings/boundary facts or change its admission/rollback policy. Original template String conversions remain after notify, including zero/object/Symbol behavior and post-effect failures. Whole scalars/actions fit16KiB or are explicitly omitted/unavailable; only the closed producer-known read-only status hint is typed, and invocation advice is opaque. Machine details/bytes and later activation observations remain unchanged. Four local registration source-mode errors now use only compiler-owned field/result records and actual replacement/reference-form/source-mode/inherited-field sequences, with previous correction advice as opaque instruction. No supplied source values, new helper/wrapper or changed guard/descriptor/getter/trim order. The host still owns cloning, coercion and schema validation: rejected extra/object fields need not reach these AX guards, while numeric input may normalize and preserve a non-error unnamed list result. This is not new schema, no-effects or automatic retry authority. Three ordinary name/source refusals now also use AX: invalid normalized name without raw caller echo, reserved selected-name value whole or explicitly omitted/unavailable, and missing source only for a new registration with actual source choices/opaque prior advice. Original normalization/reserved-set/resolution/lookup/blocker/fault order stays unchanged; empty-name listing, existing-tool update with retained source and dependency blocker text are not reinterpreted. SDK clone/coercion/schema remains separate. Ordinary and draft duplicate-registration refusals now show their original selected name whole/omitted/unavailable plus the original update advice as opaque instruction; distinct authoritative-file/Map/exists/blocker/update predicates and original single display coercion stay unchanged. No overwrite/retry, body-read or no-effects authority follows. Template-shape helper errors now also use fixed template/result records for nested Recipe objects, empty sequences and unsupported types, with actual supported-kind lists/opaque old correction and no supplied value echo. Getter/Array/reference/key/expand semantics and external errors stay exact; null/undefined/deletion/retained-source behavior and SDK coercion remain separate. Authored-Recipe non-object defaults, missing command description, null-at-authoring and missing-final-template constants now also use fixed field/result, without new value echoes or changes to args/from/description/default/retained-source order. Front deletion, inheritance and Schema/dependency errors keep separate ownership. The delegated runtime-owned-default-key refusal now shows only its original first selected key, defaults/result and opaque old correction. Full copy/find order, eight-name membership and the delegated-only condition remain; no all-key/value disclosure, early rejection optimization or new retry authority. Two draft-path refusals now show only their old captured allowed root or resolved path as complete dynamically fenced literals, or explicit whole-reference omission/unavailability under16KiB. Refused caller path stays undisplayed in root refusal; existing containment/exists/getter/error behavior and opaque prior advice are unchanged, not new absence/native proof. Public from-normalization refusal now also uses only its old displayed source/reason/legacy summary/doctor advice as AX, preserving inner errors, catch/coercion/method order and source/hint disagreement. Source is a whole literal; reason/summary preserve opaque Markdown, and advice is instruction content. Monotone whole-field omission/unavailability fits16KiB without parsing old summary text, adding causes/counts or widening source/catch authority. Normal candidate-admission refusal now also projects only its old source-conditional displayed source/joined diagnostics/legacy summary/advice, preserving branch/coercion/join and pre-Error order. Existing4096-unit upstream admission diagnostic clipping is not widened or repaired; selected summary fields are whole/omitted/unavailable under16KiB, with fitting diagnostics first. This adds no admission policy, full diagnostics/source proof or rollback/readiness authority. Draft raw/candidate invalid-Recipe errors now likewise expose only old optional reason/joined diagnostics with fixed draft/result, preserving separate read/diagnose, truthiness/coercion, Error-before-join and legacy diagnostic bounds. No new path/body, cause, reader, policy or retry follows; whole opaque values fit16KiB or are explicitly omitted/unavailable. Outer registration transaction errors now also project only old post-cleanup stage/resolution-generation/legacy summary/error, preserving cleanup and fallible template order exactly. Resolution generation is not a Run epoch; fitting surfaced error has budget priority and opaque inner rollback/advice text is not a new guarantee. No replay, extra cause/source read or changed transaction policy follows. Registry activation/promotion/deletion notices now also use report/tool AX fields for only old compiler report identity/name, preserving callback order/info type/faults and real hasUI gate. Report wording is not callable/full-host-removal proof. UI text stays literal with native wrapping; no borrowed model16KiB cap, whole well-formed values retained and malformed selected name unavailable. RPC delivery remains fire-and-forget, and loaded UI acceptance stays separate. Recipe registry watcher warning/refresh messages now also use report and opaque instruction constants only, preserving their distinct direct ctx.ui.notify calls (no added hasUI gate), failure dedup/pending-load/callback fault order and old default-root report rather than new verified metadata. Runtime startup warnings now also preserve true category sequences/singletons and whole opaque selected entries through the existing shared field primitive. Original suppression/classification/map/push/join/coercion precedes new projection from compiler-known slots, not parsed authored labels. Trailing LF/no UI cap remain; malformed selected warning is unavailable and old doctor advice is opaque instruction. Native Inspector Run controls retain their selection grammar rather than forced Markdown: producer-specific column gaps now carry ellipses, and complete selected_run_id context uses existing Recipe/Control literal documents, separately from authored fields. Generic fit/composition, source reads, keys and action targets remain unchanged; loaded colored-terminal/phone acceptance stays gated. Other errors/notifications/public owners remain separately scoped, with live client acceptance independent. Reuse the cohesive owner of each projection:
|
|
242
|
+
The following is the current pre-unification implementation inventory, not a set of alternate adopted output styles. Existing flat records, literal JSON fields, verbose JSON and retained-layout HTML compiler frames remain code facts until their owned rollout changes; the target above does not restyle or relabel stored text. This standard spans surfaces, not a new library domain. Control compact-result/public-error is now bare block-YAML metadata with native option sequences, whole selected values or explicit omission records under the existing16KiB cap, no duplicated run namespace, stage/reuse distinctions, typed selective inspect next nodes and opaque advice scalars; verbose JSON remains the machine path. Launch model/thinking groups use the concise `model` and `thinking` labels and preserve their actual source/value relationship; compact launch navigation now remains one whole native YAML value or explicit whole-row omission within16KiB including invocation-response spacing. Full spawn-verbose in source and normally built packages uses the legacy once-only JSON selection followed by clone-only YAML, without a new fixed byte/depth cap. Absent selected JSON, malformed selected text or recoverable post-selection failures withhold the whole projection with an attributable no-auto-repeat warning; original selection throws and structured details remain unchanged. Source/unit and installed compiled response checks, the strict ordinary-metadata source/packed completion journey, and all three source/packed navigation owners are accepted within their bounded domains. Native assertions remain indirect proof, not current global absence. Owning Skill byte parity does not establish a loaded-host change. The older field/inspect-action primitives remain with their unmigrated consumers; compact launch serialization now uses the YAML metadata primitive. Structured/verbose results, exact dispatch/private error causes and old completion handoff text retain their contracts. Fresh ordinary source completion admission captures canonical AX with the private completion_yaml_core_v1 layout: index-first YAML, independently rendered raw Markdown and cut-local [N characters omitted]. The minimal ordinary hint binds whole content to the YAML core, whose relative lengths derive header/body/marker boundaries without fresh HTML tails. Retained completion_frontmatter_v1 hints keep their complete ranges and original compiler frames; neither hint name is a public selector. Only valid compiler headers can hide whole reference/location rows. Markers remain literal and body-authored labels never become metadata/actions. Expansion and invalid/missing hints reveal full original text. These checks establish display consistency, not authentication, source/read scope or acceptance; display line-ending/tab handling never rewrites saved content. Routine state-equivalent summaries remain in the journal, not the new model content; meaningful summaries, loss/redaction/unavailability and reference coverage remain visible. Exact source/generation/parent bindings, whole references and fresh48KiB/64row limits include hidden technical data; retained codecs keep16KiB. The postprivacy byte budget is divided equally between candidate rows: roughly48KiB for one,24KiB each for two,16KiB each for three, less encoded service overhead. Whole admitted text uses result only when it fits without known upstream clipping; otherwise preview uses the safe prefix with exact retained-source omissions. There is no fixed16KiB result/2KiB preview cap and no render-time source IO or reallocation. Already-retained packets keep their exact captured bytes; pre-record messages keep the host renderer and retained record messages keep their original verified view. The Pi boundary recognizes the strict whole YAML core for ordinary source records, or original closed markers/anchored headers for retained captures, after private details are stripped, preserving exact owned-context acceptance without interpreting authored body labels. Actual actors guidance describes this implemented fresh-capture route; this is not a claim that a loaded host was reloaded. Fresh source urgent-steer captures use typed YAML metadata and a separate raw selected body before saving immutable envelope.content: complete final-message fitting and whole reference sequences retain16KiB/eight-slot bounds. Ordinary attention remains unbounded; bounded source/compiled/actual-default acceptance does not establish loaded-host acceptance. Existing envelopes are not reinterpreted, and no older new-message default remains. Fresh ordinary notify/followup uses one AX formatter in the existing sink: the same opaque checkpoint/body and whole first-eight reference projection, without borrowing steer's shared byte cap or changing routing. Committed history keeps its exact text; the retired presentation selector is not a compatibility API. Fresh read-time agent Trace preview leaves now also use boundary U+2026, exact admitted normalized-retained-turn omissions and separately unknown upstream loss, without changing the160UTF-16 source allowance, identifiers/chronology, detail/source data or public JSON schema. Malformed text is unknown, not repaired; no journal capture aspect is minted for a derived current read. New urgent admission/send/recovery diagnostics now also use event/attention/stage AX records, opaque raw240-unit previews and unknown loss while their persisted message-only evidence stays unchanged. A failed send leaves delivery/presentation unconfirmed, and unknown/conflicting queued recovery does not force replay. Fresh non-runtime explicit inspection also uses bare block-YAML metadata: unchanged Run/view headers, tool activation/argument sequences and Recipe registry/focused-doctor facts, whole selected source/identity/advice scalars or explicit whole-field omission, native counts/flags and one typed read-only hint or opaque `next.instruction`. The explicit `tool:* view=schema` text is generated definition metadata in the same bare YAML form with native parameter nodes when renderable; unsupported/over-ceiling schemas retain the exact legacy JSON fallback. Compact argument sequences are whole or explicitly omitted/unavailable. Verbose views bypass compact formatting and machine details keep their JSON contracts. Only the three existing closed read-only Recipe inspect literals become typed next; other advisory strings remain opaque instruction values with full next_actions retained in unchanged details/verbose JSON. Existing body/scope/budget/default-status contracts stay independent. Compact runtime status/runs/triage now also presents only its existing facts/counts as AX fields, with full owned inventory independent from bounded verbose navigation and bounded triage rows. Fresh locally owned runtime notices (callback failure, completion recovery/acceptance, steer admission/delivery/recovery diagnostics and the shutdown teardown report) are now bare block-YAML metadata with explicit receipt/report stages and native counters. UI-only notices keep complete well-formed selected fields without borrowing the model byte/depth ceilings; malformed selected text is explicitly unavailable. Existing steer preview bounds, source/errors, acceptance and native authority are unchanged. Producer-owned watcher/retirement notices now also use uncapped bare block-YAML metadata: whole selected literal paths and opaque diagnostics preserve raw signature/dedup/rearm behavior, while returned stop/reported cancellation/skip/failure remain non-closure reports with exact existing optional-notifier/error observation semantics. Inspector document/detail rendering now uses flat semantic fields, real sequence lists and opaque literal terminal values, with ephemeral compiler-label provenance instead of parsing authored colon/bullet lines as metadata. Separator-preserving native-column wrapping keeps whole text/references, source values, root stripes and existing identity/chronology/navigation/source bounds. Empty containers remain typed values; terminal line-ending/tab display policy does not rewrite source. Ten locally authored inspect refusals now render bare block-YAML metadata with true supported-value sequences, field-local whole-field coverage records and one typed read-only next, preserving their original guards and Error/dependency behavior. Only the two already-guided tool failures retain typed read-only next actions. New local error text shares16KiB including public spacing; variable fields/actions are whole or explicitly counted omitted without shortening targets, reading raw private lengths or wrapping unowned exceptions. Session/source/dependency errors keep their separate owners and old catches rather than being globally restyled. Inspector Kill confirmation now also uses captured run/state/action AX fields with whole-value paging, while both choices and closure: unconfirmed remain pinned at narrow/low viewports. Read-only PgUp/PgDn preserves original Cancel/choice/confirmation/generation behavior and adds no actuation or source permission. Inspector Kill cancellation only closes the dialog; successful actions use the selected Run's visible status without a second Notice. Failures/refusals/uncertainty remain visible, and notifications on other surfaces are not suppressed. Remaining Inspector feedback shows the complete selected opaque message directly in a modal popup over unchanged data rows, without i prefix/command or another reader. Esc dismisses; only physical overflow scrolls within that same popup. Kill uses the same centered rectangle compositor. Both use terminal-default backgrounds rather than a theme fill, two-column left content insets and top/bottom blank spacing, plus the Inspector's shared frame/key/description color grammar. On space-constrained heights, safety/choices/readable text take priority over decorative blanks. They keep the captured underlay stable through resize/invalidation and resume ordinary refresh on close, without fresh evidence/native authority. Action-port feedback pins closure uncertainty/no automatic retry without inferring native effects from message text. Fresh Kill producers now use a shared pure selected-value AX formatter: domain180-unit normalization/trim and overlay160-unit normalization/slice remain, while a cut pair retracts one unit and malformed selected text is unknown/unavailable. Dynamic legacy values state upstream completeness/privacy unproven, with unknown local clipping markers rather than private-tail counts; compiler refusals add no fake loss. ok/callback/getter/coercion/error semantics and old success suppression stay unchanged, and the popup's anchored header recognition affects color only. This does not recover discarded Markdown/causes or create a saved capture version. Trace table rows now mark actual column/line gaps with native ellipsis while preserving full selected item/detail, and compact warning captions keep incomplete-history/non-lifetime/unavailable-rank meaning visible at narrow widths. This is UI preview loss only, not new source/private character counts, rank/identity changes or a generic selector/fit rewrite. Four locally authored Control pre-dispatch guards now also use caller target/action/result and actual supported/available-action sequences: whole target/list groups fit16KiB including public spacing or carry field/entry omission counts, while malformed selected text is unavailable without repair. Original guard/getter/join/coercion observations, plain Error/host-error behavior and all unowned/dispatch exceptions stay separate; no input/status/correlation/retry/no-effects or new dispatch authority follows. Synchronous registered-command failures now present compiler-owned exit_code/killed metadata as bare block YAML, followed by a delimited header before the unchanged selected stderr/stdout bodies (or metadata-only when no stream text was selected); trim/tail selection, truncation notices, temp-file publication and exact executor failures are unchanged. The pre-dispatch argument-repair error now likewise puts owned tool/required/optional facts in a closed YAML header and keeps the original validation prose plus the verbatim JSON invocation example as unparsed body text, and local spawn pre-launch guards use bare block YAML with one whole selected value or an explicit omission record. Three local spawn pre-launch guards present field/result and a whole or explicitly omitted selected caller value as bare block YAML rather than inventing an admitted Run: unsupported state_dir, missing run: namespace and invalid id. Whole valid-scalar values fit16KiB or are omitted; malformed selections are unavailable, without repair or source/private-tail counts. Original input/method/coercion/launch behavior stays separate. The real host still rejects unsupported state_dir through its own unchanged schema before the facade, so this does not claim all SDK validation errors are AX. Namespace/id guard errors retain real host isError behavior. Successful normal registration/update-or-persisted receipts now use original tool/outcome/source/callable facts, actual required/optional argument and warning lists, a whole fenced non-template source and one prior hint. Invocation advice stays opaque instruction; only the producer-known unverified tool-status hint is typed next. Complete safety warnings have first budget priority; all variable fields/groups/actions fit16KiB including public spacing or show whole selected-field/entry omission, with malformed selections unavailable without repair. Original post-effect warning/argument/coercion/boundary observations and all transaction/details/notify/error behavior remain. This is not new callability, host activation, rollback or invocation authority. Registry current-name listing and deletion returns now also use AX: original sorted/captured names are a whole selected group with shown/omitted/total coverage, never a new page/work quota or active/callable/global registry claim. Overlarge groups are wholly omitted and malformed groups unavailable without raw-key re-coercion or repair. Deletion keeps original selected tool/result and the exact operator reload note as opaque instruction; current-map not found stays a returned result, not a new error or orphan-file cleanup. Lookup/file/deactivation/notify/errors/details remain unchanged, including post-effect failures. Draft promotion success now also uses only its prior selected name/new-update/source=draft/exact callable display/first hint as AX. It does not inherit ordinary-registration args/warnings/boundary facts or change its admission/rollback policy. Original template String conversions remain after notify, including zero/object/Symbol behavior and post-effect failures. Whole scalars/actions fit16KiB or are explicitly omitted/unavailable; only the closed producer-known read-only status hint is typed, and invocation advice is opaque. Machine details/bytes and later activation observations remain unchanged. Locally authored registry mode/name/source/template/draft/transaction refusals now render as bare block-YAML metadata documents with compiler-literal fields, native choice sequences, and each opaque selected value whole or explicitly omitted under the unchanged16KiB cap; authored text stays scalar content with escaped line breaks rather than becoming keys or actions. Registry activation/promotion/deletion notice text remains flat report/tool fields, outside this refusal migration. No supplied source values, new helper/wrapper or changed guard/descriptor/getter/trim order. The host still owns cloning, coercion and schema validation: rejected extra/object fields need not reach these AX guards, while numeric input may normalize and preserve a non-error unnamed list result. This is not new schema, no-effects or automatic retry authority. Three ordinary name/source refusals now also use AX: invalid normalized name without raw caller echo, reserved selected-name value whole or explicitly omitted/unavailable, and missing source only for a new registration with actual source choices/opaque prior advice. Original normalization/reserved-set/resolution/lookup/blocker/fault order stays unchanged; empty-name listing, existing-tool update with retained source and dependency blocker text are not reinterpreted. SDK clone/coercion/schema remains separate. Ordinary and draft duplicate-registration refusals now show their original selected name whole/omitted/unavailable plus the original update advice as opaque instruction; distinct authoritative-file/Map/exists/blocker/update predicates and original single display coercion stay unchanged. No overwrite/retry, body-read or no-effects authority follows. Template-shape helper errors now also use fixed template/result records for nested Recipe objects, empty sequences and unsupported types, with actual supported-kind lists/opaque old correction and no supplied value echo. Getter/Array/reference/key/expand semantics and external errors stay exact; null/undefined/deletion/retained-source behavior and SDK coercion remain separate. Authored-Recipe non-object defaults, missing command description, null-at-authoring and missing-final-template constants now also use fixed field/result, without new value echoes or changes to args/from/description/default/retained-source order. Front deletion, inheritance and Schema/dependency errors keep separate ownership. The delegated runtime-owned-default-key refusal now shows only its original first selected key, defaults/result and opaque old correction. Full copy/find order, eight-name membership and the delegated-only condition remain; no all-key/value disclosure, early rejection optimization or new retry authority. Two draft-path refusals now show only their old captured allowed root or resolved path as complete dynamically fenced literals, or explicit whole-reference omission/unavailability under16KiB. Refused caller path stays undisplayed in root refusal; existing containment/exists/getter/error behavior and opaque prior advice are unchanged, not new absence/native proof. Public from-normalization refusal now also uses only its old displayed source/reason/legacy summary/doctor advice as AX, preserving inner errors, catch/coercion/method order and source/hint disagreement. Source is a whole literal; reason/summary preserve opaque Markdown, and advice is instruction content. Monotone whole-field omission/unavailability fits16KiB without parsing old summary text, adding causes/counts or widening source/catch authority. Normal candidate-admission refusal now also projects only its old source-conditional displayed source/joined diagnostics/legacy summary/advice, preserving branch/coercion/join and pre-Error order. Existing4096-unit upstream admission diagnostic clipping is not widened or repaired; selected summary fields are whole/omitted/unavailable under16KiB, with fitting diagnostics first. This adds no admission policy, full diagnostics/source proof or rollback/readiness authority. Draft raw/candidate invalid-Recipe errors now likewise expose only old optional reason/joined diagnostics with fixed draft/result, preserving separate read/diagnose, truthiness/coercion, Error-before-join and legacy diagnostic bounds. No new path/body, cause, reader, policy or retry follows; whole opaque values fit16KiB or are explicitly omitted/unavailable. Outer registration transaction errors now also project only old post-cleanup stage/resolution-generation/legacy summary/error, preserving cleanup and fallible template order exactly. Resolution generation is not a Run epoch; fitting surfaced error has budget priority and opaque inner rollback/advice text is not a new guarantee. No replay, extra cause/source read or changed transaction policy follows. Registry activation/promotion/deletion notices now also use report/tool AX fields for only old compiler report identity/name, preserving callback order/info type/faults and real hasUI gate. Report wording is not callable/full-host-removal proof. UI text stays literal with native wrapping; no borrowed model16KiB cap, whole well-formed values retained and malformed selected name unavailable. RPC delivery remains fire-and-forget, and loaded UI acceptance stays separate. Recipe registry watcher warning/refresh messages now also use report and opaque instruction constants only, preserving their distinct direct ctx.ui.notify calls (no added hasUI gate), failure dedup/pending-load/callback fault order and old default-root report rather than new verified metadata. Runtime startup warnings now also preserve true category sequences/singletons and whole opaque selected entries through the existing shared field primitive. Original suppression/classification/map/push/join/coercion precedes new projection from compiler-known slots, not parsed authored labels. Trailing LF/no UI cap remain; malformed selected warning is unavailable and old doctor advice is opaque instruction. Native Inspector Run controls retain their selection grammar rather than forced Markdown: producer-specific column gaps now carry ellipses, and complete selected_run_id context uses existing Recipe/Control literal documents, separately from authored fields. Generic fit/composition, source reads, keys and action targets remain unchanged; loaded colored-terminal/phone acceptance stays gated. Other errors/notifications/public owners remain separately scoped, with live client acceptance independent. Reuse the cohesive owner of each projection:
|
|
196
243
|
|
|
197
244
|
- `tools-message.ts`: Control receipts, refusals and conservative public error text.
|
|
198
245
|
- `tools-response.ts`, `tools-spawn.ts`, `tools-local.ts`: shared response primitives and launch/runtime-tool presentation.
|
|
@@ -113,7 +113,7 @@ Phases are monotonic:
|
|
|
113
113
|
|
|
114
114
|
Every journal mutation uses the canonical token-owned lock, expected-phase fencing, owner and generation validation, and atomic replacement. Repeated transitions are idempotent. Corrupt, oversized, foreign-owner, or stale-generation state fails closed with bounded diagnostics.
|
|
115
115
|
|
|
116
|
-
Ordinary source completion admission has one fresh path: presentation_format=ax_records, private result_layout=
|
|
116
|
+
Ordinary source completion admission has one fresh path: presentation_format=ax_records, private result_layout=completion_yaml_files_v1 and frozen text_budget, without excerpt_format or a public selector. The inactive numbered-stream kernel path keeps its separate frontmatter_v2 default. Bounded source/compiled and actual-default source/packed acceptance observes the normal index path and in-memory entry/context/provider/hint tuple. Unchanged storage/registered-renderer/accepted-history-reopen facts transfer only on the successful original-current-manager path; this is neither fresh default-disk observation nor global lifetime-policy, native-scope or loaded-host acceptance. Direct admission and ordinary run-ui-runtime use it after unchanged owner/location checks; an existing batch stays untouched. Each shown record begins YAML frontmatter with index, run, state, then kind:primary for admitted primary/final Actor response or kind:diagnostic for explicit error/failure excerpts. Untracked fallback has no kind and retains unknown completeness/privacy outside YAML. The closed header is followed by raw, unindented Markdown, with no #N heading, result:/preview: wrapper or compiler literal fence around the body. Known local loss is [N characters omitted] at the cut, not a YAML flag/count or extra ellipsis; N counts the admitted postprivacy source prefix loss, not private/native output. Unknown upstream loss remains separate. Original coverage remains structured member data; exact source/generation/location references remain whole typed nested YAML values. Routine summaries/windows/status copies/standing map instructions remain journal facts, not duplicated model content. Material omitted_results, non-done omitted_states and whole result_inventory recovery stay explicit. Each shown record has a whole run_files row or explicit omission, with unavailable reasons retained; omitted records do not leave orphan location rows. Outcomes precede lower-priority references under the total48KiB UTF-8/64candidate-row bound including framing. Prefix admission considers full-list and decimal-count discontinuities, freezes equal scalar/CRLF-safe shares without unused-share redistribution, and never clips references or rewrites a retained excerpt. Older captures retain their original16KiB/48KiB budgets.
|
|
117
117
|
|
|
118
118
|
Fresh ordinary source hints carry the core format and whole-content digest; the validated YAML core carries only packet identity and relative body/marker lengths, from which boundaries are derived. It adds no fresh HTML tail or duplicate coordinate table. These are consistency facts, not source or acceptance authority.
|
|
119
119
|
|
|
@@ -131,7 +131,7 @@ Removing fresh collection of untracked bodies would leave affected old/intermedi
|
|
|
131
131
|
|
|
132
132
|
### Retained capture compatibility
|
|
133
133
|
|
|
134
|
-
The numbered wire strings ax_records_v1/v2/v3, old indexed/single_result captures and result_layout records/run_headers/headings/headings_flat_omissions/headings_outcomes/headings_shared_results/headings_shared_kinds/frontmatter_v1/frontmatter_v2 are retained storage encodings, not public alternatives. Fresh ordinary source admission chooses own-data
|
|
134
|
+
The numbered wire strings ax_records_v1/v2/v3, old indexed/single_result captures and result_layout records/run_headers/headings/headings_flat_omissions/headings_outcomes/headings_shared_results/headings_shared_kinds/frontmatter_v1/frontmatter_v2 are retained storage encodings, not public alternatives. Fresh ordinary source admission chooses own-data completion_yaml_files_v1 with canonical ax_records and text_budget (over the unchanged completion_yaml_core_v1 carrier); earlier completion_yaml_core_v1 snapshots retain their old layout, never single_result. Absence preserves its original indexed/singleton codec; inherited aspects never restyle data and accessors are refused without invocation. Earlier record/header/count/kind grammar and each captured16KiB/48KiB share remain exact. The first frontmatter draft retains its original bytes and hints, including unquoted unknown index ?. Retained v2 fixed that one YAML case by writing index: "?"; numeric indices and other fields/body bytes are unchanged, and the presentation-hint schema remains completion_frontmatter_v1 because its block structure is unchanged. Preserve the frozen v1 unknown-content fingerprint90e29fb36087e2620fe0cf150b4238bce8a6d1dcc68ee922a1cf71ee8604610e and prior shared-result fingerprint4428de318b8ebaa029d3588ab7e8e705b9a80fa5cf08b6a2cc7151916207e266. Journals store snapshots rather than complete text: neither an unreleased product, a YAML correction nor member count permits relabeling/migration. Pending/queued/presented replay must reproduce original model bytes and hints without operator journal scans, source refresh or message rewrites. Removing compatibility requires a separate history-lifetime decision.
|
|
135
135
|
|
|
136
136
|
Steer envelopes already store complete content. Both attention and steer now have one canonical new-message formatter with no presentation selector; the redundant legacy formatting branches/path/body helpers are removed where no retained-data consumer needs them. Existing steer identity is reused before formatting and saved content bypasses the formatter in every pending/queued/presented recovery path. Removing stored Batch codecs later requires a separate retention/data-lifetime decision; an unreleased product is not permission to change previously captured delivery bytes.
|
|
137
137
|
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Inactive Foundations Inventory
|
|
2
|
+
|
|
3
|
+
Status: evidence inventory for a future removal decision. **Nothing is removed or activated by this document.** Its job is to separate reviewed runtime dependencies from packaged foundations that no default path currently drives, so a later cleanup is decided by wiring, consumers and guards rather than by filename or a disabled default.
|
|
4
|
+
|
|
5
|
+
Canonical open work and gates live in [BACKLOG.md](../BACKLOG.md); this file records the reachability/package facts those gates depend on.
|
|
6
|
+
|
|
7
|
+
## Method
|
|
8
|
+
|
|
9
|
+
- **Entry and wiring:** read `index.ts` (the packaged artifact entry) and `lib/extension-runtime.ts` to see which ports an ordinary `createActorExtensionRuntime(pi)` call supplies.
|
|
10
|
+
- **Static reachability:** parse every `./x.ts` import (static and dynamic) across `index.ts` and `lib/`, then walk from the entry.
|
|
11
|
+
- **Packaging:** compare against the real npm manifest with `npm pack --dry-run --json`.
|
|
12
|
+
- **Parity:** `npm run build:check` proves `dist/` matches source; the packed/installed test family replays the compiled tree.
|
|
13
|
+
- **CI references:** `.github/workflows/*` shows which non-packaged sources a research workflow still builds.
|
|
14
|
+
|
|
15
|
+
Repeatable reachability check (same result as recorded below):
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
node -e '
|
|
19
|
+
const fs=require("node:fs"),path=require("node:path");
|
|
20
|
+
const files=["index.ts",...fs.readdirSync("lib").filter(f=>f.endsWith(".ts")).map(f=>"lib/"+f)];
|
|
21
|
+
const g=new Map();
|
|
22
|
+
for(const f of files){const t=fs.readFileSync(f,"utf8"),d=new Set();
|
|
23
|
+
for(const m of t.matchAll(/(?:from|import\()\s*"(\.[^"]+\.ts)"/gu))d.add(path.normalize(path.join(path.dirname(f),m[1])));
|
|
24
|
+
g.set(f,[...d]);}
|
|
25
|
+
const seen=new Set(),stack=["index.ts"];
|
|
26
|
+
while(stack.length){const c=stack.pop();if(seen.has(c))continue;seen.add(c);for(const d of g.get(c)??[])stack.push(d);}
|
|
27
|
+
const lib=files.filter(f=>f.startsWith("lib/"));
|
|
28
|
+
console.log("entry-reachable:",lib.filter(f=>seen.has(f)).length+"/"+lib.length);
|
|
29
|
+
console.log("unreachable:",lib.filter(f=>!seen.has(f)).map(f=>f.slice(4)).join(" ")||"(none)");
|
|
30
|
+
'
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Current measurements
|
|
34
|
+
|
|
35
|
+
| Fact | Value |
|
|
36
|
+
| --- | --- |
|
|
37
|
+
| `lib/` TypeScript modules | 87 |
|
|
38
|
+
| Reachable from `index.ts` | 85 |
|
|
39
|
+
| Entry-unreachable but packaged | `runs-process-windows-mi.ts`, `preflight-diagnostics.ts` |
|
|
40
|
+
| npm tarball (0.56.1 candidate) | 452 files |
|
|
41
|
+
| `dist/` parity | `build:check` current |
|
|
42
|
+
|
|
43
|
+
## Reviewed runtime dependencies (must not be treated as dead)
|
|
44
|
+
|
|
45
|
+
| Owner | Why it is a real dependency |
|
|
46
|
+
| --- | --- |
|
|
47
|
+
| Most `lib/` modules | Reachable from `index.ts` through the extension runtime, tools, delivery or Inspector wiring. |
|
|
48
|
+
| `preflight-diagnostics.ts` | Entry-unreachable yet packaged **and used** by the packaged `scripts/async-runner.mjs` via dynamic import; the preflight path is a supported script surface, not a leftover. |
|
|
49
|
+
| `run-delivery.ts` `ax_records` / `completion_yaml_core_v1` paths | The active fresh completion capture; only the *numbered stream* part of this owner is inactive. |
|
|
50
|
+
|
|
51
|
+
## Packaged foundations with no default driver
|
|
52
|
+
|
|
53
|
+
| Foundation | Owner(s) | Consumer today | Default wiring | Interleaved guard | Activation gate |
|
|
54
|
+
| --- | --- | --- | --- | --- | --- |
|
|
55
|
+
| Independent supervision / owner-loss authority | `run-supervision.ts`, `runs-supervision.ts` | `extension-runtime.ts` only when optional `supervisionPorts` are supplied; `index.ts` supplies none, so `getRunAdmissionObserver` returns `undefined` and no owner is constructed | Off | Optional-dependency contract; controller ports require an unadopted original-clock/native-scope carrier | A/B/C then `D1` (BACKLOG §4) |
|
|
56
|
+
| Public completion streams / session-wide numbering | `run-delivery.ts` stream section, `run-ui-runtime.ts` admission hooks | Optional `completionStreamSessionAdmission` / `captureCompletionBatch`; no production provider. Kernel-only capture additionally requires an existing valid stream journal | Off | Missing/corrupt stream state stays unavailable rather than starting at zero; packet-local indices remain authoritative for saved bytes | `S1.1`–`S1.4` (BACKLOG §3) |
|
|
57
|
+
| Native launch ledger | `runs-native-launches.ts` | Called by `runs-control/results/start/retention`, but only through the private `readPendingCommandSpawnAdmission()` claim inside `withRunWorkAdmission`; ordinary launches never populate it | Inert | `assertNoRetainedNativeLaunchScope` fences start/retention against stale native scope; a recorded native admission is single-claim | `C1`/`C2`/`D1` |
|
|
58
|
+
| Native Windows MI reader | `runs-process-windows-mi.ts` | **No production importer**: the shipped fresh-process reader is inline PowerShell in `runs-process.ts` with the corrected UTF-8 decoding | Inert | Kept separate from the released reader so a prototype cannot silently replace it; unsupported UTC admission stays refused | `N1.2p`, `N1.3`, `N1.6` (BACKLOG §7) |
|
|
59
|
+
| Native helper source | `native/windows-mi/windows-mi.cpp` | Only `.github/workflows/windows-native-observation.yml` (research build); **not in the npm manifest** | Not shipped | Container is research-only; manifest-bound provenance/asset decision is unadopted | `N1.3`, `N1.5` |
|
|
60
|
+
| Evidence/context export roles beyond the selected subset | `runs-context-exports.ts`, `runs-execution-evidence.ts`, `runs-session-exports.ts`, `run-evidence-policy.ts` | Reachable, but only the selected reference/role subsets publish; broader retention/selection predicates stay gated | Partial | Producer/privacy/identity fences and explicit unavailability instead of fabricated bodies | `A3.1`/`A3.2`/`A3.3` |
|
|
61
|
+
| MPRIS playback surface | none (no `lib/` module) | — | Absent | Music playback stays behind the existing `music-player` singleton Control surface | `M1.1`–`M1.4` (BACKLOG §5) |
|
|
62
|
+
| Portable composition bundles / CodeMode | none (no `lib/` module) | — | Absent | Recorded as design intake only; host CodeMode calls existing tools | `T1.1`–`T1.3` (BACKLOG §6) |
|
|
63
|
+
|
|
64
|
+
## Consequences for a removal decision
|
|
65
|
+
|
|
66
|
+
- A file being default-off is not evidence of dead code: supervision, stream numbering and the native ledger all sit behind optional ports or private admissions that are exercised by tests.
|
|
67
|
+
- Removing any row above would also remove a **guard** (unavailable-not-zero, stale native scope refusal, single-claim admission) that the active paths rely on for their refusals.
|
|
68
|
+
- The only rows with no runtime consumer at all are the native MI reader, the native helper source, MPRIS and the composition transport; each already carries its own backward gate, so removal stays a separate, explicitly justified decision.
|
|
69
|
+
- `preflight-diagnostics.ts` must never be classified by entry reachability alone.
|
|
70
|
+
|
|
71
|
+
## Open decision
|
|
72
|
+
|
|
73
|
+
No removal is authorized here. A later cleanup should pick concrete rows, restate which gate replaces their guard, and re-run the reachability, `build:check` and packed/installed evidence for its own tree.
|