agentfootprint 9.135.0 → 9.136.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/esm/hosting/standingAgent.js +68 -39
  2. package/dist/esm/hosting/standingAgent.js.map +1 -1
  3. package/dist/esm/hosting/types.d.ts +17 -11
  4. package/dist/esm/hosting/types.js.map +1 -1
  5. package/dist/esm/lib/context-bisect/localize.d.ts +8 -1
  6. package/dist/esm/lib/context-bisect/localize.js +29 -6
  7. package/dist/esm/lib/context-bisect/localize.js.map +1 -1
  8. package/dist/esm/lib/context-bisect/loop-recall.js +3 -2
  9. package/dist/esm/lib/context-bisect/loop-recall.js.map +1 -1
  10. package/dist/esm/lib/context-bisect/sliceToBacktrackTrace.js +12 -9
  11. package/dist/esm/lib/context-bisect/sliceToBacktrackTrace.js.map +1 -1
  12. package/dist/esm/lib/context-bisect/trajectory.d.ts +11 -1
  13. package/dist/esm/lib/context-bisect/trajectory.js +34 -19
  14. package/dist/esm/lib/context-bisect/trajectory.js.map +1 -1
  15. package/dist/esm/lib/context-bisect/types.d.ts +9 -1
  16. package/dist/esm/lib/context-bisect/types.js.map +1 -1
  17. package/dist/esm/lib/context-bisect/variable-recall.js +0 -0
  18. package/dist/esm/lib/context-bisect/variable-recall.js.map +1 -1
  19. package/dist/esm/lib/context-ledger/contextLedger.d.ts +6 -0
  20. package/dist/esm/lib/context-ledger/contextLedger.js +45 -14
  21. package/dist/esm/lib/context-ledger/contextLedger.js.map +1 -1
  22. package/dist/esm/lib/context-ledger/types.d.ts +10 -0
  23. package/dist/esm/lib/trace-toolpack/traceToolpack.js +70 -35
  24. package/dist/esm/lib/trace-toolpack/traceToolpack.js.map +1 -1
  25. package/dist/hosting/standingAgent.js +68 -39
  26. package/dist/hosting/standingAgent.js.map +1 -1
  27. package/dist/hosting/types.js.map +1 -1
  28. package/dist/lib/context-bisect/localize.js +28 -5
  29. package/dist/lib/context-bisect/localize.js.map +1 -1
  30. package/dist/lib/context-bisect/loop-recall.js +3 -2
  31. package/dist/lib/context-bisect/loop-recall.js.map +1 -1
  32. package/dist/lib/context-bisect/sliceToBacktrackTrace.js +12 -9
  33. package/dist/lib/context-bisect/sliceToBacktrackTrace.js.map +1 -1
  34. package/dist/lib/context-bisect/trajectory.js +33 -18
  35. package/dist/lib/context-bisect/trajectory.js.map +1 -1
  36. package/dist/lib/context-bisect/types.js.map +1 -1
  37. package/dist/lib/context-bisect/variable-recall.js +0 -0
  38. package/dist/lib/context-bisect/variable-recall.js.map +1 -1
  39. package/dist/lib/context-ledger/contextLedger.js +44 -13
  40. package/dist/lib/context-ledger/contextLedger.js.map +1 -1
  41. package/dist/lib/trace-toolpack/traceToolpack.js +69 -34
  42. package/dist/lib/trace-toolpack/traceToolpack.js.map +1 -1
  43. package/dist/types/hosting/standingAgent.d.ts.map +1 -1
  44. package/dist/types/hosting/types.d.ts +17 -11
  45. package/dist/types/hosting/types.d.ts.map +1 -1
  46. package/dist/types/lib/context-bisect/localize.d.ts +8 -1
  47. package/dist/types/lib/context-bisect/localize.d.ts.map +1 -1
  48. package/dist/types/lib/context-bisect/loop-recall.d.ts.map +1 -1
  49. package/dist/types/lib/context-bisect/sliceToBacktrackTrace.d.ts.map +1 -1
  50. package/dist/types/lib/context-bisect/trajectory.d.ts +11 -1
  51. package/dist/types/lib/context-bisect/trajectory.d.ts.map +1 -1
  52. package/dist/types/lib/context-bisect/types.d.ts +9 -1
  53. package/dist/types/lib/context-bisect/types.d.ts.map +1 -1
  54. package/dist/types/lib/context-bisect/variable-recall.d.ts.map +1 -1
  55. package/dist/types/lib/context-ledger/contextLedger.d.ts +6 -0
  56. package/dist/types/lib/context-ledger/contextLedger.d.ts.map +1 -1
  57. package/dist/types/lib/context-ledger/types.d.ts +10 -0
  58. package/dist/types/lib/context-ledger/types.d.ts.map +1 -1
  59. package/dist/types/lib/trace-toolpack/traceToolpack.d.ts.map +1 -1
  60. package/package.json +3 -3
