Skip to content

EPIC: the NAR ledger — compute Net Attention Returned from traces, not estimates #563

Description

@ssdavidai

Design epic, 2026-08-13. Implements the measurement behind Attentionmaxxing
so the monthly Attention Statement is computed from traces rather than
estimated in a prompt. Nothing here is committed work.

The number

NAR = accepted work displaced
      − prompting − review − correction − repair − AI-caused interruption

Measured monthly, in hours, against a baseline agreed up front. Only accepted
work counts. Every supervision minute subtracts. Rejected work scores zero and
still pays its supervision cost.

The thesis sets its own evidentiary standard — "trace-based estimates, hours
inferred from work signals, not a controlled experiment"
— and is explicit that
receipts only count if you can argue with them. That is the bar this builds to.

What already exists — measured on the dev tenant, 2026-08-13

Term Signal State
AI-caused interruption alfred_journal outbound by source_kind exists: 1,422 HA replies, 18 voice-call, 10 cron, 1 system, 33 null
Review time_to_decision_ms on decisions field exists, populated on 42 of 500 (8%)
Prompting Hermes main session store — messages(session_id, role, timestamp) trace exists, nothing computes it
Correction reversed_at on decisions 0 of 500 — never used
Repair nothing
Accepted work displaced 1,566 decisions; commitments; hours approvals no duration estimate anywhere

Decision intents over a 500-row sample: noise 307, done 80, defer 42,
delegate 33, take_mine 1, unset 37.

The missing atom

Nothing records what a displaced piece of work was worth. We can count 33
delegations; we cannot say what they would have cost the principal. Every other
term subtracts from an unknown.

One record, written close to the action: Alfred did X · it would plausibly
have cost the principal ~N minutes · the principal accepted or rejected it ·
here is the provenance. Everything else in the formula subtracts from that.

How it gets computed — the nightly recap

Sir's design, and it is better than a monthly reconstruction: a nightly job
reads the day's sessions and formalises what actually happened.

From one pass over the Hermes main session store plus the day's Desk activity
it can derive both halves:

  • the counterfactual — what this task would have cost done by hand
  • the real cost — start-to-finish wall clock through prompting, from message
    timestamps, and whether the thing actually completed

Doing it nightly rather than monthly matters: the sessions are still fresh, the
outcome is knowable, and a monthly reconstruction is exactly the "story" the
essay attacks.

Precedent for the read: #556's cron-journal reconciler already opens the Hermes
session store read-only from ctrl-api. Same posture — we do not own that
schema, we never write to it, and a missing column degrades rather than crashes.

Suppression — counted, but not by estimate

Sir's ruling: suppression does count. Filtering costs cognitive load and
preventing work is worth something. But it must not go soft.

So it is not estimated by the model. Suppression earns a fixed, stated,
conservative per-item rate
, published on the statement as its own line rather
than blended into displaced work.

The arithmetic shows why. 307 suppressed items at a defensible 30 seconds each
is ~2.5 hours. The same 307 with a model guessing "about five minutes" is ~25
hours — a quarter of the monthly claim, invented. A fixed low rate cannot
inflate, is arguable in one sentence, and survives the sceptical question.

Interruption — solicited turns are excluded

1,422 HA conversation replies are the largest line in the journal and every
one is a reply to a turn the principal started
. Counting them would swamp the
term and flatter the number.

Only unsolicited outbound counts: cron deliveries, proactive notifications,
anything Alfred initiated. On the dev tenant today that is roughly 10–40 items,
which is small and honest. The solicited/unsolicited split has to be explicit in
the data, not inferred at report time.

What counts as accepted

Two paths, per Sir:

  1. Explicit — done or delegated through the Desk; a commitment reaching
    accepted; an approved hours proposal. Unambiguous, already recorded.
  2. Inferred — the nightly recap concludes from the session that a task was
    carried out and completed. Weaker evidence, and it must be labelled as
    inferred
    on the statement, never merged with the explicit kind.

Rejected work scores zero displacement and still contributes its review and
correction minutes to the subtraction. That asymmetry is the point.

Storage

Per the four-store contract (CLAUDE.md §5.1):

  • Per-action NAR entriesalfred-state.db. Machine working memory; the
    principal never edits a row. Needs a migration, therefore phase0.
  • The monthly Attention Statement → a vault record. The principal reads it,
    argues with it, and signs it.

The signing pattern already exists and should be reused verbatim: #468's
hours-reconstruction produces an auditable per-period proposal and never
accepts hours automatically, at any confidence
. The statement is the same
shape — Alfred proposes, Sir signs, nothing is claimed unilaterally.

Non-negotiables

  • A defensible small number beats an impressive one. This is shown to
    someone deciding whether to keep paying. One inflated month costs more trust
    than a year of conservative ones earns.
  • No baseline, no claim. If step 2's baseline was not captured, the
    statement says so rather than comparing against an assumption.
  • Every line traceable to its evidence — which session, which decision,
    which commitment. A number you cannot drill into is marketing.
  • Estimated and inferred lines are labelled as such, always.

Open questions

  1. Where do counterfactual estimates come from? A model estimating "this
    would have taken 25 minutes" is the softest part of the whole scheme. Options:
    a per-task-class rate card agreed with the principal at onboarding; a model
    estimate the principal can correct, with corrections training the rate card;
    or model estimates shown but excluded from the headline until calibrated.
  2. Repair has no signal at all. Either define one or drop the term and say
    so on the statement.
  3. Correction is theoretically covered but unusedreversed_at is zero
    across 500 decisions. Is that because corrections are rare, or because the
    reversal path is not reachable from where mistakes are noticed?

Sequencing

# Work Lane
1 Populate time_to_decision_ms reliably — the one term that is 92% missing from an existing field I
2 Solicited/unsolicited flag on journal outbound I
3 NAR entry table + migration phase0
4 Nightly recap workflow reading the session store read-only II
5 Suppression rate card + fixed-rate line II
6 Monthly Attention Statement as a signed vault record I + II
7 Baseline capture at onboarding III

Items 1 and 2 are small, independent, and useful before anything else lands.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions