{"schemaVersion":"pre.page.v1","id":"learnings","route":"/learnings","meta":{"title":"Learnings","description":"Implementation lessons and architectural pivots discovered while making the Pre protocol executable.","navLabel":"Learnings","order":68,"nav":false,"navGroup":"Reference","discoverable":true,"eyebrow":"What changed through contact with code","status":"active","theme":"main","visibility":"public"},"source":{"kind":"filesystem","ref":"LEARNINGS.md","digest":"69f11644be526af9cd1c8b7cd3ba4b7b4edaacbb3abeffb2dc8ab5d723f06dd5"},"navigation":{"items":[{"route":"/","label":"Main","order":0,"placement":"primary","group":""},{"route":"/context","label":"Context","order":10,"placement":"primary","group":""},{"route":"/vision","label":"Vision","order":15,"placement":"secondary","group":"Explore"},{"route":"/principles","label":"Principles","order":20,"placement":"primary","group":""},{"route":"/architecture","label":"Architecture","order":30,"placement":"primary","group":""},{"route":"/ontology","label":"Ontology","order":32,"placement":"secondary","group":"Explore"},{"route":"/protocol","label":"Protocol","order":35,"placement":"secondary","group":"Explore"},{"route":"/security","label":"Security","order":40,"placement":"secondary","group":"Explore"},{"route":"/roadmap","label":"Roadmap","order":45,"placement":"primary","group":""},{"route":"/status","label":"Status","order":50,"placement":"primary","group":""},{"route":"/projects","label":"Projects","order":60,"placement":"secondary","group":"Reference"},{"route":"/decisions","label":"Decisions","order":65,"placement":"secondary","group":"Reference"},{"route":"/learnings","label":"Learnings","order":68,"placement":"secondary","group":"Reference"},{"route":"/glossary","label":"Glossary","order":70,"placement":"secondary","group":"Reference"},{"route":"/sources","label":"Sources","order":90,"placement":"secondary","group":"Reference"}],"outline":[{"id":"authority-must-be-append-only-in-spirit","label":"Authority must be append-only in spirit","level":2},{"id":"claims-are-lookup-hints-not-authority","label":"Claims are lookup hints, not authority","level":2},{"id":"delegation-must-attenuate-every-dimension","label":"Delegation must attenuate every dimension","level":2},{"id":"risk-belongs-to-the-trusted-boundary","label":"Risk belongs to the trusted boundary","level":2},{"id":"fields-are-part-of-authority","label":"Fields are part of authority","level":2},{"id":"ordered-streams-beat-a-fictional-global-clock","label":"Ordered streams beat a fictional global clock","level":2},{"id":"idempotency-is-durable-state","label":"Idempotency is durable state","level":2},{"id":"incomplete-requests-are-normal","label":"Incomplete requests are normal","level":2},{"id":"evidence-is-not-a-verdict","label":"Evidence is not a verdict","level":2},{"id":"disagreement-is-data","label":"Disagreement is data","level":2},{"id":"external-systems-need-field-level-authority","label":"External systems need field-level authority","level":2},{"id":"succession-is-continuity-without-identity-fiction","label":"Succession is continuity without identity fiction","level":2},{"id":"the-reference-kernel-should-remain-boring","label":"The reference kernel should remain boring","level":2},{"id":"persistence-may-be-asynchronous-without-becoming-semantic","label":"Persistence may be asynchronous without becoming semantic","level":2},{"id":"repository-and-branch-names-are-separate-namespaces","label":"Repository and branch names are separate namespaces","level":2},{"id":"a-durable-protocol-spine-can-precede-a-normalized-domain-store","label":"A durable protocol spine can precede a normalized domain store","level":2},{"id":"physical-storage-does-not-determine-logical-record-identity","label":"Physical storage does not determine logical record identity","level":2},{"id":"a-model-invocation-is-not-an-agent","label":"A model invocation is not an agent","level":2},{"id":"real-local-authority-can-remain-boring","label":"Real local authority can remain boring","level":2},{"id":"extra-capability-code-should-fail-closed-rather-than-disappear","label":"Extra capability code should fail closed rather than disappear","level":2},{"id":"deployment-readiness-is-not-execution-evidence","label":"Deployment readiness is not execution evidence","level":2},{"id":"next-pivot","label":"Next pivot","level":2}]},"presentation":{"theme":"main","classes":{"page":"min-h-screen bg-[#f6f4ee] text-[#20251f]","header":"sticky top-0 z-20 border-b border-[#d8d6cd] bg-[#f6f4ee]/95 backdrop-blur","headerInner":"mx-auto flex w-full max-w-6xl items-center justify-between gap-6 px-5 py-4 sm:px-8 lg:px-10","brand":"flex shrink-0 items-baseline gap-2 text-sm font-semibold tracking-[-0.02em] text-[#20251f]","brandMark":"font-mono text-[0.66rem] font-medium uppercase tracking-[0.22em] text-[#737c72]","nav":"flex max-w-full gap-1 overflow-x-auto pb-1 text-sm [scrollbar-width:none] [&::-webkit-scrollbar]:hidden","navLink":"whitespace-nowrap rounded-full px-3 py-1.5 text-[#667066] transition-colors hover:bg-[#e9e7df] hover:text-[#20251f] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#556255]","navLinkActive":"bg-[#20251f] text-[#f6f4ee] hover:bg-[#20251f] hover:text-[#f6f4ee]","shell":"mx-auto w-full max-w-6xl px-5 sm:px-8 lg:px-10","main":"grid gap-10 py-12 lg:grid-cols-[minmax(0,1fr)_14rem] lg:py-16","article":"min-w-0","aside":"hidden lg:block","eyebrow":"font-mono text-xs font-medium uppercase tracking-[0.2em] text-[#768075]","title":"mt-4 max-w-4xl text-balance text-4xl font-medium leading-[1.04] tracking-[-0.045em] text-[#172018] sm:text-6xl","description":"mt-5 max-w-3xl text-pretty text-lg leading-8 text-[#586157] sm:text-xl","statusRow":"mt-7 flex flex-wrap gap-2","badge":"rounded-full border border-[#cfd2c9] bg-[#ebece6] px-3 py-1 font-mono text-[0.68rem] uppercase tracking-[0.12em] text-[#5d665c]","body":"mt-12 max-w-3xl","heading1":"mt-12 scroll-mt-28 text-3xl font-medium leading-tight tracking-[-0.035em] text-[#20251f]","heading2":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]","heading3":"mt-9 scroll-mt-28 text-xl font-semibold leading-tight tracking-[-0.015em] text-[#293229]","heading4":"mt-8 scroll-mt-28 text-lg font-semibold text-[#293229]","heading5":"mt-8 scroll-mt-28 text-base font-semibold uppercase tracking-[0.08em] text-[#4d574d]","heading6":"mt-8 scroll-mt-28 text-sm font-semibold uppercase tracking-[0.12em] text-[#5d675c]","paragraph":"mt-5 text-[1.04rem] leading-8 text-[#404940]","unorderedList":"mt-5 list-disc space-y-2 pl-6 text-[1.02rem] leading-7 text-[#404940] marker:text-[#879184]","orderedList":"mt-5 list-decimal space-y-2 pl-6 text-[1.02rem] leading-7 text-[#404940] marker:font-mono marker:text-[#737c72]","quote":"my-8 border-l-2 border-[#879184] pl-5 text-xl leading-8 text-[#2e382f]","code":"my-7 overflow-x-auto rounded-2xl border border-[#303a31] bg-[#20251f] p-5 font-mono text-sm leading-6 text-[#eef1e9] shadow-sm","divider":"my-10 border-0 border-t border-[#d8d6cd]","inlineLink":"font-medium text-[#284f36] underline decoration-[#9dab9a] decoration-1 underline-offset-4 transition-colors hover:text-[#173421] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#556255]","inlineCode":"rounded bg-[#e8e7df] px-1.5 py-0.5 font-mono text-[0.88em] text-[#2d372e]","inlineStrong":"font-semibold text-[#263027]","inlineEmphasis":"italic","tocTitle":"font-mono text-[0.68rem] font-semibold uppercase tracking-[0.16em] text-[#788078]","tocList":"mt-4 space-y-2 border-l border-[#d8d6cd] pl-4","tocLink":"block text-sm leading-5 text-[#697269] transition-colors hover:text-[#20251f] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#556255]","tocSticky":"sticky top-28","tocChild":"pl-3","secondaryNav":"mt-16 grid gap-8 border-t border-[#d8d6cd] pt-7 sm:grid-cols-2","secondaryNavGroup":"min-w-0","secondaryNavTitle":"font-mono text-[0.68rem] font-semibold uppercase tracking-[0.16em] text-[#788078]","secondaryNavList":"mt-3 flex flex-wrap gap-x-4 gap-y-2","secondaryNavLink":"text-sm leading-5 text-[#697269] transition-colors hover:text-[#20251f] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#556255]","footer":"mt-10 border-t border-[#d8d6cd] pt-5 text-xs leading-5 text-[#737c72]","footerCode":"font-mono text-[0.68rem] text-[#5e675e]"}},"blocks":[{"id":"block-1","type":"heading","level":2,"anchor":"authority-must-be-append-only-in-spirit","content":[{"type":"text","value":"Authority must be append-only in spirit"}],"plainText":"Authority must be append-only in spirit","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-2","type":"paragraph","content":[{"type":"text","value":"Putting a mutable "},{"type":"code","value":"revoked"},{"type":"text","value":" flag on a capability makes historical reconstruction depend on the latest row image. Step 1 instead treats grants as immutable and revocation as a separate attributable record."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-3","type":"heading","level":2,"anchor":"claims-are-lookup-hints-not-authority","content":[{"type":"text","value":"Claims are lookup hints, not authority"}],"plainText":"Claims are lookup hints, not authority","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-4","type":"paragraph","content":[{"type":"code","value":"claimedAuthority"},{"type":"text","value":" is useful because it prevents ambient privilege search and tells the resolver what the caller believes is relevant. The resolver still trusts only records already admitted by an authenticated authority store."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-5","type":"paragraph","content":[{"type":"text","value":"A schema-valid capability object supplied by a client is no more authoritative than text saying \"I am allowed.\""}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-6","type":"heading","level":2,"anchor":"delegation-must-attenuate-every-dimension","content":[{"type":"text","value":"Delegation must attenuate every dimension"}],"plainText":"Delegation must attenuate every dimension","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-7","type":"paragraph","content":[{"type":"text","value":"Checking only action names is insufficient. A child could otherwise widen targets, fields, risk, duration, or delegation depth. The reference resolver validates the entire chain and rejects any widening."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-8","type":"heading","level":2,"anchor":"risk-belongs-to-the-trusted-boundary","content":[{"type":"text","value":"Risk belongs to the trusted boundary"}],"plainText":"Risk belongs to the trusted boundary","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-9","type":"paragraph","content":[{"type":"text","value":"Caller risk labels are informative. The resolver independently classifies the action. A request calling a consequential operation "},{"type":"code","value":"read"},{"type":"text","value":" does not make it safe."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-10","type":"heading","level":2,"anchor":"fields-are-part-of-authority","content":[{"type":"text","value":"Fields are part of authority"}],"plainText":"Fields are part of authority","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-11","type":"paragraph","content":[{"type":"text","value":"An adapter that may update a title does not therefore own a task. A participant that may read a summary does not therefore receive a hidden note. Field paths belong inside capability, context, and binding policy."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-12","type":"paragraph","content":[{"type":"text","value":"This becomes especially important for unified communications, where transport metadata, message bodies, identities, and private context have different disclosure and mutation rules."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-13","type":"heading","level":2,"anchor":"ordered-streams-beat-a-fictional-global-clock","content":[{"type":"text","value":"Ordered streams beat a fictional global clock"}],"plainText":"Ordered streams beat a fictional global clock","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-14","type":"paragraph","content":[{"type":"text","value":"The protocol needs deterministic reconstruction within a request, conversation, task, or relation. It does not need every event in the world to share one total order. Per-stream sequence and predecessor references are sufficient and easier to distribute."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-15","type":"heading","level":2,"anchor":"idempotency-is-durable-state","content":[{"type":"text","value":"Idempotency is durable state"}],"plainText":"Idempotency is durable state","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-16","type":"paragraph","content":[{"type":"text","value":"An idempotency key is not merely a retry header. The durable request claim binds participant, key, and action digest. Exact retries replay; changed input conflicts; admitted requests without final receipts become explicit recovery cases."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-17","type":"heading","level":2,"anchor":"incomplete-requests-are-normal","content":[{"type":"text","value":"Incomplete requests are normal"}],"plainText":"Incomplete requests are normal","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-18","type":"paragraph","content":[{"type":"text","value":"Stateless executors will disappear between admission and completion. Treating that condition as an error to hide invites duplicate action. The protocol returns "},{"type":"code","value":"pending"},{"type":"text","value":" plus a recovery recommendation and refuses to rerun silently."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-19","type":"heading","level":2,"anchor":"evidence-is-not-a-verdict","content":[{"type":"text","value":"Evidence is not a verdict"}],"plainText":"Evidence is not a verdict","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-20","type":"paragraph","content":[{"type":"text","value":"An artifact, successful test, or executor report may be strong evidence. It is still not the same record as an authorized determination that the objective was met. The evaluator boundary must remain visible."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-21","type":"paragraph","content":[{"type":"text","value":"Step 2 sharpened this further: a verified HARnest objective verdict must cite the canonical evidence records corresponding to domain-verified artifacts. A task status or artifact checkbox alone is not sufficient proof."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-22","type":"heading","level":2,"anchor":"disagreement-is-data","content":[{"type":"text","value":"Disagreement is data"}],"plainText":"Disagreement is data","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-23","type":"paragraph","content":[{"type":"text","value":"Two authorized reviewers may disagree. The system should preserve both verdicts and project uncertainty rather than choose one invisibly. Supersession must be explicit."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-24","type":"heading","level":2,"anchor":"external-systems-need-field-level-authority","content":[{"type":"text","value":"External systems need field-level authority"}],"plainText":"External systems need field-level authority","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-25","type":"paragraph","content":[{"type":"text","value":"Object-level synchronization is too coarse. Each binding declares direction and external write mode per field. External deletion means the projection is missing, not that the canonical object should disappear."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-26","type":"heading","level":2,"anchor":"succession-is-continuity-without-identity-fiction","content":[{"type":"text","value":"Succession is continuity without identity fiction"}],"plainText":"Succession is continuity without identity fiction","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-27","type":"paragraph","content":[{"type":"text","value":"A replacement model, device, custodian, or participant may inherit history and obligations by reference. It does not silently inherit identity or capability. New authority requires new authority records."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-28","type":"heading","level":2,"anchor":"the-reference-kernel-should-remain-boring","content":[{"type":"text","value":"The reference kernel should remain boring"}],"plainText":"The reference kernel should remain boring","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-29","type":"paragraph","content":[{"type":"text","value":"The first executable kernel is intentionally in memory. Its job is to expose contract mistakes before database behavior becomes doctrine. Har, Instant, SQL, local storage, and other engines should compete as implementations of the protocol rather than define it."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-30","type":"heading","level":2,"anchor":"persistence-may-be-asynchronous-without-becoming-semantic","content":[{"type":"text","value":"Persistence may be asynchronous without becoming semantic"}],"plainText":"Persistence may be asynchronous without becoming semantic","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-31","type":"paragraph","content":[{"type":"text","value":"A real HARnest adapter cannot assume that claims, event appends, evidence, verdicts, receipts, and reconstruction complete in one process or one synchronous call stack. Step 2 therefore names a persistence-neutral "},{"type":"code","value":"ProtocolJournal"},{"type":"text","value":" boundary whose methods may be synchronous or asynchronous."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-32","type":"paragraph","content":[{"type":"text","value":"That boundary does not permit a database to redefine replay, ordering, verification, or continuity. Storage latency and transaction mechanics are implementation facts; the protocol remains the observable contract."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-33","type":"heading","level":2,"anchor":"repository-and-branch-names-are-separate-namespaces","content":[{"type":"text","value":"Repository and branch names are separate namespaces"}],"plainText":"Repository and branch names are separate namespaces","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-34","type":"paragraph","content":[{"type":"code","value":"main"},{"type":"text","value":" is both a common branch name and the repository name "},{"type":"code","value":"prepace/main"},{"type":"text","value":". Treating an unqualified "},{"type":"code","value":"main"},{"type":"text","value":" as obvious is a source-control hazard."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-35","type":"paragraph","content":[{"type":"text","value":"Step 2 now records repository and branch together:"}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-36","type":"code","language":"text","value":"prepace/main:main\nprepace/harnest:codex/harnest-vertical-slice","className":"my-7 overflow-x-auto rounded-2xl border border-[#303a31] bg-[#20251f] p-5 font-mono text-sm leading-6 text-[#eef1e9] shadow-sm"},{"id":"block-37","type":"paragraph","content":[{"type":"text","value":"HARnest also pins the canonical repository commit and individual schema/fixture blob identities. A branch merge cannot silently masquerade as a protocol upgrade."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-38","type":"heading","level":2,"anchor":"a-durable-protocol-spine-can-precede-a-normalized-domain-store","content":[{"type":"text","value":"A durable protocol spine can precede a normalized domain store"}],"plainText":"A durable protocol spine can precede a normalized domain store","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-39","type":"paragraph","content":[{"type":"text","value":"The supplied HARnest branch persisted its complete domain ledger as one server-only checkpoint. That made an existing in-memory product durable quickly, but unrelated concurrent writers could still produce broad last-writer behavior."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-40","type":"paragraph","content":[{"type":"text","value":"Step 2 did not pretend the checkpoint was already a final relational substrate. It added independently keyed request, event, evidence, verdict, and receipt documents beside it."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-41","type":"paragraph","content":[{"type":"text","value":"This creates a migration oracle:"}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-42","type":"code","language":"text","value":"legacy domain projection\n        +\ncanonical protocol history\n        -> normalized HarStore migration","className":"my-7 overflow-x-auto rounded-2xl border border-[#303a31] bg-[#20251f] p-5 font-mono text-sm leading-6 text-[#eef1e9] shadow-sm"},{"id":"block-43","type":"paragraph","content":[{"type":"text","value":"The protocol spine can therefore be durable and exportable while the domain read model is still being normalized."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-44","type":"heading","level":2,"anchor":"physical-storage-does-not-determine-logical-record-identity","content":[{"type":"text","value":"Physical storage does not determine logical record identity"}],"plainText":"Physical storage does not determine logical record identity","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-45","type":"paragraph","content":[{"type":"text","value":"Step 2 reused an existing generic, server-only Instant entity as a uniquely keyed document container for canonical protocol records. That avoided an unreviewed schema push."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-46","type":"paragraph","content":[{"type":"text","value":"An event and a receipt may temporarily share an entity type at the storage layer without becoming the same semantic object. Their Pre addresses, schemas, keys, and contracts retain their logical identity."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-47","type":"paragraph","content":[{"type":"text","value":"This is a migration bridge, not an endorsement of an untyped permanent database."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-48","type":"heading","level":2,"anchor":"a-model-invocation-is-not-an-agent","content":[{"type":"text","value":"A model invocation is not an agent"}],"plainText":"A model invocation is not an agent","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-49","type":"paragraph","content":[{"type":"text","value":"HARnest persists "},{"type":"code","value":"agent:pre:repo-auditor-01"},{"type":"text","value":" while recording OpenRouter, requested model, actual model, provider, usage, cost, input digest, and output digest as per-invocation execution metadata."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-50","type":"paragraph","content":[{"type":"text","value":"The same participant may therefore be instantiated through a deterministic fallback or a different provider without claiming that those substrates are numerically identical."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-51","type":"paragraph","content":[{"type":"text","value":"This is the first practical expression of model-agnostic participant identity, not yet the full agentic-permanence milestone."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-52","type":"heading","level":2,"anchor":"real-local-authority-can-remain-boring","content":[{"type":"text","value":"Real local authority can remain boring"}],"plainText":"Real local authority can remain boring","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-53","type":"paragraph","content":[{"type":"text","value":"The first actual HARnest executor does not accept arbitrary model-generated shell commands. It performs fixed Git reads and a bounded allowlist of repository scripts, retains detailed output locally, and sends only sanitized summaries and digests remotely."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-54","type":"paragraph","content":[{"type":"text","value":"A boring controller is not a compromise. It is how the system proves that the web server and model can remain evanescent while consequential local authority stays explicit."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-55","type":"heading","level":2,"anchor":"extra-capability-code-should-fail-closed-rather-than-disappear","content":[{"type":"text","value":"Extra capability code should fail closed rather than disappear"}],"plainText":"Extra capability code should fail closed rather than disappear","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-56","type":"paragraph","content":[{"type":"text","value":"The supplied HARnest branch contained guarded documentation-write experiments beyond the read-only Step 2 claim."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-57","type":"paragraph","content":[{"type":"text","value":"Deleting them would discard useful design work; leaving them reachable would broaden authority accidentally. A server-only feature flag keeps the code and tests while every external entry point remains forbidden by default."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-58","type":"heading","level":2,"anchor":"deployment-readiness-is-not-execution-evidence","content":[{"type":"text","value":"Deployment readiness is not execution evidence"}],"plainText":"Deployment readiness is not execution evidence","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-59","type":"paragraph","content":[{"type":"text","value":"A green build and READY Vercel deployment prove that code can execute in that environment. They do not prove:"}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-60","type":"list","ordered":false,"items":[[{"type":"text","value":"a live authenticated task lifecycle;"}],[{"type":"text","value":"a two-controller race;"}],[{"type":"text","value":"a local controller restart;"}],[{"type":"text","value":"a human evidence-verification decision;"}],[{"type":"text","value":"portable reconstruction from export."}]],"className":"mt-5 list-disc space-y-2 pl-6 text-[1.02rem] leading-7 text-[#404940] marker:text-[#879184]"},{"id":"block-61","type":"paragraph","content":[{"type":"text","value":"Each claim requires its own evidence. Step 2 is therefore implementation-complete while operational acceptance remains explicit."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-62","type":"heading","level":2,"anchor":"next-pivot","content":[{"type":"text","value":"Next pivot"}],"plainText":"Next pivot","className":"mt-12 scroll-mt-28 text-2xl font-medium leading-tight tracking-[-0.025em] text-[#20251f]"},{"id":"block-63","type":"paragraph","content":[{"type":"text","value":"Run the live Step 2 acceptance sequence, then replace HARnest's whole-ledger checkpoint with independently transacted normalized entities or another conforming HarStore."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"},{"id":"block-64","type":"paragraph","content":[{"type":"text","value":"Only after that boundary is accepted should the system broaden through the Pre CLI, Linear, communications, Stow, or guarded write participants."}],"className":"mt-5 text-[1.04rem] leading-8 text-[#404940]"}]}