@@ -30,8 +30,14 @@
30
30
  * The slot→slice join needs NO id conventions: for each slot key
31
31
  * (INJECTION_KEYS.*), `findLastWriter` names the commit that fed the final
32
32
  * LLM call; membership of that writer in the answer slice IS the signal.
33
+ *
34
+ * Every read goes through footprintjs's BASIS twins (`commitValueAtWithBasis`,
35
+ * `findLastWriterWithBasis`): an answer that rests on nested rows, the
36
+ * pre-run state, a redaction or a delete says so on `RecordedRun.basis`
37
+ * (per key, absent when every answer was exact) instead of being counted as
38
+ * if it were exact.
33
39
  */
34
- import { commitValueAt, findLastWriter, flattenCausalDAG, keysReadFromExecutionTree, sliceForKey, } from 'footprintjs/trace';
40
+ import { commitValueAtWithBasis, findLastWriterWithBasis, flattenCausalDAG, keysReadFromExecutionTree, sliceForKey, } from 'footprintjs/trace';
35
41
  import { INJECTION_KEYS } from '../../conventions.js';
36
42
  // The flat/grouped fork, from its ONE owner (9.88.0). This file used to carry a
37
43
  // private copy and `context-bisect/trajectory.ts` carried its byte-twin; two
@@ -106,6 +112,22 @@ export function contextLedger() {
106
112
  runsRecorded += 1;
107
113
  const runRef = `run-${runsRecorded}`;
108
114
  const offeredKeys = new Set();
115
+ // The reason codes behind every non-exact answer read below, per key.
116
+ const basisByKey = new Map();
117
+ const noteBasis = (key, codes) => {
118
+ if (codes.length === 0)
119
+ return;
120
+ let seen = basisByKey.get(key);
121
+ if (!seen)
122
+ basisByKey.set(key, (seen = new Set()));
123
+ for (const code of codes)
124
+ seen.add(code);
125
+ };
126
+ const valueAt = (bundles, initialState, idx, key) => {
127
+ const { value, basis } = commitValueAtWithBasis(bundles, idx, key, { initialState });
128
+ noteBasis(key, basis);
129
+ return value;
130
+ };
109
131
  const offer = (kind, id, tokens) => {
110
132
  const row = rowOf(kind, id);
111
133
  row.offered += 1;
@@ -126,18 +148,18 @@ export function contextLedger() {
126
148
  // log — the same projection context-bisect's grouped trajectory uses.
127
149
  const staticTools = staticToolNamesOf(source);
128
150
  let callMarkers = 0;
129
- const foldOffersFrom = (bundles) => {
151
+ const foldOffersFrom = (bundles, initialState) => {
130
152
  let injections = [];
131
153
  let schemas = [];
132
154
  for (let i = 0; i < bundles.length; i++) {
133
155
  const paths = new Set(bundles[i].trace.map((t) => t.path));
134
156
  if (paths.has('activeInjections')) {
135
- const v = commitValueAt(bundles, i, 'activeInjections');
157
+ const v = valueAt(bundles, initialState, i, 'activeInjections');
136
158
  if (Array.isArray(v))
137
159
  injections = v;
138
160
  }
139
161
  if (paths.has('dynamicToolSchemas')) {
140
- const v = commitValueAt(bundles, i, 'dynamicToolSchemas');
162
+ const v = valueAt(bundles, initialState, i, 'dynamicToolSchemas');
141
163
  if (Array.isArray(v))
142
164
  schemas = v;
143
165
  }
@@ -170,13 +192,13 @@ export function contextLedger() {
170
192
  const mountKeys = llmCallMountKeys(snapshot?.subflowResults);
171
193
  if (mountKeys.length > 0) {
172
194
  for (const key of mountKeys) {
173
- const inner = snapshot?.subflowResults?.[key]?.treeContext?.history;
174
- if (Array.isArray(inner))
175
- foldOffersFrom(inner);
195
+ const tree = snapshot?.subflowResults?.[key]?.treeContext;
196
+ if (Array.isArray(tree?.history))
197
+ foldOffersFrom(tree.history, tree.initialState);
176
198
  }
177
199
  }
178
200
  else {
179
- foldOffersFrom(log);
201
+ foldOffersFrom(log, snapshot?.initialState);
180
202
  }
181
203
  // A run with NO call markers anywhere is a shape this ledger cannot
182
204
  // meter (e.g. the LLMCall runner, which never writes totalInputTokens)
@@ -187,7 +209,8 @@ export function contextLedger() {
187
209
  }
188
210
  // ── USES: tool calls (assistant messages in the final history) ───────
189
211
  const lastIdx = log.length - 1;
190
- const history = commitValueAt(log, lastIdx, 'history');
212
+ const runBase = snapshot?.initialState;
213
+ const history = valueAt(log, runBase, lastIdx, 'history');
191
214
  if (Array.isArray(history)) {
192
215
  for (const msg of history) {
193
216
  if (msg?.role !== 'assistant' || !Array.isArray(msg.toolCalls))
@@ -199,7 +222,7 @@ export function contextLedger() {
199
222
  }
200
223
  }
201
224
  // ── USES: skill activations ──────────────────────────────────────────
202
- const activated = commitValueAt(log, lastIdx, 'activatedInjectionIds');
225
+ const activated = valueAt(log, runBase, lastIdx, 'activatedInjectionIds');
203
226
  if (Array.isArray(activated)) {
204
227
  for (const id of activated) {
205
228
  if (typeof id === 'string' && id.length > 0)
@@ -218,15 +241,16 @@ export function contextLedger() {
218
241
  if (slice.root) {
219
242
  sliceAvailable = true;
220
243
  const memberIds = new Set(flattenCausalDAG(slice.root).map((n) => n.runtimeStageId));
221
- const finalInjections = commitValueAt(log, lastIdx, 'activeInjections');
244
+ const finalInjections = valueAt(log, runBase, lastIdx, 'activeInjections');
222
245
  const finalBySlotKey = new Map();
223
246
  // Which slot carried each injection is projected per-slot into the
224
247
  // INJECTION_KEYS records — fold each slot key's final value.
225
248
  for (const slotKey of Object.values(INJECTION_KEYS)) {
226
- const writer = findLastWriter(log, slotKey);
249
+ const { writer, basis } = findLastWriterWithBasis(log, slotKey);
250
+ noteBasis(slotKey, basis);
227
251
  if (!writer || !memberIds.has(writer.runtimeStageId))
228
252
  continue;
229
- const slotRecords = commitValueAt(log, lastIdx, slotKey);
253
+ const slotRecords = valueAt(log, runBase, lastIdx, slotKey);
230
254
  if (Array.isArray(slotRecords))
231
255
  finalBySlotKey.set(slotKey, slotRecords);
232
256
  }
@@ -258,7 +282,14 @@ export function contextLedger() {
258
282
  }
259
283
  runOffers.set(runRef, offeredKeys);
260
284
  lastRunRef = runRef;
261
- return { runRef, offeredPieces: [...offeredKeys], sliceAvailable };
285
+ return {
286
+ runRef,
287
+ offeredPieces: [...offeredKeys],
288
+ sliceAvailable,
289
+ ...(basisByKey.size > 0 && {
290
+ basis: Object.fromEntries([...basisByKey].map(([key, codes]) => [key, [...codes]])),
291
+ }),
292
+ };
262
293
  }
263
294
  function recordOutcome(label, runRef) {
264
295
  const ref = runRef ?? lastRunRef;
@@ -1 +1 @@
1
- {"version":3,"file":"contextLedger.js","sourceRoot":"","sources":["../../../../src/lib/context-ledger/contextLedger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contextLedger.js","sourceRoot":"","sources":["../../../../src/lib/context-ledger/contextLedger.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@
24
24
  * ablation (context-bisect) can upgrade individual claims when you pay
25
25
  * for it.
26
26
  */
27
+ import type { ValueBasis } from 'footprintjs/trace';
27
28
  /** What kind of context piece a row tracks. Skills are injections with
28
29
  * flavor 'skill' — split out because their `used` signal differs. */
29
30
  export type PieceKind = 'injection' | 'skill' | 'tool';
@@ -70,6 +71,15 @@ export interface RecordedRun {
70
71
  readonly offeredPieces: readonly string[];
71
72
  /** True when the answer slice could be computed (finalContent + reads). */
72
73
  readonly sliceAvailable: boolean;
74
+ /**
75
+ * The reason codes behind any NON-exact answer the ledger counted from, per
76
+ * state key — the union of footprintjs's `commitValueAtWithBasis` /
77
+ * `findLastWriterWithBasis` `basis` over every read of that key in this run
78
+ * (`'nested-rows'`, `'from-initial-state'`, `'redacted'`, `'deleted'`,
79
+ * `'never-written'`). Each code's sentence is `HONESTY_CODES[code]` on
80
+ * `footprintjs/trace`. ABSENT when every answer was exact.
81
+ */
82
+ readonly basis?: Readonly<Record<string, readonly ValueBasis[]>>;
73
83
  }
74
84
  /** JSON-safe persisted shape (consumer owns storage). */
75
85
  export interface LedgerJSON {
@@ -33,7 +33,7 @@
33
33
  * the execution tree, and recorder events. The LLM drills like a debugger:
34
34
  * overview → slice → node → value, paying only for what it opens.
35
35
  */
36
- import { causalChain, commitValueAt, findLastWriter, formatCausalChain } from 'footprintjs/trace';
36
+ import { causalChain, commitValueAt, commitValueAtWithBasis, findLastWriter, findLastWriterWithBasis, formatCausalChain, HONESTY_CODES, } from 'footprintjs/trace';
37
37
  import { arrayProvenance, elementProvenance, formatSlice, sliceForKey } from 'footprintjs/trace';
38
38
  import { formatToolArgIssues, validateToolArgs } from '../../core/agent/toolArgsValidation.js';
39
39
  import { defineTool } from '../../core/tools.js';
@@ -187,6 +187,8 @@ function buildIndex(artifacts) {
187
187
  hasReadTracking,
188
188
  errorSteps,
189
189
  untrackedStepCount,
190
+ initialState: artifacts.snapshot.initialState,
191
+ explained: new Set(),
190
192
  };
191
193
  }
192
194
  // ── Shared message helpers ─────────────────────────────────────────────────
@@ -217,6 +219,23 @@ function redactionNote(bundles, path) {
217
219
  const redacted = (bundles ?? []).some((b) => b.redactedPaths.includes(path));
218
220
  return redacted ? ' (redacted by policy)' : '';
219
221
  }
222
+ /**
223
+ * A footprintjs reason code as the toolpack prints it. The FIRST time a code appears in this
224
+ * toolpack instance it is `⚠ <code>: <sentence>` — the sentence is footprintjs's own
225
+ * (`HONESTY_CODES` on `footprintjs/trace`), this pack keeps no copy — and every later time the
226
+ * bare `⚠ <code>`: the sentence is already in the model's context, and repeating it on every
227
+ * answer is pure token cost.
228
+ */
229
+ function honestyLine(index, code) {
230
+ if (index.explained.has(code))
231
+ return `⚠ ${code}`;
232
+ index.explained.add(code);
233
+ return `⚠ ${code}: ${HONESTY_CODES[code]}`;
234
+ }
235
+ /** One `honestyLine` per distinct code, each on its own line after `\n`; '' when exact. */
236
+ function basisLines(index, codes) {
237
+ return [...new Set(codes)].map((code) => `\n${honestyLine(index, code)}`).join('');
238
+ }
220
239
  /** Union of untracked sources across a step's bundles. */
221
240
  function untrackedSourcesOf(bundles) {
222
241
  const set = new Set();
@@ -1175,12 +1194,15 @@ function buildTraceNode(artifacts, index, opts) {
1175
1194
  lines.push(`read (${reads.length}): ${shownReads}${reads.length > NODE_READ_CAP ? ', … (output capped)' : ''}`);
1176
1195
  }
1177
1196
  const parentLines = [];
1197
+ const parentCodes = [];
1178
1198
  const anchorIdx = anchorIdxFor(runtimeStageId, index);
1179
1199
  for (const key of reads.slice(0, NODE_READ_CAP)) {
1180
- const writer = findLastWriter(index.commitLog, key, anchorIdx);
1200
+ const { writer, basis } = findLastWriterWithBasis(index.commitLog, key, anchorIdx);
1181
1201
  parentLines.push(writer
1182
- ? `- data: ${displayKey(key)} ← ${writer.runtimeStageId} "${writer.stage}"`
1183
- : `- data: ${displayKey(key)} ← (no tracked writer — run input/env/pre-run state ⚠)`);
1202
+ ? `- data: ${displayKey(key)} ← ${writer.runtimeStageId} "${writer.stage}"` +
1203
+ (basis.length > 0 ? ` ⚠ ${basis.join(', ')}` : '')
1204
+ : `- data: ${displayKey(key)} ← (no tracked writer ⚠ ${basis.join(', ')})`);
1205
+ parentCodes.push(...basis);
1184
1206
  }
1185
1207
  const controlDep = artifacts.controlDeps?.(runtimeStageId);
1186
1208
  if (controlDep) {
@@ -1190,14 +1212,16 @@ function buildTraceNode(artifacts, index, opts) {
1190
1212
  if (parentLines.length > 0) {
1191
1213
  lines.push('parents:');
1192
1214
  lines.push(...parentLines);
1215
+ for (const code of new Set(parentCodes))
1216
+ lines.push(honestyLine(index, code));
1193
1217
  }
1194
1218
  if (!artifacts.controlDeps) {
1195
1219
  lines.push('⚠ control-dependence lookup not provided — the decision that routed here is unknown.');
1196
1220
  }
1197
1221
  const untracked = untrackedSourcesOf(bundles);
1198
1222
  if (untracked.length > 0) {
1199
- lines.push(`⚠ this step also consumed ${untracked.join('/')} — those inputs are NOT in the parents ` +
1200
- `list; the slice through this step may be incomplete.`);
1223
+ lines.push(`⚠ this step also consumed ${untracked.join('/')} — NOT in the parents list. ` +
1224
+ honestyLine(index, 'incomplete-sources'));
1201
1225
  }
1202
1226
  // The tool boundary, named honestly: the agent chart's tool-execution
1203
1227
  // stage runs CONSUMER code (DB calls, services). The trace records the
@@ -1381,16 +1405,14 @@ function buildBacktrack(artifacts, index, opts) {
1381
1405
  const prov = arrayProvenance(index.commitLog, key, {
1382
1406
  ...(before !== undefined && { atIdx: before - 1 }),
1383
1407
  });
1384
- if (prov.missing === 'never-written') {
1385
- return (`'${displayKey(key)}' was never written in range — it may come from run input ` +
1386
- '(args), env, pre-run state, or a closure; the commit log cannot see those.');
1387
- }
1388
1408
  if (prov.missing === 'not-an-array') {
1389
- return (`'${displayKey(key)}' is not an array at that point (scalar, deleted, or degraded) — ` +
1390
- `element attribution does not apply. Call backtrack without 'element' to slice it.`);
1409
+ return (`'${displayKey(key)}': ${honestyLine(index, 'not-an-array')}` +
1410
+ basisLines(index, prov.basis ?? []) +
1411
+ `\nCall backtrack without 'element' to slice it.`);
1412
+ }
1413
+ if (prov.missing !== undefined) {
1414
+ return `'${displayKey(key)}': ${honestyLine(index, prov.missing)}`;
1391
1415
  }
1392
- if (prov.missing === 'empty-log')
1393
- return 'the commit log is empty — nothing executed.';
1394
1416
  return (`element ${element} is out of range for '${displayKey(key)}' ` +
1395
1417
  `(length ${prov.length}). Valid indices: 0..${(prov.length ?? 1) - 1}.`);
1396
1418
  }
@@ -1398,7 +1420,9 @@ function buildBacktrack(artifacts, index, opts) {
1398
1420
  `born at ${birth.runtimeStageId} ("${birth.stageName}", verb: ${birth.verb}, ` +
1399
1421
  `attribution: ${birth.basis}${birth.basis === 'append-verb' ? ' — engine-recorded, exact' : ''}). ` +
1400
1422
  `Drill the producer with trace_node('${birth.runtimeStageId}'), or ask why it wrote this ` +
1401
- `with backtrack({variable: '${displayKey(key)}', before: ${birth.commitIdx + 1}}).`);
1423
+ `with backtrack({variable: '${displayKey(key)}', before: ${birth.commitIdx + 1}}).` +
1424
+ // Only an INFERRED birth says why; an exact one keeps its bytes.
1425
+ (birth.basis === 'prefix-inference' ? basisLines(index, [birth.basis]) : ''));
1402
1426
  }
1403
1427
  // ── slice mode: variable-first backward slice ────────────────────────
1404
1428
  const depth = clampParam(maxDepth, opts.sliceMaxDepth, 1, TOOLPACK_HARD_CAPS.sliceMaxDepth);
@@ -1454,22 +1478,26 @@ function buildWhoWrote(index, opts) {
1454
1478
  }
1455
1479
  beforeIdx = anchorIdxFor(beforeStageId, index);
1456
1480
  }
1457
- const writer = findLastWriter(index.commitLog, path, beforeIdx);
1481
+ const { writer, basis } = findLastWriterWithBasis(index.commitLog, path, beforeIdx);
1458
1482
  if (!writer) {
1459
1483
  return (`no tracked write to '${displayKey(path)}'` +
1460
1484
  (beforeStageId !== undefined ? ` before ${beforeStageId}` : '') +
1461
- ` in the commit log. ⚠ the value may come from run input (args), env, pre-run state, ` +
1462
- `or a closure — those never enter the commit log.` +
1463
- (index.knownPaths.has(path) ? '' : unknownKeySuffix(index)));
1485
+ ` in the commit log.` +
1486
+ (index.knownPaths.has(path) ? '' : unknownKeySuffix(index)) +
1487
+ basisLines(index, basis));
1464
1488
  }
1465
1489
  const writerIdx = index.commitLog.indexOf(writer);
1466
1490
  const verb = writer.trace.find((entry) => entry.path === path)?.verb ?? 'set';
1467
- const preview = boundedPreview(commitValueAt(index.commitLog, writerIdx, path), opts.previewChars);
1491
+ const read = commitValueAtWithBasis(index.commitLog, writerIdx, path, {
1492
+ initialState: index.initialState,
1493
+ });
1494
+ const preview = boundedPreview(read.value, opts.previewChars);
1468
1495
  const untracked = untrackedSourcesOf([writer]);
1469
1496
  return (`'${displayKey(path)}' was last written by ${writer.runtimeStageId} — "${writer.stage}" ` +
1470
1497
  `(verb: ${verb}): ${displayText(renderPreview(preview, `get_value('${writer.runtimeStageId}', '${displayKey(path)}') for full`))}${redactionNote([writer], path)}` +
1498
+ basisLines(index, [...basis, ...read.basis]) +
1471
1499
  (untracked.length > 0
1472
- ? `\n⚠ that step also consumed ${untracked.join('/')} — its inputs may not be fully traceable.`
1500
+ ? `\n⚠ that step also consumed ${untracked.join('/')}. ${honestyLine(index, 'incomplete-sources')}`
1473
1501
  : ''));
1474
1502
  },
1475
1503
  });
@@ -1503,28 +1531,35 @@ function buildGetValue(index, opts) {
1503
1531
  const cap = clampParam(maxChars, opts.valueMaxChars, 50, TOOLPACK_HARD_CAPS.valueMaxChars);
1504
1532
  const lastIdx = index.lastIdxOf.get(runtimeStageId);
1505
1533
  const atIdx = lastIdx !== undefined ? lastIdx : anchorIdxFor(runtimeStageId, index) - 1;
1506
- if (!index.knownPaths.has(path)) {
1507
- return (`no tracked write to '${displayKey(path)}' anywhere in the commit log. ⚠ run input ` +
1508
- `(args), env, pre-run state, and closure-carried values never enter the commit log.` +
1509
- unknownKeySuffix(index));
1510
- }
1511
- const value = atIdx >= 0 ? commitValueAt(index.commitLog, atIdx, path) : undefined;
1534
+ // Nested rows count (footprintjs 9.33.0): a key written only through paths inside it —
1535
+ // a subflow seed, a merge-back — is written, though no row names it exactly.
1536
+ const lastWrite = findLastWriterWithBasis(index.commitLog, path);
1537
+ if (!lastWrite.writer) {
1538
+ return (`no tracked write to '${displayKey(path)}' anywhere in the commit log.` +
1539
+ (index.knownPaths.has(path) ? '' : unknownKeySuffix(index)) +
1540
+ basisLines(index, lastWrite.basis));
1541
+ }
1542
+ const read = atIdx >= 0
1543
+ ? commitValueAtWithBasis(index.commitLog, atIdx, path, {
1544
+ initialState: index.initialState,
1545
+ })
1546
+ : undefined;
1547
+ const value = read?.value;
1512
1548
  if (value === undefined) {
1513
- const firstWriter = findLastWriter(index.commitLog, path);
1514
- return (`'${displayKey(path)}' has no value as of ${runtimeStageId} — it was ` +
1515
- (firstWriter !== undefined
1516
- ? `written later (last writer over the whole run: ${firstWriter.runtimeStageId}), or deleted by then.`
1517
- : 'never written.') +
1518
- ` ⚠ pre-run seeded values never enter the commit log.`);
1549
+ return (`'${displayKey(path)}' has no value as of ${runtimeStageId}` +
1550
+ ` (last writer over the whole run: ${lastWrite.writer.runtimeStageId}).` +
1551
+ basisLines(index, read?.basis ?? ['never-written']));
1519
1552
  }
1520
1553
  const serialized = displayText(safeStringify(value));
1521
1554
  const redacted = redactionNote(index.bundlesOf.get(runtimeStageId), path);
1522
1555
  const header = `VALUE of '${displayKey(path)}' as of ${runtimeStageId}${redacted}:`;
1556
+ const basis = basisLines(index, read?.basis ?? []);
1523
1557
  if (serialized.length <= cap)
1524
- return `${header}\n${serialized}`;
1558
+ return `${header}\n${serialized}${basis}`;
1525
1559
  return (`${header}\n${serialized.slice(0, cap)}\n` +
1526
1560
  `⚠ truncated: served ${cap} of ${serialized.length} chars — raise maxChars ` +
1527
- `(hard cap ${TOOLPACK_HARD_CAPS.valueMaxChars}) or fetch a narrower nested key.`);
1561
+ `(hard cap ${TOOLPACK_HARD_CAPS.valueMaxChars}) or fetch a narrower nested key.` +
1562
+ basis);
1528
1563
  },
1529
1564
  });
1530
1565
  }