agentfootprint-lens 0.69.0 → 0.70.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.
package/README.md CHANGED
@@ -1128,12 +1128,54 @@ grain, and how many values have no known clock.
1128
1128
  no band, never an empty one. A row prints no field it does not carry.
1129
1129
  - **Never infer.** Nothing here compares two instants. `wider than asked`
1130
1130
  renders only on a row that carries `differs`; a drift only on a call row
1131
- that carries `drift`; `clock unknown` only where the record says `unknown`.
1131
+ that carries `drift`; `clock unknown` only where the record says `unknown`;
1132
+ a result check only where the `period` row carries it; `settled by the
1133
+ person` only where a `time-answer` row of the turn names the mention.
1132
1134
  - **No sentence of its own.** Every printed string is a value off the record
1133
1135
  or a `TIME_LABELS` entry; the one sentence it shows — an ask's refusal
1134
1136
  reason — is the library's, printed as data.
1135
1137
 
1136
- Headless: `foldTimeRows(ledger, coverage?)`, `timeAskOf(pause)`,
1138
+ ### One tab: `<TimeView>` (agentfootprint 9.132.0)
1139
+
1140
+ ```tsx
1141
+ import { TimeView } from 'agentfootprint-lens'; // also on 'agentfootprint-lens/context'
1142
+
1143
+ <TimeView
1144
+ rows={agent.findings()} // the ledger: time rows + period rows
1145
+ coverage={state.coverageDeclared} // optional — each call's declared period
1146
+ ask={pause} // optional — a paused ask with a time field
1147
+ assessment={await agent.assessment()} // optional — the library's standing
1148
+ />
1149
+ ```
1150
+
1151
+ It draws, in one view: the **time reasons** the library filed on the answer
1152
+ (`period-differs-from-asked`, `period-beyond-retention`, `period-not-held`,
1153
+ `period-partly-held`, `period-unknown`, `period-undeclared`,
1154
+ `derived-from-reading`, and `argument-assumed` when its witness is a period
1155
+ argument), each with a plain line and the calls it names; the **time ask**;
1156
+ and the **band**. Since 9.132.0 the band also shows the person's **answer**
1157
+ to a reading (`settled by the person` · `confirmed` / `edited` · the window
1158
+ they settled — the reading's own `open` choice is still printed as filed),
1159
+ the values the library **derived from a reading**, each call's **source
1160
+ clock** zone, and the `period` row's result checks — **differs from asked**
1161
+ (against, the range compared, what was read, `missing`, `extra`), `shifted`
1162
+ by how much, and beyond retention.
1163
+
1164
+ **The law: never compute a reason.** The standing section lists a reason
1165
+ only when the assessment you pass names it; the ledger is read only to
1166
+ resolve the library's own witness pointers to the calls they name. A period
1167
+ row that carries `differs` with no assessment passed shows the check in the
1168
+ band and no reason above it:
1169
+
1170
+ ```ts
1171
+ timeStandingOf(undefined, ledger); // undefined — nothing filed, nothing listed
1172
+ timeStandingOf(await agent.assessment(), ledger);
1173
+ // { standing: 'not-sure', reasons: [{ reason: 'period-differs-from-asked',
1174
+ // calls: [{ toolCallId: 'c1', toolName: 'client_activity' }] }, …] }
1175
+ ```
1176
+
1177
+ Headless: `foldTimeRows(ledger, coverage?)`, `answerOfReading(turn, reading)`,
1178
+ `timeStandingOf(assessment, ledger?)`, `timeAskOf(pause)`,
1137
1179
  `datasetTimeAxisOf(meta, rows?)`.
1138
1180
 
1139
1181
  ## The Served tab