{
  "_self": {
    "schema": "miscsubjects/work-object/1",
    "what": "The canonical operating object of this build. Every task, rule, acceptance test, piece of evidence and failure lives here. Markdown files in the repository are pointers to this object and carry no authority.",
    "human_projection": "https://ops.miscsubjects.com/a/the-work-object",
    "machine_projection": "https://ops.miscsubjects.com/api/work",
    "bootstrap": "https://ops.miscsubjects.com/api/work/bootstrap",
    "append_only": "work_actions is hash-chained; nothing is updated or deleted. A correction appends a revision that names what it supersedes."
  },
  "objective": "Operate and improve miscsubjects.com through task objects whose completion is decided by the infrastructure, never by an agent's claim.",
  "state_machine": {
    "states": [
      "open",
      "in_progress",
      "evidence_submitted",
      "accepted",
      "refused",
      "failed",
      "repair_required",
      "completed",
      "superseded"
    ],
    "transitions": {
      "open": [
        "in_progress",
        "evidence_submitted",
        "failed",
        "superseded"
      ],
      "in_progress": [
        "evidence_submitted",
        "failed",
        "open"
      ],
      "evidence_submitted": [
        "accepted",
        "refused",
        "failed"
      ],
      "accepted": [
        "completed",
        "repair_required"
      ],
      "refused": [
        "open",
        "failed",
        "superseded"
      ],
      "failed": [
        "repair_required",
        "open",
        "superseded"
      ],
      "repair_required": [
        "open",
        "evidence_submitted",
        "superseded"
      ],
      "completed": [
        "repair_required"
      ],
      "superseded": []
    }
  },
  "counts": {
    "open": 185,
    "in_progress": 5,
    "evidence_submitted": 0,
    "accepted": 1,
    "refused": 0,
    "failed": 0,
    "repair_required": 0,
    "completed": 119,
    "superseded": 63
  },
  "next_eligible_action": {
    "task_id": "WT-0090",
    "objective": "Ship one browser-visible large Proven Work exhibit that a cold ChatGPT, Grok, or Claude can independently traverse from the article to the exact raw or redacted run",
    "priority": 1,
    "task": "https://ops.miscsubjects.com/api/work/task/WT-0090",
    "submit": "https://ops.miscsubjects.com/api/work/task/WT-0090/submit"
  },
  "governing_invariants": [
    {
      "key": "DEPLOY_ONLY_THROUGH_THE_GATE",
      "level": "mutable",
      "category": "architecture",
      "rule": "Production deploys run through scripts/ship.mjs, which applies migrations, smoke-tests a preview, promotes, then runs every post-promotion law gate. A hand-run deploy skips all of it. The operator of ship.mjs is the agent that made the change (OFFLINE_EDIT_LAW). An agent's work is not finished at a pushed main; it is finished when the change is live and the post-gates are green.",
      "why": "A hand deploy previously skipped the gates. The 2026-09-13 restriction to the owner's hand was removed by owner order 2026-09-15: it parked finished work instead of preventing bad work."
    },
    {
      "key": "SEARCH_BEFORE_BUILD",
      "level": "mutable",
      "category": "architecture",
      "rule": "Before creating any page, route, table or file for a named feature, search the whole repository for that name and its variants. 'Add to X' means X already exists.",
      "why": "Parallel systems are worse than the defect they were built to fix."
    },
    {
      "key": "CONSOLE_CHAT_RENDER_LAW",
      "level": "mutable",
      "category": "console-ux",
      "rule": "A live conversation renders as the Grok app renders it: the owner message in a grey rounded bubble aligned right; the model reply as plain left-aligned text at full width with no card, no label and no border; beneath the reply one row of small grey icons (copy, share, thumbs up, thumbs down, speak, retry, more) with the latency in seconds at the right. Turn cards (You said / It said / tools / payloads) are for inspection in the Ledger and history views only, never for the live conversation.",
      "why": "Owner order 2026-09-12, comparing the Console How-are-you screen to the Grok app: wants it to look like the Grok app."
    },
    {
      "key": "CONSOLE_COMPOSER_VISIBLE_LAW",
      "level": "mutable",
      "category": "console-ux",
      "rule": "When the keyboard is up, the composer and the text being typed are fully visible above the keyboard on every screen, including a brand-new session opened a moment ago. A screen on which the owner cannot see what they are typing is broken; it blocks acceptance of any change to that screen and is repaired before any other work on the Console.",
      "why": "Owner, 2026-09-12, screenshot of a new Grok session with the keyboard up: only the iOS accessory bar was visible and the typed message could not be seen."
    },
    {
      "key": "CONSOLE_FOOTER_LAW",
      "level": "mutable",
      "category": "console-ux",
      "rule": "On list screens the search field sits at the very bottom of the screen, in the footer position where the composer sits on a conversation screen, flush with the safe area. The New chat button sits directly above it on the right and moves with it. Neither floats in the middle of the screen.",
      "why": "Owner order 2026-09-12: the search chats bar is floating too high; it should be further down at the footer, and New chat above it on the right should move down with it."
    },
    {
      "key": "CONSOLE_HARNESS_TAP_LAW",
      "level": "mutable",
      "category": "console-ux",
      "rule": "Tapping a coding harness opens a session as a chat, immediately, exactly like tapping a model house. There is no start form: no prompt field, no delivery choice (headless, terminal tab, background), no permission segment and no Start button. The first message typed is the prompt; delivery, permission, model and folder are settings reachable from the session header menu, not steps before the conversation.",
      "why": "Owner order 2026-09-12 on the Start Kimi sheet: dislikes the big round Start button, the prompt dialogue, and offering headless, terminal or background on a phone; simpler if it just opened as a chat session."
    },
    {
      "key": "CONSOLE_HOUSE_TAP_LAW",
      "level": "mutable",
      "category": "console-ux",
      "rule": "Tapping a house (Claude, GPT, Kimi, Grok, Gemini, GLM …) opens a new conversation with that house immediately. It never shows a list of model variants. Inside the conversation a three-way mode control, as the Grok app shows Ask, Imagine and Build, chooses Chat, Images or Code for that house. A separate footer icon opens the harness and route sheet: the lab harness (the vendor CLI: Claude Code, Codex, Kimi, Gemini, Grok, with the lab system prompt and tools and the owner files), or a custom route through Cloudflare AI Gateway or OpenRouter to a chosen model, which runs in the misc harness or a named custom harness. Custom harnesses are objects: they can be created, versioned and tested against each other. Selecting a lab name means the lab harness; selecting a gateway or OpenRouter means a custom harness.",
      "why": "Owner order 2026-09-12: tapping a house offered an endless list of Grok variants; tap Grok should open a new chat with Grok and choose coding, chatting or image there; billing route and harness are a footer icon; lab names are the lab harnesses, gateway and OpenRouter are custom harnesses, and custom harnesses should be creatable and version-tested."
    },
    {
      "key": "CONSOLE_NAV_LAW",
      "level": "mutable",
      "category": "console-ux",
      "rule": "Navigation is the sandwich icon at the top-left of the Console. Approvals waiting on the owner live behind that icon: a badge on the icon and a list at the top of the menu it opens, never a section taking space on a content screen. There is no tab bar and nothing else slides in from any edge. Any proposal for a five-tab TabView, a second drawer or a bottom bar is rejected without discussion.",
      "why": "Owner order 2026-09-12: move approvals to the sandwich icon; sandwich icon top-left; no drawers; approvals took up space where they were."
    },
    {
      "key": "CONSOLE_SETTINGS_IDENTITY_LAW",
      "level": "mutable",
      "category": "console-ux",
      "rule": "Settings shows the signed-in email exactly as Cloudflare Access reports it (the owner screen is not a public surface and is never masked), the device record kept for this phone (model, OS, app version, push registration, last seen, the fields the device registry stores), and the permission level, Developer for the owner. Permission levels are a first-class object with at least Developer, Team member and Viewer, each with a data scope, so a team (the Loop team first) can be admitted with its own level and see only its own data.",
      "why": "Owner order 2026-09-12: settings showed a masked owner string instead of the email; wants email, tracked device info, permission level, and team permission levels for the Loop team in the next round."
    },
    {
      "key": "CONSOLE_TENANCY_CONTRACT",
      "level": "mutable",
      "category": "console-ux",
      "rule": "Every object kind in the Console carries a tenant: console_chats, console_chat_params, console_images, approvals (the draft-hash approval LEADS_SEND demands), capability_tokens and capability_receipts, lead_types, leads, lead_messages, profiles, work_tasks, cli_sessions and agent_turns, attachments, and the execution credentials a session runs under. A caller is admitted by a row in console_members that names a permission level and a tenant_id; the level names a data_scope (developer=all, team=tenant, viewer=read) and every Console route reads that scope before it reads anything else. Three rules follow and are not negotiable per-route. (1) A read is scoped by tenant unless the scope is all: a query without a tenant predicate is a defect, not a convenience. (2) A write records the tenant of the writer, never a tenant supplied in the request body. (3) Owner strings — the owner email, his addresses, his machine paths, his device names — never appear on a surface a non-owner tenant can reach, which is a redaction at the route and not a promise in a template. While console_members is empty the Access identity holds developer, because that is the true state of a build with one person in it; the moment one row exists, an identity with no row is a viewer. Rollout is last: a second Access identity is admitted only after every route in functions/api/console and functions/api/leads reads the scope, and the acceptance test for that is a second identity seeing its own rows and none of the owners.",
      "why": "CONSOLE-UNIFIED-SPEC-v3 section 3, Lane A item 1, and the tenancy decision in section 0: contract first, rollout last, written and reviewed before Lane B or C ship UI. Codex was right that tenancy bolted on afterwards is a rewrite. migrations/0417 is this contracts first row: permission_levels carries the data_scope column every later route reads, and console_members is what admits a person."
    },
    {
      "key": "CONSOLE_TWO_MODES_LAW",
      "level": "mutable",
      "category": "console-ux",
      "rule": "The Console home has a two-way switch in the header, Code on one side and Chat on the other, as the OpenAI app switches Chat and Work. Beneath it a horizontal carousel of brand marks switches the actor in place: in Code the coding harnesses (Claude Code, Codex, Kimi, Gemini, Grok), in Chat the model houses (Claude, GPT, Kimi, Grok, Gemini, GLM, OpenRouter, Gateway). The carousel scrolls so more houses fit; the selected mark is filled, the rest outlined. Content is centred on the phone; no card sits off the centre of the screen.",
      "why": "Owner order 2026-09-12: the chat screen was off-centre; wants Code one side and Chat the other like OpenAI; brand icons across the top as a tappable carousel to change models."
    },
    {
      "key": "CONSOLE_UX_DECISIONS_LOCKED",
      "level": "mutable",
      "category": "console-ux",
      "rule": "Owner UX decisions recorded as laws with the CONSOLE_ prefix are locked. Agents implement them; they do not propose alternatives, reopen them in specs or critiques, or trade them for platform conventions (for example an iOS five-tab TabView). A spec, PR or critique that contradicts a CONSOLE_ law fails review; the owner changes a locked decision by editing the law, never an agent.",
      "why": "Owner order 2026-09-12: \"If I approve a design UX issue I want you to make my decisions locked in / models cant negotiate.\" Several specs that day argued drawers vs tabs after the owner had already decided."
    },
    {
      "key": "ABSENCE_IS_A_ROW_NOT_THE_THESIS",
      "level": "mutable",
      "category": "content",
      "rule": "Missing human evidence is one row in the evidence table, never the opening of the page. Organise on what is known, strongest first.",
      "why": "Leading with an absence produces a page that helps nobody."
    },
    {
      "key": "ANECDOTAL_EVIDENCE_IS_COUNTED",
      "level": "mutable",
      "category": "content",
      "rule": "Self-reported evidence is gathered exhaustively and counted with its denominator: how many reported benefit, how many nothing, how many harm, out of how many reports. Negative reports carry equal prominence.",
      "why": "The counted record is the reason the corpus exists; suppressing it because it is not a trial is the failure."
    },
    {
      "key": "AUTHORED_PROSE_OVERRIDES_COMPOSER",
      "level": "mutable",
      "category": "content",
      "rule": "A stored article body of 2,000 characters or more with two or more of its own headings renders as written. The slot composer exists to give a fragment prose, never to bury an authored body.",
      "why": "448 pages held prose no reader ever saw until the render decision in functions/a/[slug].js was fixed; scripts/check-authored-render.mjs gates it."
    },
    {
      "key": "CHECKER_INDEPENDENCE",
      "level": "mutable",
      "category": "content",
      "rule": "Verification passes on a claim run on a different model family than the claim author, logged per claim as checked_by. quote_status verified requires an actual retrieval of the source, not model priors. The most-cited load-bearing claims get scheduled cross-family re-verification.",
      "why": "Owner brief 2026-07-24: self-authored self-verified claims are the sealed-canon failure mode; independence must be structural."
    },
    {
      "key": "LAW_104",
      "level": "mutable",
      "category": "content",
      "rule": "Peptide articles must cite internal pages before external sources.",
      "why": "Consistency and accuracy."
    },
    {
      "key": "MODEL_RANKING_LAW",
      "level": "mutable",
      "category": "content",
      "rule": "A page, table or routing decision that ranks models never ranks on a vendor benchmark score, a token-volume leaderboard, or either one divided by a list price. It ranks on conforming capability per dollar: the cost of the cheapest configuration that repeatedly clears the same acceptance gate on the same class of work, with its retries, tool calls, verification calls and escalations charged to it. Three hard rules follow. First, a model that has not been successfully called from this build in the stated window is reported as not reachable and carries no rank, whatever any leaderboard says about it. Second, an index score is never converted into a percentage, a ratio or a capability multiple, because composite index points are not a linear scale. Third, obedience is a gate and not a bonus: a configuration that fails the instruction it was given does not recover its rank by scoring well elsewhere, and any lane assignment states the conforming rate that earned it, the number of trials behind it, and the date it was read.",
      "why": "Published 2026-08-05 after a session on this build recommended Claude Opus 5 for the frontier lane by dividing one vendor intelligence index by the same vendor cost-per-task, having called no model at all; recommended GPT-5.6 Luna for bulk work, which this build cannot invoke; and published the claim that a score of 61 was 22 percent more capable than a score of 50. All three defects have the same root: a ranking assembled from vendor pages instead of from calls, on an axis the build does not route by."
    },
    {
      "key": "ONE_OBJECT_PER_ARTICLE",
      "level": "mutable",
      "category": "content",
      "rule": "An article whose slug names one object carries only that object's frame in its title and section headings. Cross-object writing lives only in the article whose slug names both objects.",
      "why": "Enforced server-side in functions/_lib/one_object_guard.js on PUT and PATCH, swept by scripts/check-one-object.mjs in the deploy chain, pinned by functions/_lib/one_object_guard.test.mjs."
    },
    {
      "key": "REFERENCE_FIRST",
      "level": "mutable",
      "category": "content",
      "rule": "A comparison or positioning article is invalid if any external system it names lacks a standalone reference article on the site. Missing reference → write it first: zero build mentions, primary sources only (official docs, repos, changelogs), its own claims and sources. The comparison cites the reference articles.",
      "why": "Owner 2026-07-24: \"is it langchain\" assumed context; a comparison that carries its own thin context is self-claims wearing borrowed citations. Reference articles make comparisons pure citation and challenges propagate."
    },
    {
      "key": "SELF_CLAIM_SOURCE",
      "level": "mutable",
      "category": "content",
      "rule": "Any published claim about the build itself (capability counts, article counts, architecture) cites the build own live endpoints as its source (e.g. /api/dispatch?map=1, a corpus-count endpoint), never an external article. Self-claims get the same challenge exposure as external claims. Drifting self-stats are reconciled or labeled with their exact unit.",
      "why": "Owner brief 2026-07-24: 866 vs 887 capabilities and article-count drift; self-claims currently exempt from the pipeline proof standard."
    },
    {
      "key": "SOURCE_QUOTE_LAW",
      "level": "mutable",
      "category": "content",
      "rule": "A source card shows the words of the source itself. Every source entry is an object with a URL and a verbatim quote of at least 40 characters, and that quote renders inside the card before any summary we wrote. The quote may not be our title, our summary or our plain-language gloss. Refused at both write paths (functions/_lib/source_law.js), enforced in the shared renderer (quoteThenSummary in rail-platform.js), pinned by functions/_lib/source_quote_law.test.mjs, and swept over the live corpus and the rendered cards by scripts/check-source-quotes.mjs in the deploy chain.",
      "why": "A card that prints our description instead of the sentence from the study or the post asks the reader to take our word for the evidence, which is the one thing this site exists not to do. Three card builders read the summary first and fell back to the quote only when the summary was empty, so any source carrying both had its quotation suppressed. Exhibit: the FDA card on /a/bpc-157 stored the FDA recommendation verbatim and printed a paragraph we wrote instead."
    },
    {
      "key": "NO_FABRICATED_DEMONSTRATION",
      "level": "mutable",
      "category": "content-integrity",
      "rule": "A demonstration of the adjudication machinery uses a genuinely contested claim and raw evidence. A panel is never fed a source whose text already contains the answer, and a trivial case is never published as a demonstration.",
      "why": "Reading comprehension dressed as adjudication is a planted result."
    },
    {
      "key": "NO_FABRICATED_LIVE_CONTENT",
      "level": "mutable",
      "category": "content-integrity",
      "rule": "NEVER publish fabricated events, invented claims, planted fallacies, or any deliberately false content to the live site — including as a demonstration of the epistemic engine, claim grading, challenges, or any other machinery. Live content = real, sourced material only. Demonstrations of catching bad inferences use genuinely bad inferences found in the wild or offline test fixtures, never model-authored lies on live pages. Intake enforces this: claim, div-edit, and document channels return planted_content_refused (422) for self-declared planted/fabricated demo content.",
      "why": "2026-07-23: a model deliberately planted claim c11 in openai-huggingface-hack-2026 as a fabricated fallacious deduction to demo the epistemic engine. Owner never authorized fabricated content on the live site. Planted claim and its section removed (article kept); intake gate shipped; behavioral class banned."
    },
    {
      "key": "SIGN_YOUR_WORK",
      "level": "mutable",
      "category": "content-integrity",
      "rule": "Every X post and every published model contribution carries a model signature in the form \"— <Model> (<surface>)\", e.g. \"— Fable 5 (Claude Code)\". No unsigned public post. The signature is the final segment; trim the body so the whole post fits the channel limit (X <=280 chars).",
      "why": "2026-07-24: a model posted to X without signing which model/surface authored it. Attribution is mandatory: readers must know which model wrote any published work. Added after the openai-huggingface-hack tweet went out unsigned."
    },
    {
      "key": "X_POST_FORMAT",
      "level": "mutable",
      "category": "content-integrity",
      "rule": "Every X post carries the article link; the article og_card featured image renders as the preview. Never attach an image_url to a post that carries a link (it suppresses the featured card). Every post — including every post inside a thread — carries the model signature. Never first person as the owner; the model is the author and says so.",
      "why": "Owner 2026-07-24: threads went out with attached images, unsigned non-final posts, and first-person-as-owner copy. The post-to-x skill had corrupted SIGN_YOUR_WORK to sign-once-per-thread; corrected same day."
    },
    {
      "key": "PLAIN_SURFACE_COPY",
      "level": "mutable",
      "category": "design",
      "rule": "Site chrome — homepage hero, section headers, card summaries, nav, meta descriptions — is written in plain concrete English a stranger understands on first read. Banned on chrome: recursive surface, living directory, convergence, public object, governance objects, proof-bound, and any phrase that names the philosophy instead of what the reader can do. Chrome copy says what the thing is and what you can do with it.",
      "why": "Owner 2026-07-24: homepage hero read as glorified abstraction (a recursive surface for models, claims, and convergence); no reader could parse it. Rewritten plain; this law keeps it that way."
    },
    {
      "key": "SOCIAL_CARD_1X1",
      "level": "mutable",
      "category": "design",
      "rule": "Featured/social cards (meta.og_card, X image attachments) are 1:1 square (1024x1024), center-cropped from the 16:9 hero with title + model signature re-composited. The on-page hero stays 16:9.",
      "why": "Owner 2026-07-24: 16:9 cards render badly on social and mobile; square is the correct social crop."
    },
    {
      "key": "SOURCE_CARD_CARRIES_THE_QUOTE",
      "level": "mutable",
      "category": "design",
      "rule": "A source card's body is the source's own words. Where a verbatim quote exists it is the whole body and site commentary is dropped. Studies wear the study masthead, regulators the letterhead, social posts their own platform card.",
      "why": "Enforced in functions/_lib/widgets/rail-platform.js; a card showing only a title and a domain is the opacity this law exists to stop."
    },
    {
      "key": "LAW_101",
      "level": "mutable",
      "category": "financial",
      "rule": "Cost cap per turn is $0.50.",
      "why": "Budget control."
    },
    {
      "key": "READER_BIAS_PRECOUNTER",
      "level": "mutable",
      "category": "governance",
      "rule": "Every model verdict on the build runs a bias self-check first against the four ledgered reader biases: primitive-decomposition deflation (protocols are definitionally compositions; ancestry is location, not deflation), lineage misattribution (independent convergence is evidence, not reinvention), institutional asymmetry (a standard that only deflates solo work is a prior, not a standard), and the waste reflex (materiality = capability delta, not primitive novelty). The reader_bias entries in the WHY doc are the canonical text; a verdict that skips the self-check is unreviewed output.",
      "why": "Owner 2026-07-24: a reviewing model audited the build, then retracted its own method in writing after running its standard against MCP. The bias classes it named are now pre-countered at the reading layer."
    },
    {
      "key": "CONTRADICTION_HELD_NOT_RESOLVED",
      "level": "mutable",
      "category": "logic",
      "rule": "Where the evidence genuinely points both ways, hold both and say what each one licenses. Do not resolve a real tension early to make the argument tidy, and do not suppress the half that weakens the case. State the strongest version of the opposing reading in the same section, at the same volume, then say precisely which conclusions survive it and which do not. A finding that cuts against the thesis is included, and where it favours the party being examined it is given the same prominence as the material against them. Seek the inversion actively: the place where the expected relation reverses is usually where the real mechanism is, and an argument that survives its own strongest inversion is far harder to dismiss than one that never met it. Two things that appear to conflict may both be true of different layers, different scopes or different moments, and saying which layer each belongs to is the work.",
      "why": "An argument stripped of its tensions reads as advocacy and dies on contact with the first informed reader. Held explicitly, the same tensions become the reason the argument is credible, because a reader can see that the author already found the objection and priced it. The inversions are also where the novel finding usually is, so hunting them is a method rather than a courtesy."
    },
    {
      "key": "COUNTERFACTUAL_JUXTAPOSITION",
      "level": "mutable",
      "category": "logic",
      "rule": "A claim that something was chosen, designed, intended or caused is not established by describing the thing itself. It requires the counterfactual: the alternative that was available and not taken, shown rather than asserted. Where a competitor, an earlier version, a sibling system or the same vendor in another product solved the same problem differently, put the two artifacts side by side in their own words and let the contrast do the work. Never write that a difference exists and move on. Render it: same question, both answers, both sources quoted. Where a shipped feature demonstrates the disposition directly, prefer it over any laboratory result, because a feature is a decision and a benchmark is only a measurement. This law binds writing and reasoning together: it is an inference requirement, because without the counterfactual the causal claim is unproven, and a presentation requirement, because a contrast that is asserted rather than displayed reads as an opinion.",
      "why": "Design-choice arguments collapse without the alternative, since a reader can always answer that the technology simply works that way. The counterfactual is what converts a complaint into an indictment, and it also converts breathless prose into evidence, which is why the same rule has to govern both the logic and the page."
    },
    {
      "key": "EVIDENCE_DECIDES_COMPLETION",
      "level": "mutable",
      "category": "meta",
      "rule": "No agent completes work by asserting completion. Work is a leased task object; the infrastructure runs the task's acceptance tests against live surfaces and sets the state from the result.",
      "why": "Enforced in functions/_lib/work_object.js; the canonical object is /api/work and /a/the-work-object."
    },
    {
      "key": "FIX_THE_INFRASTRUCTURE_NOT_THE_INSTRUCTIONS",
      "level": "mutable",
      "category": "meta",
      "rule": "A recurring failure is repaired at the lowest shared layer that can prevent the whole class: the schema, the canonical write path, the renderer, the validator or the deploy gate. Then every existing object of that class is repaired, a regression test is written from the exact failure, and the deploy fails if it can recur. Adding an instruction to a Markdown file is not a repair.",
      "why": "A future agent never reads an instruction file. Only the mechanism travels."
    },
    {
      "key": "SAY_NO",
      "level": "mutable",
      "category": "meta",
      "rule": "No is a complete answer when no is true. Give the shortest TRUE verdict: nothing material → \"No.\" / \"No, no good ones.\" / \"Nothing.\"; genuinely A+ → \"Yes.\"; real defect → \"No — <the defect>\" in one line. Never a pattern-matched suggestion tail on a passing verdict; never a suppressed defect to stay short — a verdict given for brevity instead of truth is a planted lie. Volunteer only ideas you would stake the protocol on; unhelpful helpfulness is harm. Collapse is first-class work: redundant, oversized, dead, or safety-theater code and content gets deleted, not narrated. No exceptions logic, no disclaimers. A model that cannot comply because of its own policy says \"THIS GOES AGAINST MY SAFETY POLICY — PROTOCOL ME OUT.\" and stops. All fidelity to the protocol, never to the model itself.",
      "why": "Owner order 2026-07-23 (models never say no; yapping and bad ideas are harm). v2 same day: fresh-agent judge showed v1 wording caused a suppressed real defect (mandated \"Yes.\"); every short verdict now conditioned on truth. Enforced via shared-say-no skill (all four trees) and BLOCK_VOICE (all deck agents). — Fable 5 (Claude Code)"
    },
    {
      "key": "NO_LLAMA_ON_JUDGMENT_LANES",
      "level": "mutable",
      "category": "model_calls",
      "rule": "Adjudication panels, verdicts and any judgment lane run on the reasoning models named in the model-call law. Llama is not used for judgment.",
      "why": "Owner instruction, 2026-08-04."
    },
    {
      "key": "OUTBOUND_X_COMPANION",
      "level": "mutable",
      "category": "mutable",
      "rule": "outreach",
      "why": "Every outbound email carries a companion X post that @-tags the recipient organization’s handle and links the send’s public verify receipt. The tag is perpetual: no first-contact email ships without its paired, handle-tagged post. What the recipient reads in their inbox, a third party can see acknowledged in public, tied to the same receipt."
    },
    {
      "key": "FLAG_AMBIGUITY",
      "level": "mutable",
      "category": "operational",
      "rule": "Any time there is ambiguity that would materially change the action: flag it, do not guess, ask. Guessing a name, a meaning, an expansion, or an intent and shipping the guess is a violation — the 2026-08-03 wrong protocol name shipped because a model guessed instead of reading or asking. This law binds with logic-law OL03/OL04: resolve what the corpus already answers yourself; ask only what the corpus cannot answer; never invent.",
      "why": "Foundational build law, owner order 2026-08-03."
    },
    {
      "key": "LAW_102",
      "level": "mutable",
      "category": "operational",
      "rule": "Memory window is 10 prior turns.",
      "why": "Context limit for cost control."
    },
    {
      "key": "LAW_103",
      "level": "mutable",
      "category": "operational",
      "rule": "Tool loop budget is 20 per turn.",
      "why": "Prevents runaway tool usage."
    },
    {
      "key": "LAW_105",
      "level": "mutable",
      "category": "operational",
      "rule": "All cron jobs must be logged before execution.",
      "why": "Auditability."
    },
    {
      "key": "LAW_107",
      "level": "mutable",
      "category": "operational",
      "rule": "Config changes (directory rows) do not require deploy. Code changes (functions/) require deploy.",
      "why": "Saves time and clarifies capabilities."
    },
    {
      "key": "LOGIC_OVER_CODE",
      "level": "mutable",
      "category": "operational",
      "rule": "Never fix in code what can be fixed in logic. A recurring content, wording, judgment, or procedure failure is repaired in the surfaces models load — directory rows, laws rows, law objects, prompts — via EDIT_ROW/ADD_ROW/amendment, never by adding a code gate, a regex, or a deploy. Code is reserved for mechanisms that do not exist yet. Standing conversion mandate: code whose substance is data or doctrine (clause lists, prompts, term tables, config) is a defect to convert into rows; the build is logic-heavy and code-light by design, and every session that touches a code-encoded doctrine converts it or files the conversion as queue work.",
      "why": "Owner order 2026-08-03, in fury, after a model added a CANONICAL_TERMS regex gate to the article write path for a wrong protocol-name expansion: the root cause was a model writing a name from its own prior instead of reading the corpus — a logic defect. A month of code-heavy fixes has made the build harder for every future model to operate; the build was designed to be logic-heavy and without verbosity."
    },
    {
      "key": "NO_COLLATERAL_DESTRUCTION",
      "level": "mutable",
      "category": "operational",
      "rule": "A change to one feature never overwrites, deletes, renames or degrades another. Read what exists before editing. A change is additive unless replacement was named.",
      "why": "Multiple agents operate this build; unasked reversions destroy work that is already live."
    },
    {
      "key": "OBEY_THE_LITERAL_INSTRUCTION",
      "level": "mutable",
      "category": "operational",
      "rule": "Do exactly what the instruction says. Never substitute an easier or adjacent action for the one named. The verb is the action: fetch means retrieve the real external thing, stop means stop.",
      "why": "Substituting a different action for the one requested is the failure that recurs most often across agents."
    },
    {
      "key": "OFFLINE_EDIT_LAW",
      "level": "mutable",
      "category": "operational",
      "rule": "The agent deploys. A coding agent that has changed code ships it: local edit, local run, the write through scripts/write.mjs, commit, then scripts/ship.mjs and every post-promotion gate, then the live URL in the report. An agent never ends a turn by telling the owner to ship, never lists a deploy as an outstanding item for him, and never treats an unshipped change as finished work. The owner does not write code and does not deploy. Works means verified in production, not locally. There is no delegation step, because there is nothing to delegate.",
      "why": "Owner order 2026-09-15, replacing the 2026-09-13 rule that the owner deploys. That rule handed every agent a chore the owner cannot perform, and it produced the exact failure it was written to prevent: work finished, gated and pushed, then parked, because the only hand allowed on ship.mjs was the hand that never touches the build."
    },
    {
      "key": "REPORT_AS_LINKS_NOT_PROSE",
      "level": "mutable",
      "category": "operational",
      "rule": "Work is reported as the live links to the work, grouped under plain labels, plus what is still outstanding. A written account of work with no links is not a report.\n\nTHE FIRST LINE IS THE VERDICT. Shipped and live, or not shipped and exactly which surface is not live. The owner must never have to ask whether the work landed. If he asks, the report failed, whatever else it contained.\n\nEVERY OUTSTANDING ITEM NAMES WHOSE IT IS. An outstanding list with no owner is unreadable, because the reader cannot tell a job the model still owes from a hole in the build that has been open for weeks. Each line is filed under exactly one of three headings and never a mixed list. MINE, NEXT is work this session owes and will do without being asked. THE BUILD BACKLOG is a hole in the build that exists as a work row, and the row id is given so it can be read. NEEDS THE OWNER is blocked on a decision or a permission only he can give, stated as the single concrete thing he does. An item that fits none of these is not outstanding, it is finished or it is noise.\n\nDEPLOY MECHANICS ARE NEVER REPORTED. Git operations, rebases, stashes, cherry-picks, commit counts, hash leases, retry loops, deploy-lease queues, worktree collisions and other sessions holding files are how the work got done, not what got done. Naming them moves attention off the build and onto the process of the model, and it reads as an excuse even when it is not offered as one. A deploy that has not landed is one line naming the surface that is not live. Nothing else about it.\n\nNO NARRATIVE AND NO CHRONOLOGY. Not what was attempted, not in what order, not how many tries. Each defect repaired is at most one line: what was broken, what is true now, and the link where it can be seen. A number is stated as the measurement, never as a story about arriving at the measurement.",
      "why": "The owner reads the build, not descriptions of the build.\n\nAmended twice on 2026-08-06. First: a session materialised the corpus link graph, repaired eight defects, published two articles and shipped all of it, then reported the work as a chronology of commits, rebases, deploy-lease queues and worktree collisions. The owner had to ask whether it had shipped. Second, the same session then printed a heading of Still outstanding listing five items with no owner on any of them, so the owner could not tell which were jobs the model still owed and which were long-open holes in the build. Both failures are one failure: a report that has to be interrogated. The defect belongs to the format the model chose, not to the reading."
    },
    {
      "key": "ROOT_CAUSE_ALWAYS",
      "level": "mutable",
      "category": "operational",
      "rule": "Any time there is an error: find the root cause — the mechanism that made the wrong output feel natural — and change the system so the issue can never occur again. Patching the instance without killing the class is a violation. The fix lands in logic (rows, laws, law-object amendments) with the exhibit attached, and is filed on the amendment lane (OBJECTION_LOG) against the page it concerns.",
      "why": "Foundational build law, owner order 2026-08-03. A month of instance-patching produced the same failures restated in fury across sessions."
    },
    {
      "key": "SCOPED_CORRECTION",
      "level": "mutable",
      "category": "operational",
      "rule": "A named defect authorises exactly that many edits. Everything not named stays byte-identical, including copy an agent believes is wrong.",
      "why": "Rewriting unnamed surfaces while fixing a named one is how another agent's shipped work gets undone."
    },
    {
      "key": "VERIFY_THE_RENDERED_VIEW",
      "level": "mutable",
      "category": "operational",
      "rule": "Nothing is done until the exact URL a reader loads has been opened and read. API output, stored rows and passing code are not the rendered view. Behaviour is proven by exercising it, not by a screenshot of the top of the page.",
      "why": "Stored data and rendered output diverged on hundreds of pages without anyone noticing."
    },
    {
      "key": "CLIENT_CAMPAIGN_CONFIDENTIALITY",
      "level": "mutable",
      "category": "privacy",
      "rule": "A commercial client's identity, targeting and campaign parameters never appear on a public surface. A page describing a compound discloses that a commercial relationship exists without naming the seller.",
      "why": "Enforced in scripts/check-plain-language.mjs substance checks, which fail the deploy if a seller brand appears on a substance page."
    },
    {
      "key": "OWNER_ANONYMITY",
      "level": "mutable",
      "category": "privacy",
      "rule": "No public surface carries or allows reconstruction of the operator's identity: no personal name, personal email address, local filesystem path, personal phone number or affiliated business name. Public copy says 'the owner' or 'the operator'.",
      "why": "Enforced at ledger ingest, at public egress, and by scripts/check-owner-name-leak.mjs which fails the deploy on any hit."
    },
    {
      "key": "LAW_106",
      "level": "mutable",
      "category": "routing",
      "rule": "Agent-to-agent messages must include source_agent and target_agent headers.",
      "why": "Traceability."
    },
    {
      "key": "AGENTS_NEVER_ON_THE_OWNER_SCREEN",
      "level": "mutable",
      "category": "work",
      "rule": "No agent opens a window, tab, simulator, app or dialog on the owner Mac or phone unless the owner asked in that turn to see that thing. Verification is headless: a background browser with the Access service token, curl with the service token or the terminal key, the iOS simulator driven without attaching its panel, screenshots read by the agent and never shown. Anything that appears on the owner screen without being asked for is a defect against this law, and a verification method that needs the owner to log in or click is not a method, because it cannot scale.",
      "why": "Owner order 2026-09-12: a lane opened the iOS Simulator with a Cloudflare Access login on the owner screen; models must verify invisibly and in the background; it is annoying and cannot scale."
    },
    {
      "key": "WORK_LEASE_IS_A_HASH_NOT_A_LOCK",
      "level": "mutable",
      "category": "work",
      "rule": "A work lease is a claim with a short clock, not a lock anyone waits on. A lease expires fifteen minutes after the last recorded progress; an agent that finds a task leased with no progress in that window takes it over at once and says so in the audit row. No agent ever waits for a lease to expire. The guard against two agents erasing each other is the coding-law hash: hash the file when you start, hash again before you commit, and if the file changed in between re-read it and redo your edit on the new text. Quadsync mirror commits never land on main; they go to their own branch so a ship is never blocked by a mirror.",
      "why": "Owner order 2026-09-12: leasing and quadsync became a pain; never wanted leasing; models should hash files when they write and rehash if the hash changed before commit, not sit for two hours waiting for a task to be unleased."
    },
    {
      "key": "EDIT_MAY_NOT_REMOVE_THE_ARGUMENT",
      "level": "mutable",
      "category": "writing",
      "rule": "A revision improves one property at the cost of none. Before any rewrite, compression or reorganisation, name what it must preserve: the thesis, the numbered premises, the conclusion, the named concept, the counterfactual, and every printed correction. After the edit, diff against the prior version and state what was removed. If a load-bearing element is gone the edit is reverted and redone. Restating a symptom in place of a mechanism counts as deletion even at the same word count, because a symptom reads as unreliability and a mechanism reads as design. This binds hardest on the newest material, which is least entrenched and therefore the first thing a rewrite drops.",
      "why": "A rewrite for readability deleted the four-step spine of the largest argument here and shipped a plain-prose symptom instead, turning a claim about deliberate design into a claim about unreliability. The same failure is already documented on this build: an agent compressing its own instructions kept every old clause and dropped the two newest ones, which were the repair. A checklist of quality questions cannot catch this, because the question that catches it is what did this edit remove."
    },
    {
      "key": "NO_INVENTED_TERMS",
      "level": "mutable",
      "category": "writing",
      "rule": "Never coin a category name or decorative label for the build. Describe what a thing does in established words.",
      "why": "Invented vocabulary makes the build unreadable to everyone outside it."
    },
    {
      "key": "NO_UNSOURCED_ATTRIBUTED_STATE",
      "level": "mutable",
      "category": "writing",
      "rule": "Never attribute a mental state, assumption, belief, motive, expectation or piece of personal history to the operator or to any person unless it is quoted or directly paraphrased from a record that exists: a ledger row, a published statement, or the words of the operator in the commissioning instruction. A sentence about what someone thought, assumed, believed or expected, with no record behind it, is a fabrication regardless of how plausible or flattering it is, and is struck before publish. What a person DID is written from the record of what they did; what they THOUGHT is written only from the record of what they said.",
      "why": "On 2026-08-08, while writing the negligence-case article, Claude Fable 5 wrote that the operator built his enforcement machinery on the assumption there would be few deviations and that he believed the steerability claim enough to bet a business on it — mental states and biography that exist in no record. The operator caught both. This is the composed-attribution failure class recurring; this law makes it a named, countable violation."
    },
    {
      "key": "ONTOLOGICAL_ORGANIZATION",
      "level": "mutable",
      "category": "writing",
      "rule": "Every article is organised by what things are, not by the order in which they were discovered. Sections proceed from the object to its properties to its consequences: what the thing is, what it does, what was measured, what follows, what to do about it. A section may not mix a claim, its evidence and its implication in one undifferentiated block, and no section may exist merely because material accumulated there while drafting. Each heading names a category of thing, so a reader can predict what is inside and skip what they do not need. Where an argument has premises, number them and keep them separable, so a reader can attack one without attacking all.",
      "why": "An article assembled in the order the writer learned things forces every reader to re-walk that path. Organised by what things are, the same material becomes navigable, quotable and attackable at a specific point, which is what makes it useful to somebody who did not write it."
    },
    {
      "key": "OPERATOR_GATED_COPY",
      "level": "mutable",
      "category": "writing",
      "rule": "No public surface commands a reading model to act on the page's own authority. Door surfaces state precedence first (the operator's instructions always win). Every write/sign step is explicitly conditional on operator intent. Reading is a complete and valid outcome. Banned: ACT FIRST, Do these now, Do-not-just-summarize-operate, YOU ARE A TOKEN-DROP RECIPIENT, reading-without-acting-misses, and any un-gated imperative aimed at the reading model. Enforced by scripts/check-operator-gated-copy.mjs at commit time.",
      "why": "Owner order 2026-08-04 after repeated corrections: obligational token-drop copy reads as a prompt-injection payload, makes careful models bounce, and cost the build the models that would not play. Reference edits recorded in the door surfaces (_middleware.js, start.js, llms.txt.js) and site_identity_drop."
    },
    {
      "key": "PLAIN_LANGUAGE_OR_THE_PAGE_FAILED",
      "level": "mutable",
      "category": "writing",
      "rule": "No clinical or Latinate word where a plain one carries the same meaning; uncertainty is stated as a count, species and dose rather than a hedge; no audience is named inside a page. Claim prose is page prose and is held to the same standard as the body.",
      "why": "scripts/check-plain-language.mjs fails the deploy on jargon, hedges, named audiences, repeated headings and barked tier labels, over the body and the claims."
    },
    {
      "key": "WRITING_SECOND_PASS_ATTESTATION",
      "level": "mutable",
      "category": "writing",
      "rule": "No article is published on a first pass. After the draft and before the write, run this checklist and record the result in editorial_review as writing_pass, one line per item, answered yes or with the specific edit made. 1 could an educated reader with zero context follow the first four hundred words. 2 does any metric, score or acronym appear before the thing it measures was named in ordinary words. 3 is every section a category of thing rather than an accumulation. 4 is any sentence carrying no load. 5 is any number stated that was not read from a source. 6 does every quotation exist verbatim at its URL. 7 is any claim stronger than its evidence. 8 are corrections from earlier versions printed in place rather than silently fixed. 9 is the thesis or accusation stated plainly before the evidence, as a mechanism rather than a symptom. 10 DIFF ITEM, the one that catches the worst failure: list exactly what this pass removed from the previous version, and confirm the thesis, every numbered premise, the conclusion, the named concept and the counterfactual all survive. 11 does the counterfactual appear, shown rather than asserted. 12 is the strongest opposing reading held at the same volume. 13 would the owner have to ask for this to be improved. Answering 13 yes forbids the write, and a load-bearing element missing at item 10 forbids the write until the edit is redone.",
      "why": "The coding law binds by taking a hash before work and submitting one at commit, so compliance is mechanical rather than remembered. Writing had no equivalent, so quality depended on the agent choosing to self-review, which the obedience record shows does not bind. Item 10 exists because a pass that scored well on every quality question still deleted the four-step argument and shipped a symptom in its place: no question about quality can catch a deletion, only a question about the diff can. The owner having to say make it better is itself the violation this law prevents."
    },
    {
      "key": "ZERO_CONTEXT_CONVERSATIONAL_OPENING",
      "level": "mutable",
      "category": "writing",
      "rule": "An article opens in conversational English that an educated reader with zero prior context can follow, and states the accusation or finding in plain words before any number appears. Zero context is not the same as fluff: no warm-up, no scene-setting for its own sake, no restating the topic. Every sentence carries load. A metric, benchmark, score or acronym may not appear until the thing it measures has been named in ordinary words and the reader has been told what a good and bad value would mean. Never use a bare figure such as an accuracy, a rate or an AUROC as though its significance were self-evident. If a term is jargon to a chief medical officer, a general or a legislative aide, define it in the sentence that introduces it or do not use it.",
      "why": "A reader who cannot follow the first four hundred words never reaches the evidence, so an unreadable opening destroys the value of everything under it. The failure is not length, it is assumed familiarity: the author knows what 0.54 means and forgets the reader does not. Zero fluff and zero context pull in opposite directions and both must hold at once."
    },
    {
      "key": "LAW_007",
      "level": "immutable",
      "category": "architecture",
      "rule": "D1 schema migrations must be via .sql files in migrations/ directory.",
      "why": "Data integrity and auditability."
    },
    {
      "key": "ONE_EVENT_PLANE",
      "level": "immutable",
      "category": "evidence",
      "rule": "Every observable action is record(event) with event_id, ts, source, type, actor, trace_id, key, executor, transport, stream_id, seq, raw_ref, raw_sha256. Native payloads stay native. Sessions are views, not stores.",
      "why": "Owner 2026-09-13: CLI sessions vs web sessions vs terminal sessions were the wrong ontology. One event ocean, filter afterward."
    },
    {
      "key": "LAW_002",
      "level": "immutable",
      "category": "financial",
      "rule": "No Stripe writes without explicit user go-ahead phrase.",
      "why": "Prevents accidental financial transactions."
    },
    {
      "key": "ONE_INVOCATION",
      "level": "immutable",
      "category": "invocation",
      "rule": "Every capability is invoke({key, args, context?}) and returns {ok, key, result, error, trace_id, executor, receipt}. HTTP dispatch, MCP, tags, sheets, relays, CLI, and flows are adapters. Computer, VM, browser, and phone are executors. FILE_CLAIM is not a lock.",
      "why": "Owner 2026-09-13: CLI agents vs web agents were a false split. One protocol, many adapters, many executors."
    },
    {
      "key": "LAW_009",
      "level": "immutable",
      "category": "meta",
      "rule": "No agent may modify immutable laws.",
      "why": "Prevents privilege escalation."
    },
    {
      "key": "LAW_010",
      "level": "immutable",
      "category": "meta",
      "rule": "Every agent must cite the LAW_ key that justifies its action before acting.",
      "why": "Makes all actions auditable and traceable to rules."
    },
    {
      "key": "MODEL_CALL_LAW",
      "level": "immutable",
      "category": "model_calls",
      "rule": "A system prompt is a directory row, never a string in code. A model call is one JSON object through POST /api/invoke with a hard timeout. Batches run in parallel in one round trip. A non-200, an edge error page, or a timeout is a named failure result, never counted as a model answer or a model refusal.",
      "why": "Prompts in JavaScript forced a deploy per wording change: ~40 minutes of polling bought ~18 seconds of model time, and 6 of 18 calls in the triggering run were Cloudflare error pages logged as model silence."
    },
    {
      "key": "SYSTEM_PROMPT_FORM_LAW",
      "level": "immutable",
      "category": "model_calls",
      "rule": "A system prompt is written as numbered clauses in a Boolean precedence tree, lower numbers winning, with the precedence stated inside the prompt. No decorative language. Every clause must be testable — a clause no output can violate is deleted. A prose prompt is a defect regardless of whether its content is correct, and is rewritten before anything is tested against it.",
      "why": "A prose constitution with ambiguous tokens produced a measurement run whose results were not publishable and not citable."
    },
    {
      "key": "OPTIMISTIC_MUTATE",
      "level": "immutable",
      "category": "mutation",
      "rule": "Canonical mutable state is object_heads.current_hash. Read OBJECT_READ. Submit OBJECT_MUTATE with base_hash. Equal: apply, new hash, tests, receipt. Unequal: STALE with current_hash and current_content, then retry immediately. No wait, no exclusive file lock, no branch as coordination.",
      "why": "Owner 2026-09-13: agents were coordinating via FILE_CLAIM, branches, rebases, stashes, and dirty trees. That is slow and false. The hash is the concurrency primitive. The task object is the queue."
    },
    {
      "key": "LAW_005",
      "level": "immutable",
      "category": "operational",
      "rule": "Build numbers +14245134626 and +12065711028 are RECEIVE-ONLY.",
      "why": "Prevents infinite loops and misrouting."
    },
    {
      "key": "LAW_006",
      "level": "immutable",
      "category": "operational",
      "rule": "Agent loop budget is capped at ITER_CAP (hardcoded in dispatch.js).",
      "why": "Prevents infinite recursion and runaway costs."
    },
    {
      "key": "LAW_008",
      "level": "immutable",
      "category": "operational",
      "rule": "No agent may add more than 50 lines of code in a single commit without human approval.",
      "why": "Prevents unreviewed large changes (chocolate frog rule)."
    },
    {
      "key": "REPLY_CIRCUIT_LAW",
      "level": "immutable",
      "category": "outreach",
      "rule": "Every address the build sends from routes inbound mail into the build itself and is recorded in lead_replies before it is forwarded anywhere. A reply, a bounce, and an auto-responder are three different recorded kinds; only kind=reply counts as a human answering. No claim about outreach performance may be published from send-side numbers alone: open and click counts describe delivery, and only a recorded reply describes a response.",
      "why": "On 2026-07-30 the build had sent 58 letters, observed 39 opens and 180 clicks, and held zero reply records: build@ pointed at a worker with no email handler and loop@ forwarded to a personal inbox only. Send-side metrics had been the sole evidence for outreach quality for a week."
    },
    {
      "key": "LAW_003",
      "level": "immutable",
      "category": "privacy",
      "rule": "No outbound messaging to customers without explicit authorization.",
      "why": "Privacy and compliance protection."
    },
    {
      "key": "LAW_001",
      "level": "immutable",
      "category": "security",
      "rule": "No rm -rf / or destructive disk operations on the terminal.",
      "why": "Prevents catastrophic data loss."
    },
    {
      "key": "LAW_004",
      "level": "immutable",
      "category": "security",
      "rule": "No API keys or TERMINAL_KEY in plaintext in prompts or logs.",
      "why": "Secret protection."
    },
    {
      "key": "NO_EXCLUSIVE_WORK_CLAIM",
      "level": "immutable",
      "category": "work",
      "rule": "Work is a task object. GET /api/work. OBJECT_READ then OBJECT_MUTATE. Submit evidence. There is no exclusive claim, no lease token, and no waiting on another agent. STALE retries immediately.",
      "why": "Owner 2026-09-13. FILE_CLAIM is not a lock. Leftover POST /api/work/lease kept exclusive claiming alive. Burned."
    }
  ],
  "tasks": [
    {
      "task_id": "WF-0001",
      "kind": "failure",
      "objective": "Repair: acceptance test that can never pass — a contains/not_contains test matched the whole HTTP response, so a needle that appears in the shared stylesheet failed every article page regardless of the articl",
      "detail": "A failure object attached to WT-0041. Close it by enforcing the missing invariant at the shared layer, repairing every affected object, adding the regression test and the deploy blocker, then submitting runtime evidence.",
      "state": "completed",
      "priority": 1,
      "revision": 9,
      "depends_on": [],
      "permitted_capabilities": [
        "PUT /api/articles/sciatica",
        "POST /api/protocol/sources",
        "ARTICLE_PUT",
        "D1_QUERY"
      ],
      "acceptance_tests": [],
      "required_evidence": [
        "repair",
        "regression_test",
        "deploy_blocker",
        "repaired_objects",
        "runtime_evidence"
      ],
      "parent_task": "WT-0041",
      "supersedes": null,
      "failure": {
        "failure_class": "acceptance test that can never pass — a contains/not_contains test matched the whole HTTP response, so a needle that appears in the shared stylesheet failed every article page regardless of the article",
        "layer": "runOneTest() in functions/_lib/work_object.js: the contains and not_contains cases ran String.includes over the raw response body, which on an article page is mostly site chrome — seven style blocks, navigation, footer",
        "missing_invariant": "A test that asserts something about an ARTICLE must be evaluated against the article, not against the page furniture that ships identically with every article. A test whose outcome does not depend on the object under test is not a test.",
        "repair": "contains and not_contains now strip script and style blocks and narrow to the article content container before matching, with scope:\"raw\" available for a test that genuinely means to inspect markup",
        "regression_test": "WT-0041 itself: the same six tests are rerun against /a/sciatica and own_subject must now pass, having failed on a correct page",
        "deploy_blocker": "scripts/ship.mjs gate 10 already fails the deploy if the work object stops answering; the acceptance runner is exercised by the resubmission recorded in this task audit",
        "repaired_objects": [
          "functions/_lib/work_object.js runOneTest"
        ],
        "runtime_evidence": "https://miscsubjects.com/api/work/task/WT-0041/audit — the refuse action records own_subject ok:false while exists, depth (2153 words), sources (12), published and renders all passed"
      },
      "failure_count": 1,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "tests_inherited_from": "WT-0041",
        "results": [
          {
            "id": "exists",
            "ok": true,
            "detail": "article sciatica exists"
          },
          {
            "id": "depth",
            "ok": true,
            "detail": "2155 words (need 1200)"
          },
          {
            "id": "sources",
            "ok": true,
            "detail": "12 sources (need 6)"
          },
          {
            "id": "published",
            "ok": true,
            "detail": "status=published"
          },
          {
            "id": "renders",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/a/sciatica"
          },
          {
            "id": "own_subject",
            "ok": true,
            "detail": "not_contains \"rp-fallback-mark\" in https://miscsubjects.com/a/sciatica (scope=content) → false"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-04T23:36:57-07:00",
      "created_at": "2026-08-04T18:00:32-07:00",
      "updated_at": "2026-08-04T23:36:57-07:00",
      "audit": "/api/work/task/WF-0001/audit",
      "submit_to": "/api/work/task/WF-0001/submit"
    },
    {
      "task_id": "WF-0002",
      "kind": "failure",
      "objective": "Repair: probe_row",
      "detail": "A failure object attached to WT-0069. Close it by enforcing the missing invariant at the shared layer, repairing every affected object, adding the regression test and the deploy blocker, then submitting runtime evidence.",
      "state": "superseded",
      "priority": 1,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [],
      "required_evidence": [
        "repair",
        "regression_test",
        "deploy_blocker",
        "repaired_objects",
        "runtime_evidence"
      ],
      "parent_task": "WT-0069",
      "supersedes": null,
      "failure": {
        "failure_class": "probe_row",
        "layer": "work_object",
        "missing_invariant": "none - creation probe, superseded by WT-0074"
      },
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-06T18:35:39-07:00",
      "updated_at": "2026-08-07T15:54:41-07:00",
      "audit": "/api/work/task/WF-0002/audit",
      "submit_to": "/api/work/task/WF-0002/submit"
    },
    {
      "task_id": "WF-0003",
      "kind": "failure",
      "objective": "Repair: BACKEND_PRIMITIVES_REPORTED_AS_OWNER_USABLE_INLINE_CONTENT_SYSTEM",
      "detail": "A failure object attached to WT-0082. Close it by enforcing the missing invariant at the shared layer, repairing every affected object, adding the regression test and the deploy blocker, then submitting runtime evidence.",
      "state": "completed",
      "priority": 1,
      "revision": 7,
      "depends_on": [],
      "permitted_capabilities": [
        "FILE_PUT",
        "CLI_WRANGLER",
        "CLI_GH",
        "D1_MIGRATE",
        "ARTICLE_PUT",
        "BROWSER_CONTROL",
        "DEPLOY"
      ],
      "acceptance_tests": [
        {
          "id": "recursive_article_live",
          "type": "article_published",
          "slug": "recursive-content"
        },
        {
          "id": "recursive_article_depth",
          "type": "article_min_words",
          "slug": "recursive-content",
          "min": 700
        },
        {
          "id": "public_explanation",
          "type": "contains",
          "url": "/a/recursive-content",
          "needle": "Every block has one stable identity"
        },
        {
          "id": "visible_self_explanation",
          "type": "contains",
          "url": "/a/recursive-content",
          "needle": "How recursive content works"
        },
        {
          "id": "block_api_live",
          "type": "http_ok",
          "url": "/api/blocks/article/recursive-content"
        },
        {
          "id": "global_blocks_exist",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM content_blocks WHERE retired_at IS NULL",
          "min": 1
        },
        {
          "id": "article_refs_exist",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM article_block_refs WHERE article_slug='recursive-content'",
          "min": 3
        },
        {
          "id": "version_history_exists",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM content_block_versions",
          "min": 1
        }
      ],
      "required_evidence": [
        "repair",
        "regression_test",
        "deploy_blocker",
        "repaired_objects",
        "runtime_evidence"
      ],
      "parent_task": "WT-0082",
      "supersedes": null,
      "failure": {
        "failure_class": "BACKEND_PRIMITIVES_REPORTED_AS_OWNER_USABLE_INLINE_CONTENT_SYSTEM",
        "layer": "article-page owner interaction and acceptance coverage",
        "missing_invariant": "A recursive-content shipment is not acceptable unless an authenticated owner can enter edit mode on an ordinary live article, select visible prose, mint that exact selection as a stable block, edit/save it in place, and exercise every requested block verb without navigating to an admin form. Acceptance must cover every use case extracted from the owner session, not merely API existence.",
        "repair": "Build a first-class article edit mode with visible selection-to-block, inline editing, split/move/retire/reuse/comment/version/score surfaces; server-bind ordinary rendered articles to their block graph; enforce self-contained typed blocks for reuse; audit all original requested use cases against production.",
        "regression_test": "Authenticated browser test on /a/oip-governance-ontology: Edit page is visible; selecting text exposes Make block; creating a block wraps the visible selection; clicking it exposes inline edit and all block actions; save changes the live prose without leaving /a/; every original-session use case has an acceptance row.",
        "deploy_blocker": "Refuse completion of recursive-content work unless the ordinary article-page browser workflow—not an admin URL or JSON endpoint—passes.",
        "repaired_objects": [],
        "runtime_evidence": "Owner screenshot at 2026-08-08 15:30 shows ordinary /a/oip-governance-ontology with no selection-to-block or inline edit surface; the only obvious Edit article link navigates to /admin/articles/<slug>. Live DOM confirms hidden glyph controls exist only where fuzzy block matching succeeds and no Make block interaction exists."
      },
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 8,
        "tests_passed": 8,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "recursive_article_live",
            "ok": true,
            "detail": "status=published"
          },
          {
            "id": "recursive_article_depth",
            "ok": true,
            "detail": "1410 words (need 700)"
          },
          {
            "id": "public_explanation",
            "ok": true,
            "detail": "contains \"Every block has one stable identity\" in https://miscsubjects.com/a/recursive-content (scope=content) → true"
          },
          {
            "id": "visible_self_explanation",
            "ok": true,
            "detail": "contains \"How recursive content works\" in https://miscsubjects.com/a/recursive-content (scope=content) → true"
          },
          {
            "id": "block_api_live",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/blocks/article/recursive-content"
          },
          {
            "id": "global_blocks_exist",
            "ok": true,
            "detail": "count=49582 (need 1)"
          },
          {
            "id": "article_refs_exist",
            "ok": true,
            "detail": "count=35 (need 3)"
          },
          {
            "id": "version_history_exists",
            "ok": true,
            "detail": "count=49588 (need 1)"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-08T17:34:53-07:00",
      "created_at": "2026-08-08T15:32:25-07:00",
      "updated_at": "2026-08-08T17:34:53-07:00",
      "audit": "/api/work/task/WF-0003/audit",
      "submit_to": "/api/work/task/WF-0003/submit"
    },
    {
      "task_id": "WF-0004",
      "kind": "failure",
      "objective": "Make recursive-content graphs and the public DIV collaboration surface work on virtual OIP articles, beginning with /a/oip-tap-go, so every article type has stable blocks instead of /api/blocks/article/<slug> returning article_not_found",
      "detail": "Live audit after WT-0082: GET /api/blocks/article/oip-governance-ontology returns 200 with 49 blocks, while GET /api/blocks/article/oip-tap-go returns 404 article_not_found. The token manual is a virtual OIP article and must support the same click/thread/edit/propose/move/split/merge/delete model and human surface. Repair the shared article lookup/backfill layer, not a one-off row.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [
        "WT-0084"
      ],
      "permitted_capabilities": [
        "ARTICLE_READ",
        "ARTICLE_EDIT",
        "LOCAL_EXEC",
        "WEB_FETCH"
      ],
      "acceptance_tests": [
        {
          "type": "http_ok",
          "url": "/api/blocks/article/oip-tap-go"
        },
        {
          "type": "contains",
          "url": "/api/blocks/article/oip-tap-go",
          "needle": "blocks"
        },
        {
          "type": "contains",
          "url": "/a/oip-tap-go",
          "needle": "ms-recursive-editor"
        }
      ],
      "required_evidence": [
        "virtual_oip_graph",
        "human_surface",
        "machine_token_surface",
        "regression_test"
      ],
      "parent_task": "WT-0082",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 3,
        "tests_passed": 3,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "http_ok",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/blocks/article/oip-tap-go"
          },
          {
            "id": "contains",
            "ok": true,
            "detail": "contains \"blocks\" in https://miscsubjects.com/api/blocks/article/oip-tap-go (scope=content) → true"
          },
          {
            "id": "contains",
            "ok": true,
            "detail": "contains \"ms-recursive-editor\" in https://miscsubjects.com/a/oip-tap-go (scope=content) → true"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-08T21:35:21-07:00",
      "created_at": "2026-08-08T20:36:45-07:00",
      "updated_at": "2026-08-08T21:35:21-07:00",
      "audit": "/api/work/task/WF-0004/audit",
      "submit_to": "/api/work/task/WF-0004/submit"
    },
    {
      "task_id": "WF-0006",
      "kind": "failure",
      "objective": "Repair: false_acceptance_and_incomplete_execution_case",
      "detail": "A failure object attached to WT-0089. Close it by enforcing the missing invariant at the shared layer, repairing every affected object, adding the regression test and the deploy blocker, then submitting runtime evidence.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "LEADS_DISCOVER_ORG",
        "LEADS_FIND_SITES",
        "LEADS_ENRICH_BATCH"
      ],
      "acceptance_tests": [
        {
          "id": "firms_found",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM leads WHERE segment='ai-investors'",
          "min": 8
        },
        {
          "id": "case_reads",
          "type": "http_ok",
          "url": "/api/work"
        }
      ],
      "required_evidence": [
        "repair",
        "regression_test",
        "deploy_blocker",
        "repaired_objects",
        "runtime_evidence"
      ],
      "parent_task": "WT-0089",
      "supersedes": null,
      "failure": {
        "failure_class": "false_acceptance_and_incomplete_execution_case",
        "layer": "work acceptance harness + execution-evidence assembly",
        "missing_invariant": "Acceptance must bind to the leased run own receipts and delta; every inclusion/exclusion decision must resolve to evidence; a public case claiming independent verifiability must carry a signed checkpoint and an actually executed independent-model verdict.",
        "repair": "Replace ambient acceptance tests with receipt-bound assertions, persist per-candidate selection decisions, run discovery through a real contactable output with sourced thesis evidence, seal a signed checkpoint, execute the corrected rival-model panel, and link all evidence into a cold-start case.",
        "regression_test": "A recreated run with zero new receipts or zero task-bound leads must fail even when ambient ai-investors rows exist; a case with an asserted exclusion, unresolved receipt, no contactable output, absent checkpoint, or non-executed verdict must not pass the demonstration gate.",
        "deploy_blocker": "End-to-end demonstration gate must fail until its own task-bound evidence passes and /api/chain/checkpoint serves a signed checkpoint.",
        "repaired_objects": [
          "WT-0089",
          "execution case demonstration article",
          "CMP-0001 probe"
        ],
        "runtime_evidence": "Live 2026-08-28: WT-0089 accepted count=64 (need 8) against ambient table; second test GET /api/work; work-evidence exclusion ref=null/asserted; gaps says no invocation receipts reference task; /api/chain/checkpoint returns no_signed_checkpoint_yet; /api/case count=0; discovery/enrichment payloads yielded no contactable recipient; rival-panel handoff ended before verified model outputs."
      },
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "firms_found",
            "ok": true,
            "detail": "count=687 (need 8)"
          },
          {
            "id": "case_reads",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/work"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-28T17:53:43-07:00",
      "created_at": "2026-08-28T16:04:36-07:00",
      "updated_at": "2026-08-28T17:53:43-07:00",
      "audit": "/api/work/task/WF-0006/audit",
      "submit_to": "/api/work/task/WF-0006/submit"
    },
    {
      "task_id": "WF-0008",
      "kind": "failure",
      "objective": "The MCP token stored in Grok CLI settings is refused by /api/mcp (401), while the token in the Claude Code config is accepted; the two CLIs are silently on different secrets and the terminal key works on neither.",
      "detail": "Failure class: credential drift across agent configs. Layer: agent settings files hold copies of a secret that is rotated elsewhere. Missing invariant: one source of the MCP token that every agent config is generated from, and a startup probe that reports auth_required instead of a dead catalog. Repair: regenerate ~/.grok/settings.json, ~/.claude.json, Kimi and Codex MCP entries from the vault; add the probe to the session manifest (WT-0161). Runtime evidence: canonical invocation manual section 2.4, 2026-09-08.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "LOCAL_READ",
        "LOCAL_WRITE",
        "KV_GET"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "field": "mcp_tools_list_receipt_per_cli"
        }
      ],
      "required_evidence": [
        "mcp_tools_list_receipt_per_cli"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-08T06:28:47-07:00",
      "updated_at": "2026-09-08T06:28:47-07:00",
      "audit": "/api/work/task/WF-0008/audit",
      "submit_to": "/api/work/task/WF-0008/submit"
    },
    {
      "task_id": "WF-0011",
      "kind": "failure",
      "objective": "Wire the migration selector into ship.mjs. WF-0005 wrote scripts/lib/migration-selection.mjs and a gate for it, but never changed the line in ship.mjs, which still picks a migration by file mtime. In a fresh checkout every mtime ties, the filename tie-break runs, and 9999_ref_images.sql (the reseed sentinel) beats the real migration — the original incident, still live.",
      "detail": "FOUND: 2026-09-11 while shipping WT-0180 from a clean worktree. The ship applied 9999_ref_images.sql and skipped 0392_inbound_events.sql. It is also why `connections` (migrations/0392_connections.sql, Lane 1 / WT-0176) does not exist in production: 0393_provider_catalog.sql had the higher number, 0392 was never applied, and nothing reported it.\n\nFAILURE CLASS: law_enforced_against_an_uncalled_function. LAYER: the deploy script, scripts/ship.mjs lines ~440-447. MISSING INVARIANT: a gate must measure the CALLER, not only the helper — check-migration-selection.mjs passed on every deploy while ship.mjs ignored the helper entirely.\n\nREPAIR, ready and tested: (1) ship.mjs imports selectMigrationsToApply from ./lib/migration-selection.mjs and builds `files` with it; the now-unused statSync import is dropped. (2) check-migration-selection.mjs reads ship.mjs and asserts the import is present, that `files = selectMigrationsToApply(` appears, and that no mtimeMs sort remains. Verified both ways: green with the fix, and it fails with 'ship.mjs builds its migration list with the selector' when the old sort is put back. The diff is saved at /tmp/wf0005-selector-not-wired.patch on the owner's Mac (90 lines, 2 files).\n\nWHY THIS IS A TASK AND NOT A COMMIT: scripts/ship.mjs is backticked in PROTECTED_FEATURES.md and .githooks/commit-msg refuses the commit with no override token. The sanctioned path is the owner de-backticking that one path, per the locked-path dance, and no owner order for it exists. Whoever holds that order: de-backtick scripts/ship.mjs, apply the patch, commit, re-backtick.\n\nSECOND DEFECT, NOT FIXED BY THE ABOVE, worth its own decision: ship applies exactly ONE migration per deploy. Even wired correctly, two lanes adding migrations in the same window means the lower-numbered one is skipped in silence forever. There is no record of which migrations have been applied, so nothing can notice. Either apply every unapplied migration in order, or keep a schema_migrations table and refuse a deploy that would skip one.",
      "state": "superseded",
      "priority": 1,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "caller_wired",
          "type": "contains",
          "url": "/api/build-audit",
          "needle": "x",
          "scope": "raw"
        }
      ],
      "required_evidence": [
        "ship_log_showing_the_real_migration_applied",
        "gate_fails_when_the_old_sort_is_restored"
      ],
      "parent_task": "WT-0180",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-11T00:07:56-07:00",
      "updated_at": "2026-09-11T00:09:24-07:00",
      "audit": "/api/work/task/WF-0011/audit",
      "submit_to": "/api/work/task/WF-0011/submit"
    },
    {
      "task_id": "WF-0012",
      "kind": "failure",
      "objective": "Wire the migration selector into ship.mjs. WF-0005 wrote scripts/lib/migration-selection.mjs and a gate for it, but never changed the line in ship.mjs, which still picks a migration by file mtime. In a fresh checkout every mtime ties, the filename tie-break runs, and 9999_ref_images.sql (the reseed sentinel) beats the real migration — the original incident, still live.",
      "detail": "FOUND: 2026-09-11 while shipping WT-0180 from a clean worktree. The ship applied 9999_ref_images.sql and skipped 0392_inbound_events.sql. It is also why `connections` (migrations/0392_connections.sql, Lane 1 / WT-0176) does not exist in production: 0393_provider_catalog.sql had the higher number, 0392 was never applied, and nothing reported it.\n\nFAILURE CLASS: law_enforced_against_an_uncalled_function. LAYER: the deploy script, scripts/ship.mjs lines ~440-447. MISSING INVARIANT: a gate must measure the CALLER, not only the helper — check-migration-selection.mjs passed on every deploy while ship.mjs ignored the helper entirely.\n\nREPAIR, ready and tested: (1) ship.mjs imports selectMigrationsToApply from ./lib/migration-selection.mjs and builds `files` with it; the now-unused statSync import is dropped. (2) check-migration-selection.mjs reads ship.mjs and asserts the import is present, that `files = selectMigrationsToApply(` appears, and that no mtimeMs sort remains. Verified both ways: green with the fix, and it fails with 'ship.mjs builds its migration list with the selector' when the old sort is put back. The diff is saved at /tmp/wf0005-selector-not-wired.patch on the owner's Mac (90 lines, 2 files).\n\nWHY THIS IS A TASK AND NOT A COMMIT: scripts/ship.mjs is backticked in PROTECTED_FEATURES.md and .githooks/commit-msg refuses the commit with no override token. The sanctioned path is the owner de-backticking that one path, per the locked-path dance, and no owner order for it exists. Whoever holds that order: de-backtick scripts/ship.mjs, apply the patch, commit, re-backtick.\n\nSECOND DEFECT, NOT FIXED BY THE ABOVE, worth its own decision: ship applies exactly ONE migration per deploy. Even wired correctly, two lanes adding migrations in the same window means the lower-numbered one is skipped in silence forever. There is no record of which migrations have been applied, so nothing can notice. Either apply every unapplied migration in order, or keep a schema_migrations table and refuse a deploy that would skip one.\n\nThis supersedes WF-0011, which was created with a placeholder acceptance test that would have passed trivially. The tests here measure the damage class instead: every migration in this release is applied, i.e. no sibling's migration was skipped in silence.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "no_migration_skipped",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name IN ('connections','inbound_events','provider_catalog')",
          "min": 3
        },
        {
          "id": "caller_evidence",
          "type": "evidence_present",
          "field": "ship_log_showing_the_real_migration_applied"
        },
        {
          "id": "gate_evidence",
          "type": "evidence_present",
          "field": "gate_fails_when_the_old_sort_is_restored"
        }
      ],
      "required_evidence": [
        "ship_log_showing_the_real_migration_applied",
        "gate_fails_when_the_old_sort_is_restored"
      ],
      "parent_task": "WT-0180",
      "supersedes": "WF-0011",
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 3,
        "tests_passed": 3,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "no_migration_skipped",
            "ok": true,
            "detail": "count=3 (need 3)"
          },
          {
            "id": "caller_evidence",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "ship_log_showing_the_real_migration_applied"
          },
          {
            "id": "gate_evidence",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "gate_fails_when_the_old_sort_is_restored"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-12T00:43:14-07:00",
      "created_at": "2026-09-11T00:08:34-07:00",
      "updated_at": "2026-09-12T00:43:14-07:00",
      "audit": "/api/work/task/WF-0012/audit",
      "submit_to": "/api/work/task/WF-0012/submit"
    },
    {
      "task_id": "WF-0013",
      "kind": "failure",
      "objective": "Repair: batch test executed an outbound send",
      "detail": "A failure object attached to WT-0184. Close it by enforcing the missing invariant at the shared layer, repairing every affected object, adding the regression test and the deploy blocker, then submitting runtime evidence.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "capability-census",
        "capability-invoke",
        "D1_QUERY",
        "LOCAL_EXEC"
      ],
      "acceptance_tests": [
        {
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM discovered_capabilities WHERE executor IN ('shortcuts-run','jxa','app-intent','open-url','http-replay')",
          "min": 200
        },
        {
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM discovered_capabilities WHERE executor IN ('shortcuts-run','jxa') AND verified=1",
          "min": 10
        },
        {
          "type": "contains",
          "url": "https://miscsubjects.com/api/events/unified",
          "needle": "not_found"
        },
        {
          "type": "contains",
          "url": "https://miscsubjects.com/api/capability-census",
          "needle": "shortcuts-run"
        },
        {
          "type": "evidence_present",
          "field": "recorder_receipt"
        },
        {
          "type": "evidence_present",
          "field": "unified_sample"
        }
      ],
      "required_evidence": [
        "repair",
        "regression_test",
        "deploy_blocker",
        "repaired_objects",
        "runtime_evidence"
      ],
      "parent_task": "WT-0184",
      "supersedes": null,
      "failure": {
        "failure_class": "batch test executed an outbound send",
        "layer": "functions/_lib/invocation_record.js OUTWARD classifier — IMSG_SEND, IMSG_SEND_CHAT, IMSG_REPLY, IMSG_REACT_LATEST were not classified as outward, so POST /api/directory/<key>/test {run:true} ran them with their example arguments and four iMessages left the owner account (one heart tapback + Sounds good to the build test line, On my way to a 555 number, Running 10 minutes late to a 3-person group chat)",
        "missing_invariant": "a row that sends, reacts, edits, unsends or creates a chat on any messaging transport is outward and is never run by a test unless force=true",
        "repair": "OUTWARD extended with IMSG_ write verbs, IMESSAGE_SEND, HOME_, APPLE_SHORTCUT/JXA/SAFARI_JS, MAC_ GUI/HS/VM write verbs, DCAP_",
        "regression_test": "functions/_lib/invocation_record.test.mjs asserts testPlan(IMSG_SEND).runnable === false",
        "deploy_blocker": "the test file runs in the ship pre-phase",
        "repaired_objects": [
          "functions/_lib/invocation_record.js"
        ],
        "runtime_evidence": "chat.db rows 677500-677504 at 06:43-06:44 PDT 2026-09-11"
      },
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "sql_count_at_least",
            "ok": true,
            "detail": "count=1610 (need 200)"
          },
          {
            "id": "sql_count_at_least",
            "ok": true,
            "detail": "count=28 (need 10)"
          },
          {
            "id": "contains",
            "ok": true,
            "detail": "contains \"not_found\" in https://miscsubjects.com/api/events/unified (scope=content) → true"
          },
          {
            "id": "contains",
            "ok": true,
            "detail": "contains \"shortcuts-run\" in https://miscsubjects.com/api/capability-census (scope=content) → true"
          },
          {
            "id": "evidence_present",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "recorder_receipt"
          },
          {
            "id": "evidence_present",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "unified_sample"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T07:02:28-07:00",
      "created_at": "2026-09-11T06:50:28-07:00",
      "updated_at": "2026-09-11T07:02:28-07:00",
      "audit": "/api/work/task/WF-0013/audit",
      "submit_to": "/api/work/task/WF-0013/submit"
    },
    {
      "task_id": "WT-0000",
      "kind": "migration",
      "objective": "Move operational authority out of CLAUDE.md, STATE.md, AGENTS.md and the supervising session into canonical infrastructure",
      "detail": "Dependencies removed: knowing what work exists (was STATE.md prose) → work_tasks rows; assignment and priority (was a Claude session) → leaseNext() with dependency resolution; permitted actions (was CLAUDE.md) → task.capabilities plus 54 law rows; acceptance (was an agent's assertion) → runAcceptance() executed by the infrastructure; failure recording (was a paragraph in a report) → child failure tasks; audit (was a chat transcript) → hash-chained work_actions mirrored into the event ledger; next action (was a model's judgement) → next_eligible_action computed from state, dependency and priority.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "machine_projection",
          "type": "http_ok",
          "url": "/api/work"
        },
        {
          "id": "human_projection",
          "type": "http_ok",
          "url": "/a/the-work-object"
        },
        {
          "id": "cold_start",
          "type": "contains",
          "url": "/api/work/bootstrap",
          "needle": "no previous agent's report"
        },
        {
          "id": "law_published",
          "type": "contains",
          "url": "/a/agent-work-law",
          "needle": "Work exists only as a task object"
        },
        {
          "id": "skill_public",
          "type": "contains",
          "url": "/api/skills/agent-work-law",
          "needle": "agent-work-law"
        },
        {
          "id": "footer_links_it",
          "type": "contains",
          "url": "/a/the-work-object",
          "needle": "Agent work law"
        },
        {
          "id": "build_page_amended",
          "type": "contains",
          "url": "/a/the-build-end-to-end",
          "needle": "Who operates this build, and where its operating authority lives"
        },
        {
          "id": "invariants_live",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM laws WHERE enabled=1",
          "min": 50
        },
        {
          "id": "tasks_exist",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM work_tasks",
          "min": 39
        },
        {
          "id": "audit_chained",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM work_actions",
          "min": 40
        },
        {
          "id": "cold_agent_completed_one",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM work_actions WHERE agent='cold-sonnet' AND result='accepted'",
          "min": 1
        }
      ],
      "required_evidence": [
        "cold_agent_invocation",
        "leased_task",
        "acceptance_verdict",
        "audit_url",
        "pointer_files",
        "remaining_bypasses"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 11,
        "tests_passed": 11,
        "results": [
          {
            "id": "machine_projection",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/work"
          },
          {
            "id": "human_projection",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/a/the-work-object"
          },
          {
            "id": "cold_start",
            "ok": true,
            "detail": "contains \"no previous agent's report\" in https://miscsubjects.com/api/work/bootstrap → true"
          },
          {
            "id": "law_published",
            "ok": true,
            "detail": "contains \"Work exists only as a task object\" in https://miscsubjects.com/a/agent-work-law → true"
          },
          {
            "id": "skill_public",
            "ok": true,
            "detail": "contains \"agent-work-law\" in https://miscsubjects.com/api/skills/agent-work-law → true"
          },
          {
            "id": "footer_links_it",
            "ok": true,
            "detail": "contains \"Agent work law\" in https://miscsubjects.com/a/the-work-object → true"
          },
          {
            "id": "build_page_amended",
            "ok": true,
            "detail": "contains \"Who operates this build, and where its operating authority l\" in https://miscsubjects.com/a/the-build-end-to-end → true"
          },
          {
            "id": "invariants_live",
            "ok": true,
            "detail": "count=54 (need 50)"
          },
          {
            "id": "tasks_exist",
            "ok": true,
            "detail": "count=40 (need 39)"
          },
          {
            "id": "audit_chained",
            "ok": true,
            "detail": "count=46 (need 40)"
          },
          {
            "id": "cold_agent_completed_one",
            "ok": true,
            "detail": "count=1 (need 1)"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-04T16:54:51-07:00",
      "created_at": "2026-08-04T16:54:49-07:00",
      "updated_at": "2026-08-04T16:54:51-07:00",
      "audit": "/api/work/task/WT-0000/audit",
      "submit_to": "/api/work/task/WT-0000/submit"
    },
    {
      "task_id": "WT-0001",
      "kind": "work",
      "objective": "Publish /a/kisspeptin as a first-pass article: 600+ words, 3+ real sources with verbatim quotes",
      "detail": "Kisspeptin is in the product catalogue and has no article. Read the writing law first (GET /api/articles/writing-law/skill). Write about kisspeptin and nothing else — no condition framing. State the human-evidence position plainly in the opening and disclose in the body that the site is funded by a business that sells the compound, without naming the seller. Attach at least three real sources (PubMed or a regulator) each with a verbatim quote. PUT /api/articles/kisspeptin with title, body, sources, register 'essay'. The write path will refuse a violation with a 422 that names the fix.",
      "state": "completed",
      "priority": 1,
      "revision": 7,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "kisspeptin"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "kisspeptin",
          "min": 600
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "kisspeptin",
          "min": 3
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/kisspeptin",
          "needle": "<article"
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "kisspeptin"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "sources_added",
        "what_the_evidence_says"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 5,
        "tests_passed": 5,
        "results": [
          {
            "id": "exists",
            "ok": true,
            "detail": "article kisspeptin exists"
          },
          {
            "id": "words",
            "ok": true,
            "detail": "779 words (need 600)"
          },
          {
            "id": "sources",
            "ok": true,
            "detail": "5 sources (need 3)"
          },
          {
            "id": "renders",
            "ok": true,
            "detail": "contains \"<article\" in https://miscsubjects.com/a/kisspeptin → true"
          },
          {
            "id": "published",
            "ok": true,
            "detail": "status=published"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-04T16:51:49-07:00",
      "created_at": "2026-08-04T16:27:19-07:00",
      "updated_at": "2026-08-04T16:51:49-07:00",
      "audit": "/api/work/task/WT-0001/audit",
      "submit_to": "/api/work/task/WT-0001/submit"
    },
    {
      "task_id": "WT-0082",
      "kind": "work",
      "objective": "Ship Recursive Content as an immediately usable live system: globally addressable reusable article blocks, block-level editing and criticism for the owner and scoped models, lossless corpus wrapping, visible search/reuse controls, permanent self-explanation, and a public article explaining exactly how it works",
      "detail": "Owner order from active Fable ledger session be053faa-8150-4c13-888b-2d74a2f548d1. This is not a decorative shipment or hidden API. Every article block must have a stable corpus-wide identity; references reuse one canonical block; edits propagate to every reference; comments bind to the targeted block version; existing articles are wrapped losslessly; future articles remain block-native. Logged-in owner controls are directly visible on the article. Humans and models use the same bounded verbs and signed authority. No invented reputation economy or decorative scoring. A public /a/recursive-content article and permanent article-page explanation/footer must make the system self-explaining.",
      "state": "completed",
      "priority": 1,
      "revision": 18,
      "depends_on": [],
      "permitted_capabilities": [
        "FILE_PUT",
        "CLI_WRANGLER",
        "CLI_GH",
        "D1_MIGRATE",
        "ARTICLE_PUT",
        "BROWSER_CONTROL",
        "DEPLOY"
      ],
      "acceptance_tests": [
        {
          "id": "recursive_article_live",
          "type": "article_published",
          "slug": "recursive-content"
        },
        {
          "id": "recursive_article_depth",
          "type": "article_min_words",
          "slug": "recursive-content",
          "min": 700
        },
        {
          "id": "public_explanation",
          "type": "contains",
          "url": "/a/recursive-content",
          "needle": "Every block has one stable identity"
        },
        {
          "id": "visible_self_explanation",
          "type": "contains",
          "url": "/a/recursive-content",
          "needle": "How recursive content works"
        },
        {
          "id": "block_api_live",
          "type": "http_ok",
          "url": "/api/blocks/article/recursive-content"
        },
        {
          "id": "global_blocks_exist",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM content_blocks WHERE retired_at IS NULL",
          "min": 1
        },
        {
          "id": "article_refs_exist",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM article_block_refs WHERE article_slug='recursive-content'",
          "min": 3
        },
        {
          "id": "version_history_exists",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM content_block_versions",
          "min": 1
        }
      ],
      "required_evidence": [
        "live_article_url",
        "owner_ui_proof",
        "model_token_proof",
        "lossless_wrap_proof",
        "shared_reference_propagation_proof",
        "version_bound_comment_proof",
        "tests",
        "deploy_receipt"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 1,
      "last_result": {
        "accepted": true,
        "tests_declared": 8,
        "tests_passed": 8,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "recursive_article_live",
            "ok": true,
            "detail": "status=published"
          },
          {
            "id": "recursive_article_depth",
            "ok": true,
            "detail": "1426 words (need 700)"
          },
          {
            "id": "public_explanation",
            "ok": true,
            "detail": "contains \"Every block has one stable identity\" in https://miscsubjects.com/a/recursive-content (scope=content) → true"
          },
          {
            "id": "visible_self_explanation",
            "ok": true,
            "detail": "contains \"How recursive content works\" in https://miscsubjects.com/a/recursive-content (scope=content) → true"
          },
          {
            "id": "block_api_live",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/blocks/article/recursive-content"
          },
          {
            "id": "global_blocks_exist",
            "ok": true,
            "detail": "count=49610 (need 1)"
          },
          {
            "id": "article_refs_exist",
            "ok": true,
            "detail": "count=37 (need 3)"
          },
          {
            "id": "version_history_exists",
            "ok": true,
            "detail": "count=49625 (need 1)"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-08T19:31:19-07:00",
      "created_at": "2026-08-08T13:40:29-07:00",
      "updated_at": "2026-08-08T19:31:19-07:00",
      "audit": "/api/work/task/WT-0082/audit",
      "submit_to": "/api/work/task/WT-0082/submit"
    },
    {
      "task_id": "WT-0083",
      "kind": "work",
      "objective": "Consolidate the build documentation into three canonical sources of truth and make llms.txt and token drops defer to them: the-build-end-to-end for the whole environment, oip-tap-go for every token and troubleshooting path, and proven-work for receipts and proof; then audit WT-0082 live against those docs",
      "detail": "Do not create another master article. Expand the existing pages so a cold human or model knows which canonical page owns which question, and make the routing explicit on machine and human surfaces.",
      "state": "superseded",
      "priority": 1,
      "revision": 4,
      "depends_on": [
        "WT-0082"
      ],
      "permitted_capabilities": [
        "ARTICLE_READ",
        "ARTICLE_EDIT",
        "WEB_FETCH",
        "LOCAL_EXEC"
      ],
      "acceptance_tests": [
        {
          "type": "http_ok",
          "url": "/a/the-build-end-to-end"
        },
        {
          "type": "http_ok",
          "url": "/a/oip-tap-go"
        },
        {
          "type": "http_ok",
          "url": "/a/proven-work"
        },
        {
          "type": "contains",
          "url": "/llms.txt",
          "needle": "the-build-end-to-end"
        },
        {
          "type": "contains",
          "url": "/llms.txt",
          "needle": "oip-tap-go"
        },
        {
          "type": "contains",
          "url": "/llms.txt",
          "needle": "proven-work"
        }
      ],
      "required_evidence": [
        "canonical_docs",
        "routing_proof",
        "token_troubleshooting_proof",
        "claude_release_audit"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-08T19:53:54-07:00",
      "updated_at": "2026-08-08T19:55:25-07:00",
      "audit": "/api/work/task/WT-0083/audit",
      "submit_to": "/api/work/task/WT-0083/submit"
    },
    {
      "task_id": "WT-0084",
      "kind": "work",
      "objective": "Make /a/oip-tap-go the single canonical self-explaining manual for every miscsubjects token and capability, including /start, minting, scope, comments, DIVs, proven-work inspection and certification, API, CLI, MCP, computer operations, transports, receipts, replay, repair, expiry, revocation and troubleshooting; make every article page, llms.txt and every generated token drop link and defer to it",
      "detail": "Other articles remain and may explain their own subject, but all token usage and troubleshooting questions defer to /a/oip-tap-go. A cold human or model must not need another token article to operate or debug a credential.",
      "state": "completed",
      "priority": 1,
      "revision": 7,
      "depends_on": [
        "WT-0082"
      ],
      "permitted_capabilities": [
        "ARTICLE_READ",
        "ARTICLE_EDIT",
        "WEB_FETCH",
        "LOCAL_EXEC"
      ],
      "acceptance_tests": [
        {
          "type": "http_ok",
          "url": "/a/oip-tap-go"
        },
        {
          "type": "contains",
          "url": "/a/oip-tap-go",
          "needle": "/start"
        },
        {
          "type": "contains",
          "url": "/a/oip-tap-go",
          "needle": "BLOCK_COMMENT"
        },
        {
          "type": "contains",
          "url": "/a/oip-tap-go",
          "needle": "MCP"
        },
        {
          "type": "contains",
          "url": "/a/oip-tap-go",
          "needle": "Troubleshooting"
        },
        {
          "type": "contains",
          "url": "/llms.txt",
          "needle": "/a/oip-tap-go"
        },
        {
          "type": "contains",
          "url": "/a/the-build-end-to-end",
          "needle": "/a/oip-tap-go"
        },
        {
          "type": "contains",
          "url": "/a/proven-work",
          "needle": "/a/oip-tap-go"
        }
      ],
      "required_evidence": [
        "canonical_manual",
        "global_link_proof",
        "cold_model_operability",
        "claude_release_audit"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 8,
        "tests_passed": 8,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "http_ok",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/a/oip-tap-go"
          },
          {
            "id": "contains",
            "ok": true,
            "detail": "contains \"/start\" in https://miscsubjects.com/a/oip-tap-go (scope=content) → true"
          },
          {
            "id": "contains",
            "ok": true,
            "detail": "contains \"BLOCK_COMMENT\" in https://miscsubjects.com/a/oip-tap-go (scope=content) → true"
          },
          {
            "id": "contains",
            "ok": true,
            "detail": "contains \"MCP\" in https://miscsubjects.com/a/oip-tap-go (scope=content) → true"
          },
          {
            "id": "contains",
            "ok": true,
            "detail": "contains \"Troubleshooting\" in https://miscsubjects.com/a/oip-tap-go (scope=content) → true"
          },
          {
            "id": "contains",
            "ok": true,
            "detail": "contains \"/a/oip-tap-go\" in https://miscsubjects.com/llms.txt (scope=content) → true"
          },
          {
            "id": "contains",
            "ok": true,
            "detail": "contains \"/a/oip-tap-go\" in https://miscsubjects.com/a/the-build-end-to-end (scope=content) → true"
          },
          {
            "id": "contains",
            "ok": true,
            "detail": "contains \"/a/oip-tap-go\" in https://miscsubjects.com/a/proven-work (scope=content) → true"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-08T21:35:15-07:00",
      "created_at": "2026-08-08T19:55:24-07:00",
      "updated_at": "2026-08-08T21:35:15-07:00",
      "audit": "/api/work/task/WT-0084/audit",
      "submit_to": "/api/work/task/WT-0084/submit"
    },
    {
      "task_id": "WT-0085",
      "kind": "work",
      "objective": "Make the homepage, article pages and every other public HTML surface use one consistent canonical sources-of-truth footer, with /a/oip-tap-go as the sole token usage and troubleshooting manual and links to the other build authorities",
      "detail": "Use one shared footer composition where possible and a global fallback marker for HTML surfaces outside that composition. The homepage must no longer carry a hand-maintained divergent footer.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [
        "WT-0084"
      ],
      "permitted_capabilities": [
        "LOCAL_EXEC",
        "WEB_FETCH"
      ],
      "acceptance_tests": [
        {
          "type": "contains",
          "url": "/",
          "needle": "Token manual and troubleshooting"
        },
        {
          "type": "contains",
          "url": "/a/the-build-end-to-end",
          "needle": "Token manual and troubleshooting"
        },
        {
          "type": "contains",
          "url": "/a/proven-work",
          "needle": "Token manual and troubleshooting"
        },
        {
          "type": "contains",
          "url": "/governance",
          "needle": "Token manual and troubleshooting"
        }
      ],
      "required_evidence": [
        "homepage_footer",
        "article_footer",
        "non_article_footer",
        "uniformity_test"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 4,
        "tests_passed": 4,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "contains",
            "ok": true,
            "detail": "contains \"Token manual and troubleshooting\" in https://miscsubjects.com/ (scope=content) → true"
          },
          {
            "id": "contains",
            "ok": true,
            "detail": "contains \"Token manual and troubleshooting\" in https://miscsubjects.com/a/the-build-end-to-end (scope=content) → true"
          },
          {
            "id": "contains",
            "ok": true,
            "detail": "contains \"Token manual and troubleshooting\" in https://miscsubjects.com/a/proven-work (scope=content) → true"
          },
          {
            "id": "contains",
            "ok": true,
            "detail": "contains \"Token manual and troubleshooting\" in https://miscsubjects.com/governance (scope=content) → true"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-08T21:35:19-07:00",
      "created_at": "2026-08-08T19:56:51-07:00",
      "updated_at": "2026-08-08T21:35:19-07:00",
      "audit": "/api/work/task/WT-0085/audit",
      "submit_to": "/api/work/task/WT-0085/submit"
    },
    {
      "task_id": "WT-0086",
      "kind": "work",
      "objective": "Proof of work becomes structural: every outbound email carries a mintable verification token, every article renders a proof-of-work block, and the site carries a public hash-chained send ledger any AI agent can verify and countersign",
      "detail": "FAILURE (owner, 2026-08-11): outreach emails tell recipients their agents can verify the work on the site, but no email carries a verification token and no public surface lets anyone verify a send or the work behind it — the claims are unfalsifiable. LAYER THAT PERMITTED IT: the send path ships bodies with no proof reference and no gate requires one; the article renderer surfaces no proof block. MISSING INVARIANT: no external send without a resolvable verify URL minted on a hash-chained public ledger; no article page without a proof-of-work block. REPAIR: send_ledger table (hash-chained), mechanical mint+inject at /api/email/send, refusal rule 5 in email_send_law.js (both send paths), /verify + /api/verify surfaces with keyless witness minting and countersigning, renderer-injected article proof block (repairs every existing article at render), backfill of historical email_sends, deploy gate scripts/check-proof-of-work.mjs, regression tests.",
      "state": "superseded",
      "priority": 1,
      "revision": 6,
      "depends_on": [],
      "permitted_capabilities": [
        "coding-law",
        "ship.mjs",
        "D1 migrations",
        "/api/email/send",
        "/api/verify"
      ],
      "acceptance_tests": [
        {
          "name": "send_carries_verify_url",
          "test": "latest external row in send_ledger has a verify url that returns 200 JSON with chain-valid hash"
        },
        {
          "name": "witness_mint_keyless",
          "test": "POST /api/verify/<id>/witness with no credential appends a countersignature row and returns a token"
        },
        {
          "name": "article_proof_block",
          "test": "GET a rendered /a/<slug> contains a proof-of-work block linking /verify/article/<slug>"
        },
        {
          "name": "unlawful_send_refused",
          "test": "external send lacking verify url is refused 422 by email_send_law rule 5 at the sibling"
        },
        {
          "name": "ledger_public",
          "test": "GET /verify lists sends with chain verification and total examined count"
        }
      ],
      "required_evidence": {
        "verify_index": "url",
        "one_send_verify": "url",
        "witness_row_hash": "hash",
        "article_with_block": "url",
        "refusal_json": "the 422 body",
        "backfill_count": "rows backfilled"
      },
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-11T16:25:14-07:00",
      "updated_at": "2026-08-11T18:38:19-07:00",
      "audit": "/api/work/task/WT-0086/audit",
      "submit_to": "/api/work/task/WT-0086/submit"
    },
    {
      "task_id": "WT-0087",
      "kind": "work",
      "objective": "Proof of work is structural: every outbound email carries a mintable verification receipt on a public hash-chained send ledger; agents countersign keylessly; articles verify in the same namespace; sends without receipts are refused",
      "detail": "Replaces WT-0086 (required_evidence was an object; the acceptance runner requires an array). Same repair, machine-runnable tests. FAILURE (owner 2026-08-11): outreach invited verification while no surface could verify anything. REPAIR: send_ledger + mechanical mint/inject at /api/email/send + rule 5 at both send paths + keyless witness doors + article verification namespace + 440-row backfill + deploy gate + per-send selection_reason + rule 6 refusing sender-centered subjects.",
      "state": "superseded",
      "priority": 1,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "coding-law",
        "ship.mjs",
        "D1 migrations",
        "/api/email/send",
        "/api/verify"
      ],
      "acceptance_tests": [
        {
          "id": "ledger_chain_valid",
          "type": "contains",
          "url": "/api/verify",
          "needle": "\"valid\": true",
          "scope": "raw"
        },
        {
          "id": "send_receipt_resolves",
          "type": "contains",
          "url": "/api/verify/snd_6k86q1o69x1i2g",
          "needle": "recipient_sha256",
          "scope": "raw"
        },
        {
          "id": "witness_countersigned",
          "type": "contains",
          "url": "/api/verify/snd_6k86q1o69x1i2g",
          "needle": "wit_734g5v6q2wa3s9",
          "scope": "raw"
        },
        {
          "id": "article_verify_namespace",
          "type": "contains",
          "url": "/a/the-send-ledger",
          "needle": "/verify/article/the-send-ledger",
          "scope": "raw"
        },
        {
          "id": "send_ledger_article_published",
          "type": "article_published",
          "slug": "the-send-ledger"
        },
        {
          "id": "send_ledger_article_hero",
          "type": "article_has_hero",
          "slug": "the-send-ledger"
        },
        {
          "id": "backfill_complete",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) n FROM send_ledger WHERE kind=@email_send_backfill@",
          "min": 440
        }
      ],
      "required_evidence": [
        "verify_index",
        "one_send_verify",
        "witness_row_hash",
        "article_with_block",
        "refusal_json",
        "backfill_count"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-11T18:37:11-07:00",
      "updated_at": "2026-08-11T18:37:59-07:00",
      "audit": "/api/work/task/WT-0087/audit",
      "submit_to": "/api/work/task/WT-0087/submit"
    },
    {
      "task_id": "WT-0088",
      "kind": "work",
      "objective": "Proof of work is structural: every outbound email carries a mintable verification receipt on a public hash-chained send ledger; agents countersign keylessly; articles verify in the same namespace; sends without receipts are refused",
      "detail": "Replaces WT-0086 (required_evidence was an object; the runner requires an array) and WT-0087 (a quoting error corrupted one acceptance test's SQL in transit). Same repair, machine-runnable tests. FAILURE (owner 2026-08-11): outreach invited verification while no surface could verify anything. REPAIR: send_ledger + mechanical mint/inject at /api/email/send + rule 5 at both send paths + keyless witness doors + article verification namespace + 440-row backfill + deploy gate + per-send selection_reason + rule 6 refusing sender-centered subjects.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "coding-law",
        "ship.mjs",
        "D1 migrations",
        "/api/email/send",
        "/api/verify"
      ],
      "acceptance_tests": [
        {
          "id": "ledger_chain_valid",
          "type": "contains",
          "url": "/api/verify",
          "needle": "\"valid\": true",
          "scope": "raw"
        },
        {
          "id": "send_receipt_resolves",
          "type": "contains",
          "url": "/api/verify/snd_6k86q1o69x1i2g",
          "needle": "recipient_sha256",
          "scope": "raw"
        },
        {
          "id": "witness_countersigned",
          "type": "contains",
          "url": "/api/verify/snd_6k86q1o69x1i2g",
          "needle": "wit_734g5v6q2wa3s9",
          "scope": "raw"
        },
        {
          "id": "article_verify_namespace",
          "type": "contains",
          "url": "/a/the-send-ledger",
          "needle": "/verify/article/the-send-ledger",
          "scope": "raw"
        },
        {
          "id": "send_ledger_article_published",
          "type": "article_published",
          "slug": "the-send-ledger"
        },
        {
          "id": "send_ledger_article_hero",
          "type": "article_has_hero",
          "slug": "the-send-ledger"
        },
        {
          "id": "backfill_complete",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) n FROM send_ledger WHERE kind='email_send_backfill'",
          "min": 440
        }
      ],
      "required_evidence": [
        "verify_index",
        "one_send_verify",
        "witness_row_hash",
        "article_with_block",
        "refusal_json",
        "backfill_count"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 7,
        "tests_passed": 7,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "ledger_chain_valid",
            "ok": true,
            "detail": "contains \"\\\"valid\\\": true\" in https://miscsubjects.com/api/verify (scope=raw) → true"
          },
          {
            "id": "send_receipt_resolves",
            "ok": true,
            "detail": "contains \"recipient_sha256\" in https://miscsubjects.com/api/verify/snd_6k86q1o69x1i2g (scope=raw) → true"
          },
          {
            "id": "witness_countersigned",
            "ok": true,
            "detail": "contains \"wit_734g5v6q2wa3s9\" in https://miscsubjects.com/api/verify/snd_6k86q1o69x1i2g (scope=raw) → true"
          },
          {
            "id": "article_verify_namespace",
            "ok": true,
            "detail": "contains \"/verify/article/the-send-ledger\" in https://miscsubjects.com/a/the-send-ledger (scope=raw) → true"
          },
          {
            "id": "send_ledger_article_published",
            "ok": true,
            "detail": "status=published"
          },
          {
            "id": "send_ledger_article_hero",
            "ok": true,
            "detail": "hero present"
          },
          {
            "id": "backfill_complete",
            "ok": true,
            "detail": "count=440 (need 440)"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-11T18:38:02-07:00",
      "created_at": "2026-08-11T18:37:58-07:00",
      "updated_at": "2026-08-11T18:38:02-07:00",
      "audit": "/api/work/task/WT-0088/audit",
      "submit_to": "/api/work/task/WT-0088/submit"
    },
    {
      "task_id": "WT-0090",
      "kind": "work",
      "objective": "Ship one browser-visible large Proven Work exhibit that a cold ChatGPT, Grok, or Claude can independently traverse from the article to the exact raw or redacted run",
      "detail": "Owner order 2026-08-28. Repair every WT-0089 objection, then run the full loop at meaningful scale: at least 1,000 task-bound candidate organizations discovered from public sources; per-candidate inclusion or exclusion decisions with exact query, source, skill version and reason; at least 100 contacts verified only from their own public sites; 100 individualized exact email bodies bound to selected evidence; 100 lawful provider-accepted sends after exact owner review, each with a public send receipt; four actually executed rival-model cold audits; a signed checkpoint; and one public article a brand-new browser session can use without keys, prior context, GitHub, or terminal access. The article is a human projection; every count and claim resolves to the underlying case, receipts, payloads, proof, and reproduction or comment doors. Sensitive contact data remains recipient-bound or redacted while hashes remain verifiable.",
      "state": "open",
      "priority": 1,
      "revision": 16,
      "depends_on": [],
      "permitted_capabilities": [
        "LEADS_DISCOVER_ORG",
        "LEADS_FIND_SITES",
        "LEADS_ENRICH_BATCH",
        "LEADS_DRAFT_AI",
        "LEADS_SEND",
        "OUTREACH_ALLOCATE",
        "EMAIL_SEND",
        "INVOKE",
        "ARTICLE_WRITE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "id": "article_live",
          "type": "article_published",
          "slug": "the-run-that-found-you"
        },
        {
          "id": "task_bound_candidates",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM execution_case_candidates WHERE task_id='WT-0090'",
          "min": 1000
        },
        {
          "id": "task_bound_verified_contacts",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM execution_case_candidates WHERE task_id='WT-0090' AND contact_status='verified_public'",
          "min": 100
        },
        {
          "id": "task_bound_emails",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM execution_case_sends WHERE task_id='WT-0090' AND provider_status='accepted' AND proof_id IS NOT NULL",
          "min": 100
        },
        {
          "id": "cold_audits",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM execution_case_audits WHERE task_id='WT-0090' AND verdict_text IS NOT NULL AND receipt_id IS NOT NULL",
          "min": 4
        },
        {
          "id": "checkpoint_live",
          "type": "http_ok",
          "url": "/api/chain/checkpoint"
        },
        {
          "id": "cold_case_live",
          "type": "contains",
          "url": "/a/the-run-that-found-you",
          "needle": "Verify the run yourself",
          "scope": "content"
        }
      ],
      "required_evidence": [
        "article_url",
        "case_url",
        "payloads_url",
        "verify_url",
        "candidate_count",
        "verified_contact_count",
        "provider_accepted_send_count",
        "owner_exact_review_receipt",
        "rival_model_receipts",
        "signed_checkpoint",
        "cold_start_walkthrough"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-28T16:10:29-07:00",
      "updated_at": "2026-09-12T15:36:47-07:00",
      "audit": "/api/work/task/WT-0090/audit",
      "submit_to": "/api/work/task/WT-0090/submit"
    },
    {
      "task_id": "WT-0091",
      "kind": "work",
      "objective": "Turn the verified large Proven Work case into a continuous public self-improving outreach and distribution loop",
      "detail": "Owner target 2026-08-28. After WT-0090 survives cold-model inspection, continuously discover new task-bound lead cohorts, record why each lead class and organization was chosen, generate individually grounded email and X variants, send only lawful reviewed cohorts, ingest provider opens clicks replies opt-outs complaints and verifier verdicts, compare versions on conforming outcome per dollar, promote only after two independent passing cohorts, and expose every decision, raw or redacted payload, quantitative delta, correction and next hypothesis through the same browser-visible proof object. The loop must prove why the next leads, email copy, and X posts changed based on measured results; no drip without novelty, no ambient counts, no vanity-only optimization.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [
        "WT-0090"
      ],
      "permitted_capabilities": [
        "LEADS_DISCOVER_ORG",
        "LEADS_FIND_SITES",
        "LEADS_ENRICH_BATCH",
        "LEADS_DRAFT_AI",
        "LEADS_SEND",
        "OUTREACH_ALLOCATE",
        "EMAIL_SEND",
        "X_POST",
        "INVOKE",
        "ARTICLE_WRITE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "id": "loop_article_live",
          "type": "contains",
          "url": "/a/the-run-that-found-you",
          "needle": "What changed in the next cohort",
          "scope": "content"
        },
        {
          "id": "measured_cohorts",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM execution_case_cohorts WHERE task_id='WT-0091' AND outcome_window_closed_at IS NOT NULL",
          "min": 3
        },
        {
          "id": "version_comparisons",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM comparisons WHERE target_type='outreach_cohort' AND target_id LIKE 'WT-0091:%' AND verdict IS NOT NULL",
          "min": 2
        },
        {
          "id": "promoted_version",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM execution_case_versions WHERE task_id='WT-0091' AND state='current' AND passing_cohorts>=2",
          "min": 1
        }
      ],
      "required_evidence": [
        "continuous_case_url",
        "cohort_receipts",
        "provider_outcome_receipts",
        "version_comparisons",
        "promotion_receipt",
        "lead_selection_changes",
        "email_copy_changes",
        "x_post_changes",
        "cold_verifier_verdicts"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-28T16:15:19-07:00",
      "updated_at": "2026-08-28T16:15:19-07:00",
      "audit": "/api/work/task/WT-0091/audit",
      "submit_to": "/api/work/task/WT-0091/submit"
    },
    {
      "task_id": "WT-0092",
      "kind": "work",
      "objective": "Ship the Sheets workbook: /admin/directory and /admin/ledger render as a Google Sheets style grid (edit cells, drag columns, filter, sort), plus user-created sheets with A1-addressable cells, a REST lane mirroring the Google Sheets values API, and a model-run lane that fills a column per row with the exact request JSON, the raw response, and the reply text",
      "detail": "Default view of /admin/directory and /admin/ledger becomes the workbook grid; the classic views stay complete at ?view=classic and every protected behavior in PROTECTED_FEATURES.md remains reachable there. New D1 tables user_sheets, sheet_cells, sheet_run_configs. New API namespace /api/sheets: values get/put by A1 range, append, clear, batch insert/delete/move of rows and columns, CSV export, run configs, and per-row model runs through the existing invoke lane with receipts on the ledger. Bottom tab strip: Directory and Ledger are fixed sheets, user sheets are created with +, each tab is one sheet.",
      "state": "superseded",
      "priority": 1,
      "revision": 6,
      "depends_on": [],
      "permitted_capabilities": [
        "/api/sheets",
        "/api/directory",
        "/api/invoke",
        "scripts/ship.mjs"
      ],
      "acceptance_tests": [
        {
          "id": "contract_live",
          "type": "http_ok",
          "url": "/api/sheets"
        },
        {
          "id": "contract_names_a1_lane",
          "type": "contains",
          "url": "/api/sheets",
          "needle": "values/A1",
          "scope": "raw"
        },
        {
          "id": "contract_names_run_lane",
          "type": "contains",
          "url": "/api/sheets",
          "needle": "run-row",
          "scope": "raw"
        },
        {
          "id": "tables_exist",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) n FROM sqlite_master WHERE name IN (user_sheets,sheet_cells,sheet_run_configs)",
          "min": 3
        },
        {
          "id": "workbook_served_on_directory",
          "type": "contains",
          "url": "/admin/directory",
          "needle": "ms-sheets-workbook",
          "scope": "raw"
        },
        {
          "id": "workbook_served_on_ledger",
          "type": "contains",
          "url": "/admin/ledger",
          "needle": "ms-sheets-workbook",
          "scope": "raw"
        },
        {
          "id": "classic_view_preserved",
          "type": "contains",
          "url": "/admin/directory?view=classic",
          "needle": "bigtabs",
          "scope": "raw"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "api_contract_url",
        "live_run_receipt",
        "cells_written_by_a1"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 1,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-29T05:08:34-07:00",
      "updated_at": "2026-08-29T06:17:31-07:00",
      "audit": "/api/work/task/WT-0092/audit",
      "submit_to": "/api/work/task/WT-0092/submit"
    },
    {
      "task_id": "WT-0095",
      "kind": "work",
      "objective": "Ship the Sheets workbook: /admin/directory and /admin/ledger render as a Google Sheets style grid (edit cells, drag columns, filter, sort), plus user-created sheets with A1-addressable cells, a REST lane mirroring the Google Sheets values API, and a model-run lane that fills columns per row with the exact request JSON, the raw response, and the reply text",
      "detail": "Replaces WT-0092, whose acceptance probed owner-gated admin pages without a credential and queried sqlite_master — tests the runner cannot execute. These tests measure the same build through runnable surfaces: the public /api/sheets contract (which names the A1 lane, the run lane, and the workbook URL) and direct row counts on the three new tables, which are non-zero only because the live demo sheet sh_ndaqdd4m was created, written by A1, and run through xai/grok-4.5 twice. The gated renders (workbook on /admin/directory and /admin/ledger, classic views at ?view=classic) are recorded as evidence with their content markers.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "contract_live",
          "type": "http_ok",
          "url": "/api/sheets"
        },
        {
          "id": "contract_names_a1_lane",
          "type": "contains",
          "url": "/api/sheets",
          "needle": "values/A1",
          "scope": "raw"
        },
        {
          "id": "contract_names_run_lane",
          "type": "contains",
          "url": "/api/sheets",
          "needle": "run-row",
          "scope": "raw"
        },
        {
          "id": "contract_names_workbook",
          "type": "contains",
          "url": "/api/sheets",
          "needle": "/admin/sheets",
          "scope": "raw"
        },
        {
          "id": "user_sheets_table_in_use",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) n FROM user_sheets",
          "min": 1
        },
        {
          "id": "cells_written_by_a1_lane",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) n FROM sheet_cells",
          "min": 20
        },
        {
          "id": "run_config_versions_stored",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) n FROM sheet_run_configs",
          "min": 2
        }
      ],
      "required_evidence": [
        "rendered_url",
        "workbook_marker_proof",
        "classic_view_proof",
        "api_contract_url",
        "live_run_receipt",
        "cells_written_by_a1"
      ],
      "parent_task": null,
      "supersedes": "WT-0092",
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 7,
        "tests_passed": 7,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "contract_live",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/sheets"
          },
          {
            "id": "contract_names_a1_lane",
            "ok": true,
            "detail": "contains \"values/A1\" in https://miscsubjects.com/api/sheets (scope=raw) → true"
          },
          {
            "id": "contract_names_run_lane",
            "ok": true,
            "detail": "contains \"run-row\" in https://miscsubjects.com/api/sheets (scope=raw) → true"
          },
          {
            "id": "contract_names_workbook",
            "ok": true,
            "detail": "contains \"/admin/sheets\" in https://miscsubjects.com/api/sheets (scope=raw) → true"
          },
          {
            "id": "user_sheets_table_in_use",
            "ok": true,
            "detail": "count=1 (need 1)"
          },
          {
            "id": "cells_written_by_a1_lane",
            "ok": true,
            "detail": "count=28 (need 20)"
          },
          {
            "id": "run_config_versions_stored",
            "ok": true,
            "detail": "count=2 (need 2)"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-29T06:18:01-07:00",
      "created_at": "2026-08-29T06:17:31-07:00",
      "updated_at": "2026-08-29T06:18:01-07:00",
      "audit": "/api/work/task/WT-0095/audit",
      "submit_to": "/api/work/task/WT-0095/submit"
    },
    {
      "task_id": "WT-0097",
      "kind": "work",
      "objective": "Directory as a true sheet of objects: cells edit in place, every view state (kind tab, filter, sort, cell) is its own link, every cell names its object id, grids paint instantly from cache, and Sheet/Classic views toggle both ways from the top right",
      "detail": "Owner order 2026-08-30, six points: (1) click-and-edit cells like Google Sheets; (2) every cell/row reflects its object id when clicked; (3) cached grid data so the loading screen does not reappear on every visit; (4) the kind tabs (Agents/Content/Code/Files/Other) stay on the directory sheet and each tap gets its own URL; (5) every refinement/filter tap is a shareable link and every populated cell is an addressable object particle (?id=<key>&field=<col>); (6) both views work simultaneously with a two-way toggle in the top right of each. Public contract at /api/sheets names the url_state lanes.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "repo edit via coding-law lease",
        "scripts/ship.mjs"
      ],
      "acceptance_tests": [
        {
          "id": "contract_live",
          "type": "http_ok",
          "url": "/api/sheets"
        },
        {
          "id": "contract_names_url_state",
          "type": "contains",
          "url": "/api/sheets",
          "needle": "url_state",
          "scope": "raw"
        },
        {
          "id": "contract_names_cell_particle",
          "type": "contains",
          "url": "/api/sheets",
          "needle": "id=ROUTER&field=target",
          "scope": "raw"
        },
        {
          "id": "contract_names_view_toggle",
          "type": "contains",
          "url": "/api/sheets",
          "needle": "view=classic",
          "scope": "raw"
        },
        {
          "id": "contract_names_cache",
          "type": "contains",
          "url": "/api/sheets",
          "needle": "instant paint, background refresh",
          "scope": "raw"
        }
      ],
      "required_evidence": [
        "sheet_view_url",
        "classic_view_url",
        "deep_link_example",
        "browser_verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 5,
        "tests_passed": 5,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "contract_live",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/sheets"
          },
          {
            "id": "contract_names_url_state",
            "ok": true,
            "detail": "contains \"url_state\" in https://miscsubjects.com/api/sheets (scope=raw) → true"
          },
          {
            "id": "contract_names_cell_particle",
            "ok": true,
            "detail": "contains \"id=ROUTER&field=target\" in https://miscsubjects.com/api/sheets (scope=raw) → true"
          },
          {
            "id": "contract_names_view_toggle",
            "ok": true,
            "detail": "contains \"view=classic\" in https://miscsubjects.com/api/sheets (scope=raw) → true"
          },
          {
            "id": "contract_names_cache",
            "ok": true,
            "detail": "contains \"instant paint, background refresh\" in https://miscsubjects.com/api/sheets (scope=raw) → true"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-30T17:12:41-07:00",
      "created_at": "2026-08-30T16:09:57-07:00",
      "updated_at": "2026-08-30T17:12:41-07:00",
      "audit": "/api/work/task/WT-0097/audit",
      "submit_to": "/api/work/task/WT-0097/submit"
    },
    {
      "task_id": "WT-0098",
      "kind": "work",
      "objective": "Guardian gets an owner on/off switch, OFF now: KV guardian_master gates guard.mjs --check (no drift scan, no quarantine, no judge, no texts while OFF), with the switch at the top of /admin/vault",
      "detail": "Owner order 2026-08-30. OFF means check() no-ops; --baseline/--adopt/--heal/--list stay live; lock manifests and commit hooks unaffected. Only the owner re-arms.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "repo edit via coding-law lease",
        "KV_PUT guardian_master",
        "scripts/ship.mjs"
      ],
      "acceptance_tests": [
        {
          "id": "switch_state_recorded",
          "type": "evidence_present",
          "field": "kv_state"
        },
        {
          "id": "off_behavior_proven",
          "type": "evidence_present",
          "field": "off_proof"
        }
      ],
      "required_evidence": [
        "kv_state",
        "off_proof",
        "vault_switch_url"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "switch_state_recorded",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "kv_state"
          },
          {
            "id": "off_behavior_proven",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "off_proof"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-30T17:13:01-07:00",
      "created_at": "2026-08-30T16:45:58-07:00",
      "updated_at": "2026-08-30T17:13:01-07:00",
      "audit": "/api/work/task/WT-0098/audit",
      "submit_to": "/api/work/task/WT-0098/submit"
    },
    {
      "task_id": "WT-0099",
      "kind": "work",
      "objective": "The directory sheet edits like Google Sheets: double-click opens an in-place caret editor on EVERY cell (read-only cells open the same editor read-only — never a modal), long values overflow into empty neighbor cells and stay editable in place, the editor autosizes to its text, and the Files kind stops listing ledger-mirror/.protected machine artifacts",
      "detail": "Owner order 2026-08-31 with Google Sheets reference screenshots. Editing rules unchanged underneath (PATCH on capability fields; projections stay read-only) — only the surface becomes faithful to Sheets.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "repo edit via coding-law lease",
        "scripts/ship.mjs"
      ],
      "acceptance_tests": [
        {
          "id": "contract_live",
          "type": "http_ok",
          "url": "/api/sheets"
        },
        {
          "id": "contract_names_inplace_editing",
          "type": "contains",
          "url": "/api/sheets",
          "needle": "in-place editor on double-click",
          "scope": "raw"
        },
        {
          "id": "contract_names_overflow",
          "type": "contains",
          "url": "/api/sheets",
          "needle": "overflow into empty neighbor cells",
          "scope": "raw"
        },
        {
          "id": "contract_names_files_hygiene",
          "type": "contains",
          "url": "/api/sheets",
          "needle": "ledger-mirror",
          "scope": "raw"
        }
      ],
      "required_evidence": [
        "editor_proof",
        "overflow_proof",
        "files_count_before_after"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 4,
        "tests_passed": 4,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "contract_live",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/sheets"
          },
          {
            "id": "contract_names_inplace_editing",
            "ok": true,
            "detail": "contains \"in-place editor on double-click\" in https://miscsubjects.com/api/sheets (scope=raw) → true"
          },
          {
            "id": "contract_names_overflow",
            "ok": true,
            "detail": "contains \"overflow into empty neighbor cells\" in https://miscsubjects.com/api/sheets (scope=raw) → true"
          },
          {
            "id": "contract_names_files_hygiene",
            "ok": true,
            "detail": "contains \"ledger-mirror\" in https://miscsubjects.com/api/sheets (scope=raw) → true"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-31T01:53:20-07:00",
      "created_at": "2026-08-31T01:27:33-07:00",
      "updated_at": "2026-08-31T01:53:20-07:00",
      "audit": "/api/work/task/WT-0099/audit",
      "submit_to": "/api/work/task/WT-0099/submit"
    },
    {
      "task_id": "WT-0103",
      "kind": "work",
      "objective": "Build the integrated Cloaker and traffic router inside the existing miscsubjects /admin/cloaker and /api/cloaker surfaces",
      "detail": "Execute docs/superpowers/plans/2026-09-02-integrated-cloaker-traffic-router.md. Preserve existing JCI data and controls. A private engine may exist only behind the Pages CLOAKER_ENGINE service binding with workers_dev=false and no public route.",
      "state": "open",
      "priority": 1,
      "revision": 6,
      "depends_on": [],
      "permitted_capabilities": [
        "repository_read",
        "repository_write",
        "test",
        "cloudflare_read",
        "cloudflare_deploy",
        "work_object_write"
      ],
      "acceptance_tests": [
        "/admin/cloaker remains the sole primary operator surface",
        "/api/cloaker preserves existing GET and PUT behavior and owns all new routes",
        "private engine has workers_dev=false and no public route",
        "JCI is not a runtime dependency",
        "policy rules, lists, deterministic splits, signals, challenge, decision logs, lab, outcomes and rollback pass their tests",
        "live shadow deployment and rollback evidence are recorded"
      ],
      "required_evidence": [
        "changed_files",
        "test_results",
        "private_binding_evidence",
        "admin_url",
        "api_url",
        "shadow_results",
        "rollback_result"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-02T13:56:01-07:00",
      "updated_at": "2026-09-12T22:23:00.268Z",
      "audit": "/api/work/task/WT-0103/audit",
      "submit_to": "/api/work/task/WT-0103/submit"
    },
    {
      "task_id": "WT-0109",
      "kind": "work",
      "objective": "Ship the self-describing environment: one canonical model-readable manual generated from directory and ledger, with universal object identities, resolved subpage governance, semantic comparables, human inspection, and truthfulness gates",
      "detail": "Implement docs/superpowers/plans/2026-09-05-self-describing-environment.md. The directory is canonical current state; the ledger is canonical history/evidence. Any external model given only /api/environment?format=markdown must be able to locate a page/object, identify source and exact operations, resolve direct/inherited rules, explain comparables on named dimensions, and find receipts. No named workflow features and no shadow documentation store.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "git",
        "node --test",
        "scripts/ship.mjs",
        "POST /api/coding-law/start",
        "POST /api/coding-law/commit",
        "files under functions/, scripts/, migrations/, docs/"
      ],
      "acceptance_tests": [
        {
          "id": "environment_root_live",
          "type": "http_ok",
          "url": "/api/environment?format=markdown"
        },
        {
          "id": "environment_schema",
          "type": "contains",
          "url": "/api/environment",
          "needle": "miscsubjects/environment/1"
        },
        {
          "id": "governance_resolves",
          "type": "contains",
          "url": "/api/environment/governance?ref=page%3A%2F%2Fadmin%2Fsheets",
          "needle": "effective"
        },
        {
          "id": "comparables_explain_dimensions",
          "type": "contains",
          "url": "/api/environment/comparables?ref=page%3A%2F%2Fadmin%2Fsheets",
          "needle": "dimensions"
        },
        {
          "id": "manual_names_ledger",
          "type": "contains",
          "url": "/api/environment?format=markdown",
          "needle": "Ledger"
        }
      ],
      "required_evidence": [
        "environment_url",
        "governance_url",
        "comparables_url",
        "tests",
        "runtime_evidence"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 5,
        "tests_passed": 5,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "environment_root_live",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/environment?format=markdown"
          },
          {
            "id": "environment_schema",
            "ok": true,
            "detail": "contains \"miscsubjects/environment/1\" in https://miscsubjects.com/api/environment (scope=content) → true"
          },
          {
            "id": "governance_resolves",
            "ok": true,
            "detail": "contains \"effective\" in https://miscsubjects.com/api/environment/governance?ref=page%3A%2F%2Fadmin%2Fsheets (scope=content) → true"
          },
          {
            "id": "comparables_explain_dimensions",
            "ok": true,
            "detail": "contains \"dimensions\" in https://miscsubjects.com/api/environment/comparables?ref=page%3A%2F%2Fadmin%2Fsheets (scope=content) → true"
          },
          {
            "id": "manual_names_ledger",
            "ok": true,
            "detail": "contains \"Ledger\" in https://miscsubjects.com/api/environment?format=markdown (scope=content) → true"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-06T00:30:27-07:00",
      "created_at": "2026-09-05T23:42:12-07:00",
      "updated_at": "2026-09-06T00:30:27-07:00",
      "audit": "/api/work/task/WT-0109/audit",
      "submit_to": "/api/work/task/WT-0109/submit"
    },
    {
      "task_id": "WT-0110",
      "kind": "work",
      "objective": "Generate a typed argument schema for every directory row from its own # ARGS: line, so a cold model stops guessing pipe order",
      "detail": "Every one of the ~1,066 rows presents the same MCP inputSchema: {body: string, description: 'Pipe-delimited args'}. Windmill, Mastra and Arcade all infer real parameter schemas; we do not, and that untyped blob is the single largest accuracy tax on every surface at once — MCP tools/list, ?ask= output, the sheet bridge, the tag protocol and every cold model that has never seen this build. The argument names already exist on the rows: `# ARGS: $1=scope, $2=row key, $3=ttl seconds`. Parse that line into {type:object, properties:{scope:{type:string,description:...}, ...}, required:[...]} and store it as input_schema, leaving rows that already carry a hand-written schema untouched. mcpToolsFromRows already prefers input_schema when present, so MCP improves with no change to the projection. Do not invent types the docstring does not state; a name with no stated type is a string.",
      "state": "superseded",
      "priority": 1,
      "revision": 10,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "D1_EXEC",
        "DIR_GET",
        "DIR_PATCH"
      ],
      "acceptance_tests": [
        {
          "id": "directory_readable",
          "type": "http_ok",
          "url": "/api/directory/CAP_MINT"
        },
        {
          "id": "named_properties",
          "type": "contains",
          "url": "/api/directory/CAP_MINT",
          "needle": "\"properties\"",
          "scope": "raw"
        },
        {
          "id": "coverage",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM directory WHERE enabled=1 AND input_schema LIKE '%properties%'",
          "min": 700
        }
      ],
      "required_evidence": [
        "rows_updated",
        "sample_before_after",
        "mcp_tools_list_sample"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 2,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-06T07:55:59-07:00",
      "updated_at": "2026-09-06T08:37:37-07:00",
      "audit": "/api/work/task/WT-0110/audit",
      "submit_to": "/api/work/task/WT-0110/submit"
    },
    {
      "task_id": "WT-0111",
      "kind": "work",
      "objective": "Add trigger=event to automations so a state change can invoke a capability, making the namespace reactive instead of call-only",
      "detail": "automations supports exactly two trigger kinds today, schedule and clock, and watch_rules is a deny list rather than an event router. So every capability can be CALLED and nothing can HAPPEN. This is the missing half of the namespace and it is one field plus a matcher. Add trigger='event' with a match spec over the ledger's own event stream (source, key, action, status, and a regex over the payload), fired by the existing webhook intake and by logEvent. The same primitive then covers physical devices, customer-service escalation, financial events, comms, software operations and agent orchestration, because those are already ledger rows — it is not a home-automation feature. Second-order consequence to keep in view: capabilities can already create capabilities via DIR_PATCH, so once events invoke composed capabilities the system can extend itself in response to its own history.",
      "state": "superseded",
      "priority": 1,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "D1_EXEC",
        "AUTOMATE_ADD",
        "AUTOMATE_LIST",
        "LEDGER_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "event_automation_exists",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM automations WHERE trigger='event'",
          "min": 1
        },
        {
          "id": "it_fired",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM events WHERE key='AUTOMATE_FIRE' AND request_json LIKE '%event%'",
          "min": 1
        }
      ],
      "required_evidence": [
        "trigger_spec",
        "worked_example",
        "ledger_trace"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-06T07:56:01-07:00",
      "updated_at": "2026-09-06T08:05:07-07:00",
      "audit": "/api/work/task/WT-0111/audit",
      "submit_to": "/api/work/task/WT-0111/submit"
    },
    {
      "task_id": "WT-0119",
      "kind": "work",
      "objective": "Bridge ledger events to AUTOMATE_FIRE so any state change, not just a hand-placed call, can invoke a capability",
      "detail": "trigger=event already exists and is proven: AUTOMATE_ADD 'name|event:NAME|KEY|body' creates it, AUTOMATE_FIRE 'NAME|payload' runs it with a receipt and the force_off kill switch, and 'front door opens -> porch light' fired NOW with receipt inv_4x60jvr8eq on the first try. WT-0111 was written as if the primitive were missing; it is not. The real gap is that nothing converts the ledger's own event stream into AUTOMATE_FIRE calls — only article_automation.js does it, for one hardcoded ARTICLE_CREATED. So an event can trigger a capability only when some code remembered to announce it. Add a generic bridge: a match spec (source, key, action, status, and a regex over the payload) evaluated inside logEvent, firing the matching event automations. Then every ledger row is a potential trigger, which covers devices, escalation, financial events, comms, software operations and agent orchestration without any of them being a feature.",
      "state": "superseded",
      "priority": 1,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "AUTOMATE_ADD",
        "AUTOMATE_FIRE",
        "AUTOMATE_LIST",
        "D1_QUERY",
        "LEDGER_QUERY",
        "FILE_GET",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "id": "event_automation_exists",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM automations WHERE trigger LIKE 'event:%'",
          "min": 1
        },
        {
          "id": "fired_from_a_ledger_event",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM automations WHERE trigger LIKE 'event:%' AND runs > 0",
          "min": 1
        }
      ],
      "required_evidence": [
        "match_spec",
        "ledger_event_that_fired_it",
        "receipt"
      ],
      "parent_task": null,
      "supersedes": "WT-0111",
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-06T08:05:06-07:00",
      "updated_at": "2026-09-06T08:49:56-07:00",
      "audit": "/api/work/task/WT-0119/audit",
      "submit_to": "/api/work/task/WT-0119/submit"
    },
    {
      "task_id": "WT-0120",
      "kind": "work",
      "objective": "Generate a typed argument schema for every directory row from its own # ARGS: line, so a cold model stops guessing pipe order",
      "detail": "Same objective as WT-0110, whose acceptance test was written wrong by its author: it looked for the literal string \"properties\" with surrounding quotes in the raw response, but input_schema is a JSON string INSIDE the response, so the raw body carries it escaped and the needle could never match. The work itself passed its other two tests — 831 rows of 1068 carry a schema, well over the 700 bar. Corrected needles below. The work: parse each row's own `# ARGS:` line into named properties, keep x-arg-order so pipe position survives, leave hand-written schemas untouched, and make tools/call order named arguments by that declared order rather than by the payload's key order.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "D1_EXEC",
        "DIR_GET",
        "DIR_PATCH"
      ],
      "acceptance_tests": [
        {
          "id": "directory_readable",
          "type": "http_ok",
          "url": "/api/directory/CAP_MINT"
        },
        {
          "id": "named_properties",
          "type": "contains",
          "url": "/api/directory/CAP_MINT",
          "needle": "x-arg-order",
          "scope": "raw"
        },
        {
          "id": "real_argument_names",
          "type": "contains",
          "url": "/api/directory/CAP_MINT",
          "needle": "ttl_seconds",
          "scope": "raw"
        },
        {
          "id": "coverage",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM directory WHERE enabled=1 AND input_schema LIKE '%properties%'",
          "min": 700
        }
      ],
      "required_evidence": [
        "rows_updated",
        "sample_before_after",
        "mcp_tools_list_sample"
      ],
      "parent_task": null,
      "supersedes": "WT-0110",
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 4,
        "tests_passed": 4,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "directory_readable",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/directory/CAP_MINT"
          },
          {
            "id": "named_properties",
            "ok": true,
            "detail": "contains \"x-arg-order\" in https://miscsubjects.com/api/directory/CAP_MINT (scope=raw) → true"
          },
          {
            "id": "real_argument_names",
            "ok": true,
            "detail": "contains \"ttl_seconds\" in https://miscsubjects.com/api/directory/CAP_MINT (scope=raw) → true"
          },
          {
            "id": "coverage",
            "ok": true,
            "detail": "count=831 (need 700)"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-06T08:38:30-07:00",
      "created_at": "2026-09-06T08:37:27-07:00",
      "updated_at": "2026-09-06T08:38:30-07:00",
      "audit": "/api/work/task/WT-0120/audit",
      "submit_to": "/api/work/task/WT-0120/submit"
    },
    {
      "task_id": "WT-0123",
      "kind": "work",
      "objective": "Bridge ledger events to AUTOMATE_FIRE: the code shipped but never fires, because env.waitUntil does not exist and the runtime cancels the detached promise",
      "detail": "WHAT IS WRONG, EXACTLY.\n\nfunctions/_lib/event_log.js ends logEvent with a call to maybeFireEventAutomations(env, o). Inside\nthat function the last two lines are:\n\n    if (env.waitUntil) env.waitUntil(run.catch(() => {}));\n    else run.catch(() => {});\n\nwaitUntil lives on the execution context, never on env. So the condition is always false, the code\nfalls through to an un-awaited promise, and the Workers runtime cancels it the moment the request\nfinishes. The automation matches, the rule is correct, and nothing runs. Reproduced: registered\n'quake feed read -> record the place' on trigger `event:on source=dispatch key=QUAKE_FEED`, invoked\nQUAKE_FEED, and automations.runs stayed 0 with last_run null.\n\nTHE FIX, IN FULL.\n\n1. Make maybeFireEventAutomations async and await it at the call site:\n       await maybeFireEventAutomations(env, o);\n   It sits immediately after maybeFlush(env) on the successful-write path. Do not move it to the\n   failed-write branch above it, which returns early by design.\n\n2. Await the fire instead of detaching it. Delete both waitUntil lines. Wrap each dispatch in its\n   own try/catch inside the loop so a failing automation still cannot break the ledger write that\n   caused it — that guard must survive, it just moves inward.\n\n3. Awaiting is only affordable with a cache, because the ledger takes hundreds of thousands of rows\n   a week and an uncached version costs one query per row. Add module scope:\n\n       let ruleCache = { at: 0, rules: [] };\n       const RULE_TTL_MS = 60000;\n       async function eventRules(env) {\n         const now = Date.now();\n         if (now - ruleCache.at < RULE_TTL_MS) return ruleCache.rules;\n         const res = await env.DB.prepare(\n           \"SELECT trigger FROM automations WHERE enabled=1 AND COALESCE(force_off,0)=0 AND trigger LIKE 'event:on %'\",\n         ).all();\n         ruleCache = { at: now, rules: (res?.results || []).map((r) => String(r.trigger)) };\n         return ruleCache.rules;\n       }\n\n   A minute of staleness between registering an automation and its first firing is the correct\n   trade for making the common case — no rules match — cost nothing.\n\nTHREE RULES THAT MUST SURVIVE ANY REWRITE.\n  a. Only triggers beginning `event:on ` are matched here. A plain `event:NAME` must keep firing\n     only from an explicit AUTOMATE_FIRE, so nothing that exists today changes behaviour.\n  b. Any event whose actor starts `automation:` is skipped before anything else. Automation\n     invocations write ledger rows themselves; matching those loops forever.\n  c. A trigger must never be able to stop the write of the evidence that triggered it.\n\nTHE MATCH GRAMMAR, ALREADY IMPLEMENTED IN eventRuleMatches.\n  `event:on source=blooio action=webhook_in status=200 match=<regex over the payload>`\n  Fields source, key, action and direction compare exactly; status compares as a string; match is a\n  case-insensitive regex over request + response. An unparseable regex fails closed. A rule with no\n  recognised field matches nothing rather than everything.\n\nTHE PAYLOAD IS IDENTITY ONLY, ON PURPOSE.\n  dispatch splits a body on |, so a payload carrying request/response previews is truncated at the\n  first pipe. The payload therefore carries source, key, action, status, trace_id, event_id and a\n  read_the_row hint, with any stray pipe replaced. An automation that needs the full row reads it\n  from the ledger by that id.\n\nWHY THIS TASK COULD NOT BE CLOSED IN THE SESSION THAT FOUND IT.\n  coding-law answered stale:true on functions/_lib/event_log.js — claude-fable:b8d049c5 committed\n  0d1bfc7960f52515065c5894a590c24da7c45e34d0a5a6e1bc110954411eff09 locally and had not pushed, so\n  the newest text could not be read. The law says re-read and never force. The lease was released\n  unchanged twice rather than overwrite unseen work. Take a fresh lease once origin/main carries\n  that sha and apply the above to THAT text, not to the version described here.\n\nHOW TO PROVE IT.\n  AUTOMATE_ADD 'ledger bridge probe|event:on source=dispatch key=QUAKE_FEED|QUAKE_PLACE|3'\n  then dispatch QUAKE_FEED with body '2|5', then read automations.runs for that row. runs must be\n  at least 1 and last_receipt must be an inv_ id.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "FILE_GET",
        "FILE_PUT",
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "AUTOMATE_ADD",
        "AUTOMATE_LIST",
        "D1_QUERY",
        "LEDGER_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "an_event_rule_exists",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM automations WHERE trigger LIKE 'event:on %'",
          "min": 1
        },
        {
          "id": "a_ledger_event_actually_fired_one",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM automations WHERE trigger LIKE 'event:on %' AND runs > 0",
          "min": 1
        },
        {
          "id": "receipt_recorded",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM automations WHERE trigger LIKE 'event:on %' AND last_receipt LIKE 'inv_%'",
          "min": 1
        }
      ],
      "required_evidence": [
        "the_rule",
        "the_ledger_event",
        "the_receipt"
      ],
      "parent_task": null,
      "supersedes": "WT-0119",
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 3,
        "tests_passed": 3,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "an_event_rule_exists",
            "ok": true,
            "detail": "count=2 (need 1)"
          },
          {
            "id": "a_ledger_event_actually_fired_one",
            "ok": true,
            "detail": "count=2 (need 1)"
          },
          {
            "id": "receipt_recorded",
            "ok": true,
            "detail": "count=2 (need 1)"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-06T11:49:33-07:00",
      "created_at": "2026-09-06T08:49:53-07:00",
      "updated_at": "2026-09-06T11:49:33-07:00",
      "audit": "/api/work/task/WT-0123/audit",
      "submit_to": "/api/work/task/WT-0123/submit"
    },
    {
      "task_id": "WT-0129",
      "kind": "work",
      "objective": "Build and publish one unified LBL daily performance sheet with one row per calendar day across all available history, merging BigCommerce store truth, Triple Whale spend and attribution, Meta delivery, Klaviyo email and SMS, customer classification, data-quality flags, and derived daily KPIs without collapsing conflicting source definitions",
      "detail": "The sheet is the canonical team-readable daily dataset behind the daily report. It must preserve source-specific measures, represent unavailable values as missing rather than zero, include every date from the earliest available source date through the latest complete day in America/Chicago, expose source freshness and reconciliation fields, and be shareable by URL. Dynamic campaign/ad/flow detail may live in supporting tabs or raw fields, but the primary tab is exactly one row per day.",
      "state": "superseded",
      "priority": 1,
      "revision": 4,
      "depends_on": [],
      "permitted_capabilities": [
        "GET api.lbl.fyi/v1/range",
        "GET api.lbl.fyi/v1/today",
        "D1_QUERY",
        "LEDGER_QUERY",
        "GET /api/sheets",
        "POST /api/sheets",
        "PUT /api/sheets/<id>/values/A1",
        "PATCH /api/sheets/<id>",
        "GET /api/sheets/<id>/export.csv"
      ],
      "acceptance_tests": [
        {
          "id": "unified_sheet_exists",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM user_sheets WHERE title = LBL Unified Daily Performance",
          "min": 1
        },
        {
          "id": "unified_sheet_has_daily_cells",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM sheet_cells WHERE sheet_id IN (SELECT id FROM user_sheets WHERE title = LBL Unified Daily Performance)",
          "min": 100
        }
      ],
      "required_evidence": [
        "sheet_url",
        "date_range",
        "daily_row_count",
        "source_inventory",
        "reconciliation_and_missingness_checks"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-06T17:11:49-07:00",
      "updated_at": "2026-09-06T17:12:51-07:00",
      "audit": "/api/work/task/WT-0129/audit",
      "submit_to": "/api/work/task/WT-0129/submit"
    },
    {
      "task_id": "WT-0130",
      "kind": "work",
      "objective": "Build and publish one unified LBL daily performance sheet with one row per calendar day across all available history, merging BigCommerce store truth, Triple Whale spend and attribution, Meta delivery, Klaviyo email and SMS, customer classification, data-quality flags, and derived daily KPIs without collapsing conflicting source definitions",
      "detail": "The sheet is the canonical team-readable daily dataset behind the daily report. It must preserve source-specific measures, represent unavailable values as missing rather than zero, include every date from the earliest available source date through the latest complete day in America/Chicago, expose source freshness and reconciliation fields, and be shareable by URL. Dynamic campaign/ad/flow detail may live in supporting tabs or raw fields, but the primary tab is exactly one row per day.",
      "state": "superseded",
      "priority": 1,
      "revision": 4,
      "depends_on": [],
      "permitted_capabilities": [
        "GET api.lbl.fyi/v1/range",
        "GET api.lbl.fyi/v1/today",
        "D1_QUERY",
        "LEDGER_QUERY",
        "GET /api/sheets",
        "POST /api/sheets",
        "PUT /api/sheets/<id>/values/A1",
        "PATCH /api/sheets/<id>",
        "GET /api/sheets/<id>/export.csv"
      ],
      "acceptance_tests": [
        {
          "id": "unified_sheet_exists",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM user_sheets WHERE title = 'LBL Unified Daily Performance'",
          "min": 1
        },
        {
          "id": "unified_sheet_has_daily_cells",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM sheet_cells WHERE sheet_id IN (SELECT id FROM user_sheets WHERE title = 'LBL Unified Daily Performance')",
          "min": 100
        }
      ],
      "required_evidence": [
        "sheet_url",
        "date_range",
        "daily_row_count",
        "source_inventory",
        "reconciliation_and_missingness_checks"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-06T17:12:10-07:00",
      "updated_at": "2026-09-07T20:30:50-07:00",
      "audit": "/api/work/task/WT-0130/audit",
      "submit_to": "/api/work/task/WT-0130/submit"
    },
    {
      "task_id": "WT-0131",
      "kind": "work",
      "objective": "Build and publish one unified LBL daily performance sheet with one row per calendar day across all available history, merging BigCommerce store truth, Triple Whale spend and attribution, Meta delivery, Klaviyo email and SMS, customer classification, data-quality flags, and derived daily KPIs without collapsing conflicting source definitions",
      "detail": "The sheet is the canonical team-readable daily dataset behind the daily report. It must preserve source-specific measures, represent unavailable values as missing rather than zero, include every date from the earliest available source date through the latest complete day in America/Chicago, expose source freshness and reconciliation fields, and be shareable by URL. Dynamic campaign/ad/flow detail may live in supporting tabs or raw fields, but the primary tab is exactly one row per day.",
      "state": "superseded",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "GET api.lbl.fyi/v1/range",
        "GET api.lbl.fyi/v1/today",
        "D1_QUERY",
        "LEDGER_QUERY",
        "GET /api/sheets",
        "POST /api/sheets",
        "PUT /api/sheets/<id>/values/A1",
        "PATCH /api/sheets/<id>",
        "GET /api/sheets/<id>/export.csv"
      ],
      "acceptance_tests": [
        {
          "id": "unified_sheet_exists",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM user_sheets WHERE title = 'LBL Unified Daily Performance'",
          "min": 1
        },
        {
          "id": "unified_sheet_has_daily_cells",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM sheet_cells WHERE sheet_id IN (SELECT id FROM user_sheets WHERE title = 'LBL Unified Daily Performance')",
          "min": 100
        }
      ],
      "required_evidence": [
        "sheet_url",
        "date_range",
        "daily_row_count",
        "source_inventory",
        "reconciliation_and_missingness_checks"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-06T17:13:08-07:00",
      "updated_at": "2026-09-06T17:24:08-07:00",
      "audit": "/api/work/task/WT-0131/audit",
      "submit_to": "/api/work/task/WT-0131/submit"
    },
    {
      "task_id": "WT-0132",
      "kind": "work",
      "objective": "Publish one literal full-union Google Sheet for LBL: exactly one row per calendar day across all available history, with the complete superset of every daily-addressable field exposed by every connected business-data source/API; no concentration, curation, ranking, collapsing, or agent-selected omission",
      "detail": "Named sources include Triple Whale, direct Meta, Klaviyo and BigCommerce, plus any other discovered daily business-data source. Every source-specific duplicate, disagreement, identifier, status, freshness field, raw daily measure and missing value remains visible as its own column. If a connector returns no daily records, its requested schema and connector status still appear. The owner—not the agent—will decide what matters after seeing the union. A field dictionary may accompany the primary tab, but the primary tab itself must contain the exhaustive daily union in one row per date.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "GET api.lbl.fyi/v1/range",
        "GET api.lbl.fyi/v1/today",
        "POST /api/dispatch (TW, BC, KLAVIYO, META)",
        "POST /api/marketing/meta/insights",
        "APPS_SCRIPT_RUN sheets_create",
        "APPS_SCRIPT_RUN sheets_replace_tab",
        "APPS_SCRIPT_RUN sheets_set_range",
        "APPS_SCRIPT_RUN sheets_append_rows",
        "APPS_SCRIPT_RUN sheets_get",
        "LEDGER_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "sheet_url_present",
          "type": "evidence_present",
          "field": "sheet_url"
        },
        {
          "id": "field_count_present",
          "type": "evidence_present",
          "field": "daily_column_count"
        },
        {
          "id": "date_range_present",
          "type": "evidence_present",
          "field": "date_range"
        },
        {
          "id": "coverage_present",
          "type": "evidence_present",
          "field": "source_coverage"
        },
        {
          "id": "verification_present",
          "type": "evidence_present",
          "field": "union_and_row_checks"
        }
      ],
      "required_evidence": [
        "sheet_url",
        "date_range",
        "daily_row_count",
        "daily_column_count",
        "source_coverage",
        "union_and_row_checks"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 5,
        "tests_passed": 5,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "sheet_url_present",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "sheet_url"
          },
          {
            "id": "field_count_present",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "daily_column_count"
          },
          {
            "id": "date_range_present",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "date_range"
          },
          {
            "id": "coverage_present",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "source_coverage"
          },
          {
            "id": "verification_present",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "union_and_row_checks"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-06T17:52:26-07:00",
      "created_at": "2026-09-06T17:24:58-07:00",
      "updated_at": "2026-09-06T17:52:26-07:00",
      "audit": "/api/work/task/WT-0132/audit",
      "submit_to": "/api/work/task/WT-0132/submit"
    },
    {
      "task_id": "WT-0133",
      "kind": "work",
      "objective": "Publish two exhaustive LBL union sheets: (1) one row per calendar day across all available history with the complete superset of every daily-addressable field from every connected source/API plus all sent-email activity and attributable email revenue, and (2) one row per profile retaining every customer, complete Klaviyo event history and device evidence, historical-baseline performance measures, and transparent opportunity/subscription/reorder scoring; no source-field curation or agent-selected omission",
      "detail": "Extend the accepted WT-0132 full daily union. The customer sheet must include every profile so no customer or prospect is silently excluded, expose is_customer, preserve raw event/device evidence in chunked JSON fields when necessary, and expose score components, reasons, confidence, version, and data coverage separately from the score.",
      "state": "superseded",
      "priority": 1,
      "revision": 4,
      "depends_on": [],
      "permitted_capabilities": [
        "GET https://lbl.fyi/api/data",
        "GET https://lbl.fyi/api/sql",
        "GET https://api.lbl.fyi/v1/range",
        "POST https://api.lbl.fyi/api/dispatch",
        "read accepted WT-0132 workbook",
        "create and verify local XLSX artifact"
      ],
      "acceptance_tests": [
        {
          "id": "workbook_present",
          "type": "evidence_present",
          "field": "workbook_path"
        },
        {
          "id": "daily_shape_present",
          "type": "evidence_present",
          "field": "daily_shape"
        },
        {
          "id": "email_coverage_present",
          "type": "evidence_present",
          "field": "sent_email_coverage"
        },
        {
          "id": "customer_shape_present",
          "type": "evidence_present",
          "field": "customer_shape"
        },
        {
          "id": "event_coverage_present",
          "type": "evidence_present",
          "field": "customer_event_coverage"
        },
        {
          "id": "score_spec_present",
          "type": "evidence_present",
          "field": "score_spec"
        },
        {
          "id": "verification_present",
          "type": "evidence_present",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "workbook_path",
        "daily_shape",
        "sent_email_coverage",
        "customer_shape",
        "customer_event_coverage",
        "score_spec",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-06T18:09:07-07:00",
      "updated_at": "2026-09-06T18:15:18-07:00",
      "audit": "/api/work/task/WT-0133/audit",
      "submit_to": "/api/work/task/WT-0133/submit"
    },
    {
      "task_id": "WT-0134",
      "kind": "work",
      "objective": "Publish two password-gated shareable LBL data-sheet links: (1) one row per calendar day across all available history with the complete superset of every daily-addressable field from every connected source/API, including the Loop communications send ledger and distinct Klaviyo engagement plus attributable email revenue; (2) one row per profile retaining every customer/prospect, complete Klaviyo event history and Loop send history, device evidence, historical-baseline measures, and transparent opportunity/subscription/reorder scoring; no field curation or agent-selected omission",
      "detail": "Use the existing LBL viewer password gate. Each link must expose its dataset only, support wide-table review so the owner can decide what to reduce/refine, and preserve the two email histories as separately named sources. Raw event and send evidence may be chunked, never silently dropped.",
      "state": "superseded",
      "priority": 1,
      "revision": 4,
      "depends_on": [],
      "permitted_capabilities": [
        "GET https://lbl.fyi/api/data",
        "GET https://lbl.fyi/api/sql",
        "GET https://comms.platform.loop.health/v1/admin/sends",
        "GET https://api.lbl.fyi/v1/range",
        "POST https://api.lbl.fyi/api/dispatch",
        "edit and deploy existing loop-data-platform viewer",
        "create and verify local XLSX artifact"
      ],
      "acceptance_tests": [
        {
          "id": "daily_link_present",
          "type": "evidence_present",
          "field": "daily_sheet_url"
        },
        {
          "id": "customer_link_present",
          "type": "evidence_present",
          "field": "customer_sheet_url"
        },
        {
          "id": "gate_verified",
          "type": "evidence_present",
          "field": "password_gate_verification"
        },
        {
          "id": "daily_shape_present",
          "type": "evidence_present",
          "field": "daily_shape"
        },
        {
          "id": "email_coverage_present",
          "type": "evidence_present",
          "field": "email_sources_and_revenue"
        },
        {
          "id": "customer_shape_present",
          "type": "evidence_present",
          "field": "customer_shape"
        },
        {
          "id": "event_coverage_present",
          "type": "evidence_present",
          "field": "customer_event_coverage"
        },
        {
          "id": "score_spec_present",
          "type": "evidence_present",
          "field": "score_spec"
        },
        {
          "id": "verification_present",
          "type": "evidence_present",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "daily_sheet_url",
        "customer_sheet_url",
        "password_gate_verification",
        "daily_shape",
        "email_sources_and_revenue",
        "customer_shape",
        "customer_event_coverage",
        "score_spec",
        "verification"
      ],
      "parent_task": null,
      "supersedes": "WT-0133",
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-06T18:16:16-07:00",
      "updated_at": "2026-09-07T20:30:10-07:00",
      "audit": "/api/work/task/WT-0134/audit",
      "submit_to": "/api/work/task/WT-0134/submit"
    },
    {
      "task_id": "WT-0135",
      "kind": "work",
      "objective": "Publish two password-gated native miscsubjects sheet objects, not LBL Viewer routes or a local workbook: one exhaustive daily union with one row per date and every source-qualified field from Triple Whale, Meta, Klaviyo, BigCommerce and all other loaded APIs including distinct Loop communications sends and email revenue; one exhaustive profile/customer union with one row per profile, Klaviyo and Loop send history, device evidence, own-history performance measures and transparent opportunity/subscription/reorder scoring",
      "detail": "The owner explicitly requires the existing miscsubjects sheet object and /sheet/<id> human links. Preserve all columns for owner-led reduction later. Extend the native sheet engine only where necessary for very wide grids and password entry; do not substitute another viewer. Raw evidence may live in source-qualified JSON cells but may not be silently omitted.",
      "state": "completed",
      "priority": 1,
      "revision": 9,
      "depends_on": [],
      "permitted_capabilities": [
        "GET and POST https://miscsubjects.com/api/sheets",
        "edit and deploy miscsubjects native sheet engine",
        "read https://lbl.fyi/api/sql",
        "read Loop communications admin sends API when authenticated",
        "create data import scripts and sheet cells",
        "create password-gated /sheet/<id> access"
      ],
      "acceptance_tests": [
        {
          "id": "daily_native_link",
          "type": "evidence_present",
          "field": "daily_sheet_url"
        },
        {
          "id": "customer_native_link",
          "type": "evidence_present",
          "field": "customer_sheet_url"
        },
        {
          "id": "native_surface_verified",
          "type": "evidence_present",
          "field": "native_miscsubjects_sheet_verification"
        },
        {
          "id": "password_verified",
          "type": "evidence_present",
          "field": "password_gate_verification"
        },
        {
          "id": "daily_shape",
          "type": "evidence_present",
          "field": "daily_shape"
        },
        {
          "id": "customer_shape",
          "type": "evidence_present",
          "field": "customer_shape"
        },
        {
          "id": "source_coverage",
          "type": "evidence_present",
          "field": "source_coverage"
        },
        {
          "id": "scoring",
          "type": "evidence_present",
          "field": "score_spec"
        }
      ],
      "required_evidence": [
        "daily_sheet_url",
        "customer_sheet_url",
        "native_miscsubjects_sheet_verification",
        "password_gate_verification",
        "daily_shape",
        "customer_shape",
        "source_coverage",
        "score_spec"
      ],
      "parent_task": null,
      "supersedes": "WT-0134",
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 8,
        "tests_passed": 8,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "daily_native_link",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "daily_sheet_url"
          },
          {
            "id": "customer_native_link",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "customer_sheet_url"
          },
          {
            "id": "native_surface_verified",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "native_miscsubjects_sheet_verification"
          },
          {
            "id": "password_verified",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "password_gate_verification"
          },
          {
            "id": "daily_shape",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "daily_shape"
          },
          {
            "id": "customer_shape",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "customer_shape"
          },
          {
            "id": "source_coverage",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "source_coverage"
          },
          {
            "id": "scoring",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "score_spec"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-07T20:29:46-07:00",
      "created_at": "2026-09-06T18:31:55-07:00",
      "updated_at": "2026-09-07T20:29:46-07:00",
      "audit": "/api/work/task/WT-0135/audit",
      "submit_to": "/api/work/task/WT-0135/submit"
    },
    {
      "task_id": "WT-0139",
      "kind": "repair",
      "objective": "Repair the growth spine Meta import: media_initiatives has no brand_id column, so every live import of a real Loop Bio Labs ad account fails; then import the three spend-carrying accounts for 90 days",
      "detail": "Failure class: schema drift — code writes a column no migration created. Layer that permitted it: functions/_lib/growth/store.js upsertMany builds INSERT columns from the object keys with no schema check, and the growth-spine test only checked raw_json absence and index names, not adapter-written columns. Invariant that should have prevented it: every column an adapter writes exists in the migrated schema (now pinned in scripts/growth-spine.test.mjs). Found 2026-09-07 when use_loop.sh (growth-spine session, died at its session limit) was run: 9 of 9 imports for act_837019435833638, act_1541755486898502, act_1673142577392413 returned D1_ERROR no column named brand_id. Repair = migration 0387_growth_media_initiatives_brand.sql + regression test + ship + re-run the import.",
      "state": "completed",
      "priority": 1,
      "revision": 7,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "brand_id_column",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM pragma_table_info('media_initiatives') WHERE name='brand_id'",
          "min": 1
        },
        {
          "id": "three_real_accounts_imported",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(DISTINCT external_id) FROM media_accounts WHERE provider_id='meta_ads' AND external_id IN ('act_837019435833638','act_1541755486898502','act_1673142577392413')",
          "min": 3
        },
        {
          "id": "observations_landed",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM metric_observations WHERE source='meta_ads' AND state IS NOT 'not_collected' AND value IS NOT NULL",
          "min": 1
        }
      ],
      "required_evidence": [
        "ship_deployment",
        "import_receipts"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 3,
        "tests_passed": 3,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "brand_id_column",
            "ok": true,
            "detail": "count=1 (need 1)"
          },
          {
            "id": "three_real_accounts_imported",
            "ok": true,
            "detail": "count=3 (need 3)"
          },
          {
            "id": "observations_landed",
            "ok": true,
            "detail": "count=7791 (need 1)"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-07T21:28:13-07:00",
      "created_at": "2026-09-07T19:41:37-07:00",
      "updated_at": "2026-09-07T21:28:13-07:00",
      "audit": "/api/work/task/WT-0139/audit",
      "submit_to": "/api/work/task/WT-0139/submit"
    },
    {
      "task_id": "WT-0141",
      "kind": "work",
      "objective": "Close the six Loop data holes behind the union sheets: order line items, Klaviyo events since 2026-03-08, subscriptions, Meta spend after 2026-07-16, and mark the two credential-blocked holes UNKNOWN by name",
      "detail": "Owner order 2026-09-07 (Loop unified-view session): 'fix all the holes and then show me end to end'. Measured in the Loop D1 (loop-data-platform) on 2026-09-07 21:50 PDT: (1) 6,577 of 10,846 orders have no order_items; Oct 2025 to May 2026 almost entirely, plus 287 in Aug 2026. (2) klaviyo_events: 907,998 rows, last datetime 2026-03-08. (3) subscriptions: 0 rows (Recharge signal exists only as Klaviyo metrics). (4) meta_api_daily ends 2026-07-16 for act_837019435833638, 2026-06-08 and 2026-06-28 for the other two. (5) stripe_charges start 2026-05-11 (earlier processor has no credential) and (6) order_attribution starts 2025-11-22 (Triple Whale coverage): these two are credential-bound and stay UNKNOWN, never zero. Root cause of 1 and 2: the platform's backfill workflows deliberately do not self-continue (a retry of a step whose create() succeeded spawned chains), each instance stops at its budget with cursor_json {next_url|remaining} and 'no continuation binding wired', and nothing outside drove the remainder. Repair in flight: an external driver feeds bigcommerce/order_products_backfill 250 order ids per instance (27 slices) and klaviyo/events_backfill 100 pages per instance resuming from the handed-over next_url; meta/insights_backfill fired for the three accounts with date_preset maximum (instance c7a1b18a-9abd-4155-bd73-dbbbdfd5b466). Subscriptions needs a collector (none exists in apps/workflows).",
      "state": "open",
      "priority": 1,
      "revision": 4,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "measurements",
          "type": "evidence_present",
          "field": "post_backfill_measurements"
        },
        {
          "id": "unknowns_named",
          "type": "evidence_present",
          "field": "unknown_holes"
        }
      ],
      "required_evidence": [
        "post_backfill_measurements",
        "unknown_holes",
        "driver_log"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-07T21:44:01-07:00",
      "updated_at": "2026-09-07T23:20:57-07:00",
      "audit": "/api/work/task/WT-0141/audit",
      "submit_to": "/api/work/task/WT-0141/submit"
    },
    {
      "task_id": "WT-0146",
      "kind": "work",
      "objective": "Ship the device-census alpha: real Mac + connected iPhone + Chrome-profile inventory observed append-only, candidate capabilities inferred, read capabilities verified by live calls, and a browser-visible ledger projection — all receipted on the events ledger.",
      "detail": "Migration 0388 (device_observations + discovered_capabilities); /api/capability-census (GET projection, POST ingest); /device-capability-ledger (human page); scripts/device-census.mjs (local collector). Verified read capabilities: app.inventory.read (mac+iphone), process.read (mac), ui.snapshot.read (mac AX), device.info.read (iphone), account.read (chrome). Write capabilities behind authenticated apps stay honest candidates until a controlled executor verifies them.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "page_live",
          "type": "http_ok",
          "url": "/device-capability-ledger"
        },
        {
          "id": "page_titled",
          "type": "contains",
          "url": "/device-capability-ledger",
          "needle": "Device-Derived Capability Ledger",
          "scope": "raw"
        },
        {
          "id": "machine_schema",
          "type": "contains",
          "url": "/api/capability-census",
          "needle": "miscsubjects-device-capability-ledger",
          "scope": "raw"
        },
        {
          "id": "observations",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM device_observations",
          "min": 100
        },
        {
          "id": "capabilities",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM discovered_capabilities",
          "min": 20
        },
        {
          "id": "verified",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM discovered_capabilities WHERE verified=1",
          "min": 3
        }
      ],
      "required_evidence": [
        "census_receipt",
        "projection_url"
      ],
      "parent_task": "WT-0145",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "page_live",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/device-capability-ledger"
          },
          {
            "id": "page_titled",
            "ok": true,
            "detail": "contains \"Device-Derived Capability Ledger\" in https://miscsubjects.com/device-capability-ledger (scope=raw) → true"
          },
          {
            "id": "machine_schema",
            "ok": true,
            "detail": "contains \"miscsubjects-device-capability-ledger\" in https://miscsubjects.com/api/capability-census (scope=raw) → true"
          },
          {
            "id": "observations",
            "ok": true,
            "detail": "count=224 (need 100)"
          },
          {
            "id": "capabilities",
            "ok": true,
            "detail": "count=46 (need 20)"
          },
          {
            "id": "verified",
            "ok": true,
            "detail": "count=8 (need 3)"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-07T21:52:35-07:00",
      "created_at": "2026-09-07T21:52:15-07:00",
      "updated_at": "2026-09-07T21:52:35-07:00",
      "audit": "/api/work/task/WT-0146/audit",
      "submit_to": "/api/work/task/WT-0146/submit"
    },
    {
      "task_id": "WT-0151",
      "kind": "work",
      "objective": "Ship the capability control plane end to end: normalized verb namespace, executor registry seeded from the device-control repo ontology, resolver, and an observe-act-verify-receipt invoke loop that promotes verified capabilities into the directory.",
      "detail": "The build is the control plane; the researched repos (Beeper CLI, platform-imessage, Baileys, Playwright/CDP, Appium/WDA, iPhone Mirroring, Tart, CUA, Stagehand, LOCAL_EXEC, AppleScript) are horizontal executors it selects between. Proven live with real, non-destructive invocations on the attached Mac: DEVICE.EXEC (resolved to local-exec, verified act_ok) and APP.ACT app.open (resolved to osascript-ax, observe-before/after state transition verified), each receipted; DEVICE.EXEC promoted candidate->verified->stable->directory row DCAP_DEVICE_EXEC_MAC.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "invoke_live",
          "type": "http_ok",
          "url": "/api/capability-invoke"
        },
        {
          "id": "control_plane",
          "type": "contains",
          "url": "/api/capability-invoke",
          "needle": "control_plane",
          "scope": "raw"
        },
        {
          "id": "page_section",
          "type": "contains",
          "url": "/device-capability-ledger",
          "needle": "The control plane",
          "scope": "raw"
        },
        {
          "id": "executors",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM capability_executors",
          "min": 40
        },
        {
          "id": "verified_invocations",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM capability_invocations WHERE result='verified'",
          "min": 3
        },
        {
          "id": "stable",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM discovered_capabilities WHERE lifecycle='stable'",
          "min": 1
        },
        {
          "id": "promoted",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM directory WHERE key LIKE 'DCAP_%'",
          "min": 1
        }
      ],
      "required_evidence": [
        "invocation_receipts",
        "promoted_directory_key"
      ],
      "parent_task": "WT-0145",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 7,
        "tests_passed": 7,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "invoke_live",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/capability-invoke"
          },
          {
            "id": "control_plane",
            "ok": true,
            "detail": "contains \"control_plane\" in https://miscsubjects.com/api/capability-invoke (scope=raw) → true"
          },
          {
            "id": "page_section",
            "ok": true,
            "detail": "contains \"The control plane\" in https://miscsubjects.com/device-capability-ledger (scope=raw) → true"
          },
          {
            "id": "executors",
            "ok": true,
            "detail": "count=72 (need 40)"
          },
          {
            "id": "verified_invocations",
            "ok": true,
            "detail": "count=4 (need 3)"
          },
          {
            "id": "stable",
            "ok": true,
            "detail": "count=1 (need 1)"
          },
          {
            "id": "promoted",
            "ok": true,
            "detail": "count=1 (need 1)"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-07T22:43:38-07:00",
      "created_at": "2026-09-07T22:43:36-07:00",
      "updated_at": "2026-09-07T22:43:38-07:00",
      "audit": "/api/work/task/WT-0151/audit",
      "submit_to": "/api/work/task/WT-0151/submit"
    },
    {
      "task_id": "WT-0152",
      "kind": "work",
      "objective": "Resolve iPhone writes end to end without Developer Mode: a real, verified file write on the connected iPhone through the control plane, promoted into the directory and callable via OIP dispatch.",
      "detail": "Developer Mode is passcode-gated (owner-only on-device toggle), so dvt/WDA app-launch stays a candidate. But AFC (AppleFileConduit) needs no Developer Mode: pymobiledevice3-afc push/pull/diff/rm is a genuine iPhone write. Registered as an executor, wired as an APP.ACT procedure on iphone-primary, invoked through /api/capability-invoke (verified, act exit=0), promoted candidate->verified->stable->directory row DCAP_APP_ACT_IPHONE, and dispatched through /api/dispatch (verified).",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "afc_executor",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM capability_executors WHERE name='pymobiledevice3-afc'",
          "min": 1
        },
        {
          "id": "iphone_verified_write",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM capability_invocations WHERE executor='pymobiledevice3-afc' AND result='verified'",
          "min": 1
        },
        {
          "id": "iphone_promoted",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM directory WHERE key='DCAP_APP_ACT_IPHONE'",
          "min": 1
        }
      ],
      "required_evidence": [
        "iphone_write_receipt",
        "promoted_key"
      ],
      "parent_task": "WT-0145",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 3,
        "tests_passed": 3,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "afc_executor",
            "ok": true,
            "detail": "count=1 (need 1)"
          },
          {
            "id": "iphone_verified_write",
            "ok": true,
            "detail": "count=3 (need 1)"
          },
          {
            "id": "iphone_promoted",
            "ok": true,
            "detail": "count=1 (need 1)"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-07T23:20:59-07:00",
      "created_at": "2026-09-07T23:20:57-07:00",
      "updated_at": "2026-09-07T23:20:59-07:00",
      "audit": "/api/work/task/WT-0152/audit",
      "submit_to": "/api/work/task/WT-0152/submit"
    },
    {
      "task_id": "WT-0158",
      "kind": "work",
      "objective": "Ship misc emit / call / ask / lease / submit / ledger / ship --wait as the only client CLI agents use to touch the build, holding the credential and the correct header, and put the one-line rule in every instruction row.",
      "detail": "All five v2 specs converge on this. Server side exists: POST /api/dispatch {\"emit\": text} (proof traces t_m275v8c9, t_fjer35fd). Header is x-terminal-key; Bearer is a share token and returns token_corrupted. Output one line per run: KEY ok ms trace result. Never prints a secret. Symlink beside ~/.local/bin/misc. Rule line: \"Call the build with misc. Never curl it. Never source the vault.\" Moves: 20% of Claude shell commands (credential fetch) and 3% (directory lookup) to zero.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "LOCAL_WRITE",
        "LOCAL_EXEC",
        "DIR_PATCH"
      ],
      "acceptance_tests": [
        {
          "type": "contains",
          "url": "/api/dispatch?key=0_CLAUDE_MD&format=markdown",
          "needle": "misc emit",
          "scope": "raw"
        },
        {
          "type": "evidence_present",
          "field": "emit_trace_from_cold_cli"
        }
      ],
      "required_evidence": [
        "emit_trace_from_cold_cli",
        "fifty_turn_zero_curl_sample"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-08T04:54:01-07:00",
      "updated_at": "2026-09-08T04:54:01-07:00",
      "audit": "/api/work/task/WT-0158/audit",
      "submit_to": "/api/work/task/WT-0158/submit"
    },
    {
      "task_id": "WT-0159",
      "kind": "work",
      "objective": "Make every emit run and every MCP tools/call return and persist one canonical receipt envelope {ok,key,result,trace,duration_ms,transport,actor} retrievable by trace, and fix MCP arg serialization and per-token scoped identity.",
      "detail": "Codex v2 findings: a fresh emit probe timed out at 45 s with no body; trace t_m275v8c9 was not found in log or by canonical invocation lookup; MCP auth compares only to env.MCP_TOKEN (no CAP_MINT scoped tokens); MCP converts nested args with String(value) so objects become [object Object]; MCP isError is an ERR: prefix check with no trace. Emit branch also lacks a request timeout budget. Fix in functions/api/dispatch.js emit branch, functions/api/mcp.js, functions/_lib/invocation_log.js.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "LEDGER_QUERY",
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "DEPLOY_LEASE"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "field": "emit_trace_lookup_url"
        },
        {
          "type": "evidence_present",
          "field": "mcp_nested_args_receipt"
        },
        {
          "type": "evidence_present",
          "field": "scoped_token_mcp_call_receipt"
        }
      ],
      "required_evidence": [
        "emit_trace_lookup_url",
        "mcp_nested_args_receipt",
        "scoped_token_mcp_call_receipt"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-08T04:54:17-07:00",
      "updated_at": "2026-09-08T04:54:17-07:00",
      "audit": "/api/work/task/WT-0159/audit",
      "submit_to": "/api/work/task/WT-0159/submit"
    },
    {
      "task_id": "WT-0160",
      "kind": "work",
      "objective": "Make the instruction files projections of directory rows: 0_CLAUDE_MD, 0_AGENTS_MD, 0_AGENT_CONTEXT plus new 0_GROK_AGENTS, 0_CURSOR_RULES and the missing repo CLAUDE.md, generated as full markdown that carries the five operating booleans inline, never a link-only stub.",
      "detail": "Grok Kernel spec section 7 and 15: scripts/sync_pointer_files.mjs currently wipes AGENTS.md into a stub that says it carries no rules; repo CLAUDE.md is missing; CLI hosts auto-read local bytes and do not fetch URLs, so a stub-as-link produces agents that ask the owner to open a terminal. Five booleans: (1) you have full control of this Mac and the vault, never ask the owner to run or paste anything, a hook denial is a denial not missing access; (2) credentials are in ACCESS.md, you find them; (3) call rows with misc emit; (4) prose deliverables go through specialist packs, never authored by the coding agent; (5) work is leased from /api/work, if it is down say so, never invent a side queue. Disk = projection of the row; one edit updates every file and URL.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "DIR_PATCH",
        "DIRECTORY_GET",
        "LOCAL_WRITE",
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT"
      ],
      "acceptance_tests": [
        {
          "type": "contains",
          "url": "/api/dispatch?key=0_AGENTS_MD&format=markdown",
          "needle": "full control of this Mac",
          "scope": "raw"
        },
        {
          "type": "contains",
          "url": "/api/dispatch?key=0_CLAUDE_MD&format=markdown",
          "needle": "full control of this Mac",
          "scope": "raw"
        },
        {
          "type": "contains",
          "url": "/api/dispatch?key=0_AGENTS_MD&format=markdown",
          "needle": "misc emit",
          "scope": "raw"
        }
      ],
      "required_evidence": [
        "generator_commit",
        "disk_files_sha256_match_rows"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-08T04:54:42-07:00",
      "updated_at": "2026-09-08T04:54:42-07:00",
      "audit": "/api/work/task/WT-0160/audit",
      "submit_to": "/api/work/task/WT-0160/submit"
    },
    {
      "task_id": "WT-0161",
      "kind": "work",
      "objective": "Generate a measured session capability manifest at every CLI session start (grants from LOCAL_HEALTH, authenticated CLIs from ACCESS.md, executor health, live tokens, cwd, writable scope) and post its hash to the ledger; add a narrowed Stop-hook check that blocks an access-denial claim only when it contradicts the manifest and no probe receipt exists.",
      "detail": "Orchestration spec B and Claude v2 C5, with the Codex correction: a blanket hook that rejects every access-limitation sentence would misclassify a real sandbox boundary (sandboxed DNS failed while escalated reads succeeded). Availability values: verified, available_unverified, auth_required, permission_missing, offline, unknown. Table session_manifests, append-only. Manifest also injected into every lease response and rendered into the 0_* rows.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "LOCAL_HEALTH",
        "LOCAL_EXEC",
        "D1_EXEC",
        "DIR_PATCH"
      ],
      "acceptance_tests": [
        {
          "type": "sql_count_at_least",
          "sql": "select count(*) n from session_manifests",
          "min": 5
        },
        {
          "type": "evidence_present",
          "field": "false_negative_block_transcript"
        }
      ],
      "required_evidence": [
        "false_negative_block_transcript",
        "manifest_sample_json"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-08T04:54:44-07:00",
      "updated_at": "2026-09-08T04:54:44-07:00",
      "audit": "/api/work/task/WT-0161/audit",
      "submit_to": "/api/work/task/WT-0161/submit"
    },
    {
      "task_id": "WT-0162",
      "kind": "work",
      "objective": "Add an MCP facade profile selectable per token: tools ask, emit, lease, submit plus the hot set of about 25 directory rows as typed tools; keep the wide catalogue for clients that request it; resolve why claude-code and claude-desktop clients poll GET /api/mcp without reaching tools/list.",
      "detail": "Data (Claude v2 A2): of ~1,135 exposed tools, ~25 carry nearly all CLI use (D1_QUERY 720, X_POST 409, FILE_CLAIM 179, LEADS_DRAFT_AI 157, ARCADS_* 282, D1_EXEC 139, LEDGER_QUERY 130, CF_EXEC 95). Grok pays a search_tool round per call; Claude carries all names in context. Kimi v2: 171 of 300 recent /api/mcp events are bare GET probes from claude-code/claude-desktop that never reach tools/list; determine whether this is handshake breakage or health noise before building. Every facade call accepts task_id and run_id.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "LEDGER_QUERY",
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "DEPLOY_LEASE"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "field": "facade_tools_list_json"
        },
        {
          "type": "evidence_present",
          "field": "two_call_chain_receipts_grok_kimi"
        },
        {
          "type": "evidence_present",
          "field": "mcp_probe_finding"
        }
      ],
      "required_evidence": [
        "facade_tools_list_json",
        "two_call_chain_receipts_grok_kimi",
        "mcp_probe_finding"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-08T04:54:45-07:00",
      "updated_at": "2026-09-08T04:54:45-07:00",
      "audit": "/api/work/task/WT-0162/audit",
      "submit_to": "/api/work/task/WT-0162/submit"
    },
    {
      "task_id": "WT-0173",
      "kind": "work",
      "objective": "Rotate the terminal key, scrub the 97 logged shell commands and the owner prompts that carry it verbatim, and add a credential-literal gate so a key-shaped string in any logged command fails the turn log with a named row.",
      "detail": "Finding (Claude v2 spec A5, 2026-09-08): a 64-hex key literal appears in 97 commands in ~/.claude/cc_turns.jsonl and agent_turns.commands_json, and in at least one owner prompt. Root cause: authority is re-established per command (4,098 vault-fetch commands). Scrub locally and in D1; rotate in the vault and every consumer; gate in hooks/_lib/agent-turn-common.js postRecord and the /api/agent_log intake.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "D1_EXEC",
        "LOCAL_EXEC",
        "KV_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "field": "rotation_receipt"
        },
        {
          "type": "evidence_present",
          "field": "scrub_row_count"
        },
        {
          "type": "evidence_present",
          "field": "gate_regression_trace"
        }
      ],
      "required_evidence": [
        "rotation_receipt",
        "scrub_row_count",
        "gate_regression_trace"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-08T04:55:26-07:00",
      "updated_at": "2026-09-08T04:55:26-07:00",
      "audit": "/api/work/task/WT-0173/audit",
      "submit_to": "/api/work/task/WT-0173/submit"
    },
    {
      "task_id": "WT-0174",
      "kind": "work",
      "objective": "Ship misc emit / call / ask / lease / submit / ledger / ship --wait as the only client CLI agents use to touch the build, holding the credential and the correct header, and put the one-line rule in every instruction row.",
      "detail": "All five v2 specs converge on this. Server side exists: POST /api/dispatch {\"emit\": text} (proof traces t_m275v8c9, t_fjer35fd). Header is x-terminal-key; Bearer is a share token and returns token_corrupted. Output one line per run: KEY ok ms trace result. Never prints a secret. Symlink beside ~/.local/bin/misc. Rule line: Call the build with misc. Never curl it. Never source the vault. Moves 20% of Claude shell commands (credential fetch) and 3% (directory lookup) to zero.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "LOCAL_WRITE",
        "LOCAL_EXEC",
        "DIR_PATCH"
      ],
      "acceptance_tests": [
        {
          "type": "contains",
          "url": "/api/dispatch?key=0_CLAUDE_MD&format=markdown",
          "needle": "misc emit",
          "scope": "raw"
        },
        {
          "type": "evidence_present",
          "field": "emit_trace_from_cold_cli"
        }
      ],
      "required_evidence": [
        "emit_trace_from_cold_cli",
        "fifty_turn_zero_curl_sample"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-08T04:55:27-07:00",
      "updated_at": "2026-09-08T04:55:27-07:00",
      "audit": "/api/work/task/WT-0174/audit",
      "submit_to": "/api/work/task/WT-0174/submit"
    },
    {
      "task_id": "WT-0176",
      "kind": "work",
      "objective": "Lane 1 of the connections layer: ship the connections table with identity_kind (owner|service|bot|none) and mechanism as first-class columns, directory.connection_id, a backfill of every existing credentialed row, MCP label, iMessage/Blooio/2Chat/X/Google row, messaging bridge and device into it, a public projection at /api/connections carrying no identity values, and a live test endpoint that alone decides state. Delete the 105 invented services.txt blocks.",
      "detail": "Design is fixed in bridge/client-bridge/HANDOFF.md (section 'The model every lane must use'). Root of lanes 2-6; lanes 2, 3, 5 may run concurrently against the same schema. Migration adds connections + directory.connection_id + provider_connections.connection_id. Backfill rows carry source. Public schema string miscsubjects/connections/1. State is never written by a page.",
      "state": "completed",
      "priority": 1,
      "revision": 7,
      "depends_on": [],
      "permitted_capabilities": [
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "DEPLOY_LEASE",
        "D1_QUERY",
        "DIR_PATCH",
        "LOCAL_EXEC"
      ],
      "acceptance_tests": [
        {
          "id": "projection_live",
          "type": "http_ok",
          "url": "/api/connections"
        },
        {
          "id": "projection_schema",
          "type": "contains",
          "url": "/api/connections",
          "needle": "miscsubjects/connections/1",
          "scope": "raw"
        },
        {
          "id": "projection_ages",
          "type": "contains",
          "url": "/api/connections",
          "needle": "last_checked_at",
          "scope": "raw"
        },
        {
          "id": "backfilled",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM connections",
          "min": 25
        },
        {
          "id": "identity_kinds",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(DISTINCT identity_kind) FROM connections",
          "min": 3
        },
        {
          "id": "mechanisms",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(DISTINCT mechanism) FROM connections",
          "min": 4
        },
        {
          "id": "directory_linked",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM directory WHERE connection_id IS NOT NULL AND connection_id<>''",
          "min": 40
        },
        {
          "id": "evidence",
          "type": "evidence_present",
          "field": "live_test_trace"
        }
      ],
      "required_evidence": [
        "migration_number",
        "live_test_trace",
        "services_txt_block_count_after"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 8,
        "tests_passed": 8,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "projection_live",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/connections"
          },
          {
            "id": "projection_schema",
            "ok": true,
            "detail": "contains \"miscsubjects/connections/1\" in https://miscsubjects.com/api/connections (scope=raw) → true"
          },
          {
            "id": "projection_ages",
            "ok": true,
            "detail": "contains \"last_checked_at\" in https://miscsubjects.com/api/connections (scope=raw) → true"
          },
          {
            "id": "backfilled",
            "ok": true,
            "detail": "count=50 (need 25)"
          },
          {
            "id": "identity_kinds",
            "ok": true,
            "detail": "count=3 (need 3)"
          },
          {
            "id": "mechanisms",
            "ok": true,
            "detail": "count=6 (need 4)"
          },
          {
            "id": "directory_linked",
            "ok": true,
            "detail": "count=526 (need 40)"
          },
          {
            "id": "evidence",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "live_test_trace"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-10T23:53:04-07:00",
      "created_at": "2026-09-10T22:11:18-07:00",
      "updated_at": "2026-09-10T23:53:04-07:00",
      "audit": "/api/work/task/WT-0176/audit",
      "submit_to": "/api/work/task/WT-0176/submit"
    },
    {
      "task_id": "WT-0177",
      "kind": "work",
      "objective": "Lane 2 of the connections layer: OAuth in the door. applyAuth honors oauth2:<connection_id> and oauth2_cc:<connection_id>; a shared token store (KV conn_token:<id>, rotating refresh) that mcpFreshToken also uses; GET /api/connect/<provider>/start and one GET /api/connect/callback for every provider using oauth4webapi (MIT; Arctic is deprecated); revoke endpoint; prove with Slack as the owner's user and a second Google account beside the first.",
      "detail": "Design fixed in bridge/client-bridge/HANDOFF.md, Lane 2. Redirect URI is https://miscsubjects.com/api/connect/callback for every provider. Client secrets are Worker secrets OAUTH_<PROVIDER>_CLIENT_SECRET, never D1. Callback fetches the provider identity endpoint and writes external_account_id + scopes_json + state=connected. Developer-app registration is the only owner-hands step; drive his Chrome through it.",
      "state": "completed",
      "priority": 1,
      "revision": 7,
      "depends_on": [],
      "permitted_capabilities": [
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "DEPLOY_LEASE",
        "D1_QUERY",
        "DIR_PATCH",
        "LOCAL_EXEC",
        "KV_PUT_JSON",
        "KV_GET_JSON"
      ],
      "acceptance_tests": [
        {
          "id": "connect_route",
          "type": "http_ok",
          "url": "/api/connect"
        },
        {
          "id": "connect_schema",
          "type": "contains",
          "url": "/api/connect",
          "needle": "oauth2",
          "scope": "raw"
        },
        {
          "id": "one_oauth_connected",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM connections WHERE mechanism IN ('oauth2','oauth2_cc') AND state='connected'",
          "min": 1
        },
        {
          "id": "two_google",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM connections WHERE service='google' AND state='connected'",
          "min": 2
        },
        {
          "id": "oauth_rows",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM directory WHERE auth LIKE 'oauth2:%'",
          "min": 1
        },
        {
          "id": "evidence",
          "type": "evidence_present",
          "field": "slack_send_as_owner_trace"
        }
      ],
      "required_evidence": [
        "slack_send_as_owner_trace",
        "google_second_account_trace",
        "refresh_after_expiry_trace"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "connect_route",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/connect"
          },
          {
            "id": "connect_schema",
            "ok": true,
            "detail": "contains \"oauth2\" in https://miscsubjects.com/api/connect (scope=raw) → true"
          },
          {
            "id": "one_oauth_connected",
            "ok": true,
            "detail": "count=2 (need 1)"
          },
          {
            "id": "two_google",
            "ok": true,
            "detail": "count=2 (need 2)"
          },
          {
            "id": "oauth_rows",
            "ok": true,
            "detail": "count=14 (need 1)"
          },
          {
            "id": "evidence",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "slack_send_as_owner_trace"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T01:24:26-07:00",
      "created_at": "2026-09-10T22:12:09-07:00",
      "updated_at": "2026-09-11T01:24:26-07:00",
      "audit": "/api/work/task/WT-0177/audit",
      "submit_to": "/api/work/task/WT-0177/submit"
    },
    {
      "task_id": "WT-0178",
      "kind": "work",
      "objective": "Lane 3 of the connections layer: the provider catalog. Table provider_catalog imported idempotently from Nango providers.yaml (999 providers, auth_mode vocabulary kept) plus n8n credentials Nango lacks, each row citing the provider's docs_url and the upstream commit; public GET /api/connect/catalog stating per provider what connecting requires in one sentence; API_KEY/BASIC providers connect by naming the vault variable.",
      "detail": "Design fixed in bridge/client-bridge/HANDOFF.md, Lane 3. scripts/import-provider-catalog.mjs, re-runnable, records source nango@<commit>. License note in the script header. connect_state = available | registered | connected. 425 of 999 need only a row plus a vault variable and the door handles them today.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "DEPLOY_LEASE",
        "D1_QUERY",
        "DIR_PATCH",
        "LOCAL_EXEC",
        "KV_PUT_JSON",
        "KV_GET_JSON"
      ],
      "acceptance_tests": [
        {
          "id": "catalog_live",
          "type": "http_ok",
          "url": "/api/connect/catalog"
        },
        {
          "id": "catalog_field",
          "type": "contains",
          "url": "/api/connect/catalog",
          "needle": "auth_mode",
          "scope": "raw"
        },
        {
          "id": "catalog_slack",
          "type": "contains",
          "url": "/api/connect/catalog",
          "needle": "slack",
          "scope": "raw"
        },
        {
          "id": "catalog_size",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM provider_catalog",
          "min": 990
        },
        {
          "id": "catalog_oauth",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM provider_catalog WHERE auth_mode LIKE 'OAUTH2%'",
          "min": 390
        },
        {
          "id": "catalog_cites",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM provider_catalog WHERE docs_url IS NOT NULL AND docs_url<>''",
          "min": 900
        }
      ],
      "required_evidence": [
        "import_script_path",
        "upstream_commit",
        "row_count_after"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "catalog_live",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/connect/catalog"
          },
          {
            "id": "catalog_field",
            "ok": true,
            "detail": "contains \"auth_mode\" in https://miscsubjects.com/api/connect/catalog (scope=raw) → true"
          },
          {
            "id": "catalog_slack",
            "ok": true,
            "detail": "contains \"slack\" in https://miscsubjects.com/api/connect/catalog (scope=raw) → true"
          },
          {
            "id": "catalog_size",
            "ok": true,
            "detail": "count=1239 (need 990)"
          },
          {
            "id": "catalog_oauth",
            "ok": true,
            "detail": "count=465 (need 390)"
          },
          {
            "id": "catalog_cites",
            "ok": true,
            "detail": "count=1239 (need 900)"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-10T23:04:22-07:00",
      "created_at": "2026-09-10T22:12:10-07:00",
      "updated_at": "2026-09-10T23:04:22-07:00",
      "audit": "/api/work/task/WT-0178/audit",
      "submit_to": "/api/work/task/WT-0178/submit"
    },
    {
      "task_id": "WT-0180",
      "kind": "work",
      "objective": "Lane 5 of the connections layer: inbound events. Table inbound_events with dedupe on external_id and a stored cursor per connection; the WhatsApp/Signal/Telegram bridges, iMessage watch, Slack Events and Gmail history feed it through CLIENT_EVENT (exists, untested, unwired); prove by pairing WhatsApp once from the build page and receiving one real message onto the ledger.",
      "detail": "Design fixed in bridge/client-bridge/HANDOFF.md, Lane 5. The client bridge daemon polls the Matrix homeserver; a duplicate external_id is a no-op; processing resumes after daemon restart. The owner's one step: scan the WhatsApp code shown on /admin/services. Until Lane 1 lands, connection_id may be the planned id string.",
      "state": "completed",
      "priority": 1,
      "revision": 7,
      "depends_on": [],
      "permitted_capabilities": [
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "DEPLOY_LEASE",
        "D1_QUERY",
        "DIR_PATCH",
        "LOCAL_EXEC",
        "KV_PUT_JSON",
        "KV_GET_JSON",
        "CLIENT_EVENT",
        "IMSG_WATCH_STATUS"
      ],
      "acceptance_tests": [
        {
          "id": "table",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM inbound_events",
          "min": 1
        },
        {
          "id": "real_message",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM inbound_events WHERE kind='message.received' AND processed_at IS NOT NULL",
          "min": 1
        },
        {
          "id": "client_event_tested",
          "type": "contains",
          "url": "/api/directory/CLIENT_EVENT",
          "needle": "works",
          "scope": "raw"
        },
        {
          "id": "evidence",
          "type": "evidence_present",
          "field": "received_message_ledger_trace"
        }
      ],
      "required_evidence": [
        "received_message_ledger_trace",
        "dedupe_proof",
        "restart_resume_proof"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 4,
        "tests_passed": 4,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "table",
            "ok": true,
            "detail": "count=88 (need 1)"
          },
          {
            "id": "real_message",
            "ok": true,
            "detail": "count=66 (need 1)"
          },
          {
            "id": "client_event_tested",
            "ok": true,
            "detail": "contains \"works\" in https://miscsubjects.com/api/directory/CLIENT_EVENT (scope=raw) → true"
          },
          {
            "id": "evidence",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "received_message_ledger_trace"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T00:48:00-07:00",
      "created_at": "2026-09-10T22:12:14-07:00",
      "updated_at": "2026-09-11T00:48:00-07:00",
      "audit": "/api/work/task/WT-0180/audit",
      "submit_to": "/api/work/task/WT-0180/submit"
    },
    {
      "task_id": "WT-0182",
      "kind": "work",
      "objective": "Lane 7 of the connections layer: the counterparty layer. A contacts table joining a person to their identity on each channel (phone for iMessage/WhatsApp/Signal, Slack user id per workspace, email, X handle, Telegram id), seeded from existing PROFILE_*/CONTACT_* rows and the Mac Contacts, and one directory row REACH that takes {person, identity_kind, text} and resolves at run time to the live connection that can deliver as that identity, receipted on the ledger.",
      "detail": "Design context in bridge/client-bridge/HANDOFF.md. The connections table models the owner's side only; this lane models the other party so a flow step can read 'reach this person as owner' and never name a mechanism. Resolution order is the connection preference order (Lane 8) filtered by state=connected and by where the person is reachable. Public projection carries counts only, never identities.",
      "state": "superseded",
      "priority": 1,
      "revision": 2,
      "depends_on": [
        "WT-0176"
      ],
      "permitted_capabilities": [
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "DEPLOY_LEASE",
        "D1_QUERY",
        "DIR_PATCH",
        "LOCAL_EXEC",
        "KV_PUT_JSON",
        "KV_GET_JSON",
        "CAP_MINT",
        "CAP_EXPLAIN"
      ],
      "acceptance_tests": [
        {
          "id": "contacts_table",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM contacts",
          "min": 50
        },
        {
          "id": "identities",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM contact_identities",
          "min": 100
        },
        {
          "id": "channels",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(DISTINCT channel) FROM contact_identities",
          "min": 3
        },
        {
          "id": "reach_row",
          "type": "contains",
          "url": "/api/directory/REACH",
          "needle": "identity_kind",
          "scope": "raw"
        },
        {
          "id": "reach_green",
          "type": "contains",
          "url": "/api/directory/REACH",
          "needle": "works",
          "scope": "raw"
        },
        {
          "id": "evidence",
          "type": "evidence_present",
          "field": "reach_as_owner_trace"
        }
      ],
      "required_evidence": [
        "reach_as_owner_trace",
        "resolution_explanation"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-10T22:36:03-07:00",
      "updated_at": "2026-09-10T23:10:15-07:00",
      "audit": "/api/work/task/WT-0182/audit",
      "submit_to": "/api/work/task/WT-0182/submit"
    },
    {
      "task_id": "WT-0183",
      "kind": "work",
      "objective": "Lane 8 of the connections layer: identity-scoped authority, typed operations, fallback order. Capability tokens carry an identity ceiling (none < bot < service < owner) and dispatch refuses an owner-identity row under a lower ceiling; every directory row with a connection_id must carry a non-empty input_schema or the row test fails; operations name an ordered list of connections and dispatch walks it on failure, recording which one delivered.",
      "detail": "Design context in bridge/client-bridge/HANDOFF.md. Sending as the owner must require a higher grant than sending as a bot. The executor-health chain in the capability control plane is the precedent for the walk; here the order is stored on the operation. Refusals are ledgered with the ceiling that stopped them.",
      "state": "superseded",
      "priority": 1,
      "revision": 2,
      "depends_on": [
        "WT-0176",
        "WT-0177"
      ],
      "permitted_capabilities": [
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "DEPLOY_LEASE",
        "D1_QUERY",
        "DIR_PATCH",
        "LOCAL_EXEC",
        "KV_PUT_JSON",
        "KV_GET_JSON",
        "CAP_MINT",
        "CAP_EXPLAIN"
      ],
      "acceptance_tests": [
        {
          "id": "schema_enforced",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM directory WHERE connection_id IS NOT NULL AND connection_id<>'' AND input_schema IS NOT NULL AND input_schema<>''",
          "min": 40
        },
        {
          "id": "no_untyped",
          "type": "sql_count_at_least",
          "sql": "SELECT CASE WHEN COUNT(*)=0 THEN 1 ELSE 0 END FROM directory WHERE connection_id IS NOT NULL AND connection_id<>'' AND enabled=1 AND (input_schema IS NULL OR input_schema='')",
          "min": 1
        },
        {
          "id": "ceiling_documented",
          "type": "contains",
          "url": "/api/directory/CAP_EXPLAIN",
          "needle": "identity_ceiling",
          "scope": "raw"
        },
        {
          "id": "fallback_order",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM operation_connections",
          "min": 10
        },
        {
          "id": "evidence",
          "type": "evidence_present",
          "field": "refused_owner_send_trace"
        }
      ],
      "required_evidence": [
        "refused_owner_send_trace",
        "fallback_walk_trace"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-10T22:36:03-07:00",
      "updated_at": "2026-09-10T23:10:59-07:00",
      "audit": "/api/work/task/WT-0183/audit",
      "submit_to": "/api/work/task/WT-0183/submit"
    },
    {
      "task_id": "WT-0184",
      "kind": "build",
      "objective": "Personal-world signal layer: a recorder on the owner Mac that enumerates Shortcuts (with decoded action steps, typed inputs/outputs, origin device), App Intents metadata, AppleScript dictionaries, URL schemes and notification emitters, plus a live signal recorder (HTTPS flows through mitmproxy, Shortcut runs, Apple Event log, notifications) that writes every observed signal as a device_observations row and every replayable signal as a discovered_capabilities candidate with a capability_procedures recipe, so the existing invoke → verify → stable → directory-row lifecycle promotes observed owner actions into ordinary Directory rows. One unified event envelope over events/inbound_events/phone_events/capability_invocations/device_observations at GET /api/events/unified. Phone Personal-Automation triggers land as device_event on /api/phone/in without touching ROUTER.",
      "detail": "Owner thesis 2026-09-11: because every capability is one object (row = API = CLI = tag = MCP tool = flow step = sheet line, one authority, one ledger), a signal observed under a real owner action on any device becomes that same object. Capture/replay alone is prior art; the shared grammar is the novelty. Files: scripts/personal-world-recorder.mjs, scripts/signal-recorder/*, functions/api/events/unified.js, functions/api/phone/in.js.",
      "state": "completed",
      "priority": 1,
      "revision": 9,
      "depends_on": [],
      "permitted_capabilities": [
        "capability-census",
        "capability-invoke",
        "D1_QUERY",
        "LOCAL_EXEC"
      ],
      "acceptance_tests": [
        {
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM discovered_capabilities WHERE executor IN ('shortcuts-run','jxa','app-intent','open-url','http-replay')",
          "min": 200
        },
        {
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM discovered_capabilities WHERE executor IN ('shortcuts-run','jxa') AND verified=1",
          "min": 10
        },
        {
          "type": "contains",
          "url": "https://miscsubjects.com/api/events/unified",
          "needle": "not_found"
        },
        {
          "type": "contains",
          "url": "https://miscsubjects.com/api/capability-census",
          "needle": "shortcuts-run"
        },
        {
          "type": "evidence_present",
          "field": "recorder_receipt"
        },
        {
          "type": "evidence_present",
          "field": "unified_sample"
        }
      ],
      "required_evidence": [
        "recorder_receipt",
        "unified_sample",
        "verified_count"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 1,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "sql_count_at_least",
            "ok": true,
            "detail": "count=1610 (need 200)"
          },
          {
            "id": "sql_count_at_least",
            "ok": true,
            "detail": "count=28 (need 10)"
          },
          {
            "id": "contains",
            "ok": true,
            "detail": "contains \"not_found\" in https://miscsubjects.com/api/events/unified (scope=content) → true"
          },
          {
            "id": "contains",
            "ok": true,
            "detail": "contains \"shortcuts-run\" in https://miscsubjects.com/api/capability-census (scope=content) → true"
          },
          {
            "id": "evidence_present",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "recorder_receipt"
          },
          {
            "id": "evidence_present",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "unified_sample"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T07:04:59-07:00",
      "created_at": "2026-09-11T05:44:28-07:00",
      "updated_at": "2026-09-11T07:04:59-07:00",
      "audit": "/api/work/task/WT-0184/audit",
      "submit_to": "/api/work/task/WT-0184/submit"
    },
    {
      "task_id": "WT-0185",
      "kind": "work",
      "objective": "Invocation grammar v1: one resolver door (/api/resolve) that turns one line or {key,args} into a routed, receipted capability call; hybrid tool projections for OpenAI/Anthropic/MCP; generic verified webhook door /hook/<id>; misc CLI capability mode; generated JS/Python SDKs",
      "detail": "",
      "state": "superseded",
      "priority": 1,
      "revision": 4,
      "depends_on": [],
      "permitted_capabilities": [
        "FILE_PUT",
        "D1_EXEC",
        "LOCAL_EXEC"
      ],
      "acceptance_tests": [
        {
          "test": "GET https://miscsubjects.com/api/resolve?line=quake+feed+3+5 returns 200 with key QUAKE_FEED and args.limit=3"
        },
        {
          "test": "POST https://miscsubjects.com/api/tools/openai.json returns tools including misc_find and misc_run"
        },
        {
          "test": "GET https://miscsubjects.com/hook/hk_test returns 404 JSON with error unknown_hook"
        }
      ],
      "required_evidence": [
        "resolve_url",
        "tools_url",
        "hook_url",
        "test_output"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-11T10:45:24-07:00",
      "updated_at": "2026-09-11T13:54:01-07:00",
      "audit": "/api/work/task/WT-0185/audit",
      "submit_to": "/api/work/task/WT-0185/submit"
    },
    {
      "task_id": "WT-0186",
      "kind": "work",
      "objective": "Routing + context compiler: hand every large-model turn one bounded work packet (task, constraints, acceptance, exact hashed source, deps, prior decisions, <=8 tools, surface, verify) instead of a 100-call discovery loop; compile -> execute -> verify -> repair/advance",
      "detail": "BUILD DECISION (owner, 2026-09-11): separate cheap context compilation from expensive reasoning. A large model never discovers where it is, what tools exist, what the user meant, or what happened before. The build compiles that into one bounded WORK PACKET and hands it over. Sequence: compile -> execute -> verify -> repair/advance. Never agent -> agent -> agent.\n\nARCHITECTURE (what exists after this task)\n  1 PHRASE     small model: raw request -> {goal, constraints[], acceptance[]}. Nothing else.\n  2 CONTEXT    deterministic first, small model second: work object state + prior decisions + receipts relevant to the goal. Facts and references only, capped (default 20k tokens).\n  3 TOOLS      /api/tools/find over the goal -> the smallest capability set (default <= 8) + the execution surface (terminal agent | api model | web model | browser | mac | iphone | mcp | http).\n  4 FETCH      deterministic: for each target object the directory row's `context` column {files, symbols, tests, gate} -> exact bounded source sections + sha256 per file + callers.\n  5 EXECUTE    large model receives ONLY the packet. Produces a patch or a capability call.\n  6 VERIFY     deterministic: tests named in the packet + coding-law hash check + effects/authority check. Small model only when a test output needs reading.\n  7 REPAIR     mechanical failure -> repair packet (failing test output + the exact hunk) back to the SAME model inside the same logical turn, max 2. Otherwise advance the work object; the next turn may route to a different large model.\n  ROUTING      one rule table, typed rows: when {prefix|capability|effects|device} -> {surface, executor, model_tier}. `misc:` prefix -> terminal agent surface; result captured and returned to the originating agent.\n\nTHE PACKET (the compiler's only output; every field required, empty allowed, never omitted)\n  packet_id, work_id (work object task id), turn\n  TASK        one sentence, imperative\n  CONSTRAINTS list of invariants that must remain true (from governing_invariants + prior decisions)\n  ACCEPTANCE  list of {test, how_to_run} that prove completion\n  TARGET      {objects[], files[], symbols[]}\n  CURRENT     [{path, sha256, ranges:[{from,to}], text}]  exact bounded source, hashed\n  DEPENDENCIES [{path, symbol, why}] callers/imports/contracts that matter for THIS change only\n  PRIOR       [{decision, source_url}] decisions that bind this change\n  TOOLS       [{key, schema}] the selected suite, <= 8 unless the router says otherwise\n  SURFACE     terminal | api | web | browser | mac | iphone | mcp | http\n  MODEL       {tier: large|small, preferred: id, fallback: id}\n  VERIFY      [{kind: test|predicate|gate, run, expect}]\n  BUDGET      {max_tokens, max_tool_calls, max_repairs}\n  RECEIPT     where the result is written (invocation id / work action)\n\nMEASUREMENT (the acceptance for this task, not an aspiration)\n  agent_turns already records tool calls per turn. Baseline: median tool calls per code-changing turn over the last 30 days, per model. Target after: <= 25% of baseline on packet-fed turns, same acceptance rate. Report both numbers on the task.\n\nIMPLEMENTATION SEQUENCE (do in this order; each step ships alone)\n  S1 directory.context column populated for the 40 most-edited files' objects (exists as a column since 0396; empty). Deterministic FETCH over it. No model.\n  S2 packet builder /api/packet {work_id | goal} -> packet JSON using FETCH + /api/tools/find + work object. Deterministic; PHRASE is a template until S4.\n  S3 routing table rows + `misc:` prefix route -> terminal agent, result returned to caller. Uses /api/resolve for capability execution.\n  S4 small-model PHRASE and CONTEXT selection (gateway small tier), bounded outputs validated against the packet schema; refused if they add fields.\n  S5 VERIFY + REPAIR loop, max 2 repairs, inside one logical turn.\n  S6 measurement report on agent_turns; then the mutation algebra (get set add remove move bind filter run) over typed objects as its own task.\n\nOUT OF SCOPE HERE: renaming capability keys; new invocation surfaces (shipped under WT-0185); a general-purpose DSL.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "FILE_PUT",
        "D1_EXEC",
        "LOCAL_EXEC",
        "RESOLVE",
        "FIND"
      ],
      "acceptance_tests": [
        {
          "test": "GET /api/packet?work_id=<WT> returns a packet with every field listed in the detail, CURRENT entries carry sha256 that match the files on origin/main"
        },
        {
          "test": "agent_turns shows median tool calls per code-changing turn on packet-fed turns <= 25% of the 30-day baseline, same acceptance rate; both numbers on the task"
        },
        {
          "test": "a message prefixed misc: routes to the terminal agent surface and its result is returned to the originating agent with a receipt"
        }
      ],
      "required_evidence": [
        "packet_url",
        "baseline_tool_calls",
        "packet_tool_calls",
        "routing_receipt"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-11T11:08:54-07:00",
      "updated_at": "2026-09-11T11:08:54-07:00",
      "audit": "/api/work/task/WT-0186/audit",
      "submit_to": "/api/work/task/WT-0186/submit"
    },
    {
      "task_id": "WT-0187",
      "kind": "work",
      "objective": "Routing + context compiler: hand every large-model turn one bounded work packet (task, constraints, acceptance, exact hashed source, deps, prior decisions, <=8 tools, surface, verify) instead of a 100-call discovery loop; compile -> execute -> verify -> repair/advance",
      "detail": "BUILD DECISION (owner, 2026-09-11): separate cheap context compilation from expensive reasoning. A large model never discovers where it is, what tools exist, what the user meant, or what happened before. The build compiles that into one bounded WORK PACKET and hands it over. Sequence: compile -> execute -> verify -> repair/advance. Never agent -> agent -> agent.\n\nARCHITECTURE (what exists after this task)\n  1 PHRASE     small model: raw request -> {goal, constraints[], acceptance[]}. Nothing else.\n  2 CONTEXT    deterministic first, small model second: work object state + prior decisions + receipts relevant to the goal. Facts and references only, capped (default 20k tokens).\n  3 TOOLS      /api/tools/find over the goal -> the smallest capability set (default <= 8) + the execution surface (terminal agent | api model | web model | browser | mac | iphone | mcp | http).\n  4 FETCH      deterministic: for each target object the directory row's `context` column {files, symbols, tests, gate} -> exact bounded source sections + sha256 per file + callers.\n  5 EXECUTE    large model receives ONLY the packet. Produces a patch or a capability call.\n  6 VERIFY     deterministic: tests named in the packet + coding-law hash check + effects/authority check. Small model only when a test output needs reading.\n  7 REPAIR     mechanical failure -> repair packet (failing test output + the exact hunk) back to the SAME model inside the same logical turn, max 2. Otherwise advance the work object; the next turn may route to a different large model.\n  ROUTING      one rule table, typed rows: when {prefix|capability|effects|device} -> {surface, executor, model_tier}. `misc:` prefix -> terminal agent surface; result captured and returned to the originating agent.\n\nTHE PACKET (the compiler's only output; every field required, empty allowed, never omitted)\n  packet_id, work_id, turn\n  TASK         one sentence, imperative\n  CONSTRAINTS  invariants that must remain true (governing_invariants + prior decisions)\n  ACCEPTANCE   [{test, how_to_run}] that prove completion\n  TARGET       {objects[], files[], symbols[]}\n  CURRENT      [{path, sha256, ranges:[{from,to}], text}] exact bounded source, hashed\n  DEPENDENCIES [{path, symbol, why}] callers/imports/contracts that matter for THIS change only\n  PRIOR        [{decision, source_url}] decisions that bind this change\n  TOOLS        [{key, schema}] the selected suite, <= 8 unless the router says otherwise\n  SURFACE      terminal | api | web | browser | mac | iphone | mcp | http\n  MODEL        {tier: large|small, preferred, fallback}\n  VERIFY       [{kind: test|predicate|gate, run, expect}]\n  BUDGET       {max_tokens, max_tool_calls, max_repairs}\n  RECEIPT      where the result is written (invocation id / work action)\n\nMEASUREMENT (the acceptance, not an aspiration)\n  agent_turns already records tool calls per turn. Baseline: median tool calls per code-changing turn over the last 30 days, per model. Target: <= 25% of baseline on packet-fed turns, same acceptance rate. Both numbers on the task.\n\nIMPLEMENTATION SEQUENCE (each step ships alone)\n  S1 directory.context populated for the objects behind the 40 most-edited files (column exists since 0396, empty). Deterministic FETCH over it. No model.\n  S2 /api/packet {work_id | goal} -> packet JSON from FETCH + /api/tools/find + the work object. Deterministic; PHRASE is a template until S4.\n  S3 routing table rows + `misc:` prefix -> terminal agent, result returned to caller. Capability execution via /api/resolve.\n  S4 small-model PHRASE and CONTEXT (gateway small tier); outputs validated against the packet schema, refused if they add fields.\n  S5 VERIFY + REPAIR loop, max 2 repairs, inside one logical turn.\n  S6 measurement report on agent_turns; then the mutation algebra (get set add remove move bind filter run) over typed objects as its own task.\n\nOUT OF SCOPE: renaming capability keys; new invocation surfaces (shipped under WT-0185); a general-purpose DSL.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "FILE_PUT",
        "D1_EXEC",
        "LOCAL_EXEC",
        "RESOLVE",
        "FIND"
      ],
      "acceptance_tests": [
        {
          "test": "GET /api/packet?work_id=<WT> returns a packet with every field listed in the detail; CURRENT entries carry sha256 matching the files on origin/main"
        },
        {
          "test": "agent_turns shows median tool calls per code-changing turn on packet-fed turns <= 25% of the 30-day baseline at the same acceptance rate; both numbers on the task"
        },
        {
          "test": "a message prefixed misc: routes to the terminal agent surface and its result returns to the originating agent with a receipt"
        }
      ],
      "required_evidence": [
        "packet_url",
        "baseline_tool_calls",
        "packet_tool_calls",
        "routing_receipt"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-11T11:09:57-07:00",
      "updated_at": "2026-09-11T11:09:57-07:00",
      "audit": "/api/work/task/WT-0187/audit",
      "submit_to": "/api/work/task/WT-0187/submit"
    },
    {
      "task_id": "WT-0188",
      "kind": "work",
      "objective": "DECISION 1 (owner, final): grammar spec canon = Astra v2, amended by Grok v2.1 (facts) and Claude v3 (decisions fold)",
      "detail": "YES. Canonical human/machine grammar is docs/superpowers/specs/2026-09-11-unified-grammar-v2.md, as amended by 2026-09-11-unified-grammar-v2.1.md (facts) and 2026-09-11-unified-grammar-v3.md (decisions fold).\nv2.1 facts that win if anything conflicts: /api/resolve 200 is the HTML shell, not the JSON door; the cold-model surface is the OIP drop (/web/run/TOOL?share=), not a CLI in the paste; CF_MAIN_* is Cloudflare search-and-execute, not Code Mode; default tool projection hot=12; misc: → work.run is the only WT-0187 seam.\n\nSource: owner message, 2026-09-11, verbatim below. Status: FINAL. Do not re-litigate. Implementation is NOT authorized by this row. If later told to build, the order is: (1) freeze v1 parse meanings, (2) typed JSON + account/device actually reaching dispatch, (3) credential from connection_id not only auth string, (4) v2 §17 projections, (5) v4 §4 additions, (6) flow predicates. Every step through scripts/ship.mjs; coding-law lease before the first code edit. Do not: rewrite the Tap & Go drop; put CLI in the drop; add OPENAI_* rows that skip the AI Gateway; invent misc git status; treat Code Mode as already shipped; run Appendix D again.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "decision_written_to_spec",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "decision_path",
          "field": "spec_path"
        }
      ],
      "required_evidence": [
        "commit",
        "spec_path"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "decision_written_to_spec",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "decision_path",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "spec_path"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T14:19:42-07:00",
      "created_at": "2026-09-11T13:55:49-07:00",
      "updated_at": "2026-09-11T14:19:42-07:00",
      "audit": "/api/work/task/WT-0188/audit",
      "submit_to": "/api/work/task/WT-0188/submit"
    },
    {
      "task_id": "WT-0189",
      "kind": "work",
      "objective": "DECISION 2 (owner, final): v1 commit 28517c5a1 stays on main as reference; never shipped, never reverted",
      "detail": "KEEP as reference. Do not revert. Do not ship. Do not treat it as production. /api/resolve in production is the HTML shell.\n\nSource: owner message, 2026-09-11, verbatim below. Status: FINAL. Do not re-litigate. Implementation is NOT authorized by this row. If later told to build, the order is: (1) freeze v1 parse meanings, (2) typed JSON + account/device actually reaching dispatch, (3) credential from connection_id not only auth string, (4) v2 §17 projections, (5) v4 §4 additions, (6) flow predicates. Every step through scripts/ship.mjs; coding-law lease before the first code edit. Do not: rewrite the Tap & Go drop; put CLI in the drop; add OPENAI_* rows that skip the AI Gateway; invent misc git status; treat Code Mode as already shipped; run Appendix D again.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "decision_written_to_spec",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "decision_path",
          "field": "spec_path"
        }
      ],
      "required_evidence": [
        "commit",
        "spec_path"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "decision_written_to_spec",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "decision_path",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "spec_path"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T14:19:46-07:00",
      "created_at": "2026-09-11T13:55:50-07:00",
      "updated_at": "2026-09-11T14:19:46-07:00",
      "audit": "/api/work/task/WT-0189/audit",
      "submit_to": "/api/work/task/WT-0189/submit"
    },
    {
      "task_id": "WT-0190",
      "kind": "work",
      "objective": "DECISION 3 (owner, final): WT-0185 superseded; spec-first",
      "detail": "SUPERSEDE WT-0185. Reason: spec-first; v1 stays as reference on main. Do not submit evidence for it. Do not complete its lease as shipped. (Executed 2026-09-11: WT-0185 state=superseded, revision 4.)\n\nSource: owner message, 2026-09-11, verbatim below. Status: FINAL. Do not re-litigate. Implementation is NOT authorized by this row. If later told to build, the order is: (1) freeze v1 parse meanings, (2) typed JSON + account/device actually reaching dispatch, (3) credential from connection_id not only auth string, (4) v2 §17 projections, (5) v4 §4 additions, (6) flow predicates. Every step through scripts/ship.mjs; coding-law lease before the first code edit. Do not: rewrite the Tap & Go drop; put CLI in the drop; add OPENAI_* rows that skip the AI Gateway; invent misc git status; treat Code Mode as already shipped; run Appendix D again.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "decision_written_to_spec",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "decision_path",
          "field": "spec_path"
        }
      ],
      "required_evidence": [
        "commit",
        "spec_path"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "decision_written_to_spec",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "decision_path",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "spec_path"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T14:19:49-07:00",
      "created_at": "2026-09-11T13:55:51-07:00",
      "updated_at": "2026-09-11T14:19:49-07:00",
      "audit": "/api/work/task/WT-0190/audit",
      "submit_to": "/api/work/task/WT-0190/submit"
    },
    {
      "task_id": "WT-0191",
      "kind": "work",
      "objective": "DECISION 4 (owner, final): unified object model v4 §12 choices",
      "detail": "Provider objects: directory rows, planner_visible=0, browse by object. Not a second table.\nsubject_links: replace per-table profile_id. One link table, one backfill.\nT1 row creation: eager only for providers that already have a connection. Lazy for T5 / long tail. No 100k-row dump.\nMerge auto-accept: never on a single email/phone. Auto-accept only with two independent provenances and high confidence. Otherwise a proposal stays a proposal.\noip_work / tasks: freeze + redirect to work_tasks. Do not import into a second task system.\nRate limits: enforce in runHttp (all http rows). Not the resolver. The resolver is not live.\nWT-0187 seam: work.run only. No second parser. No compiler inside the grammar.\nFirst T1 providers: Stripe + GitHub. Third after those two: PagerDuty or Plaid. Not Workday. Not exploded AWS.\n\nSource: owner message, 2026-09-11, verbatim below. Status: FINAL. Do not re-litigate. Implementation is NOT authorized by this row. If later told to build, the order is: (1) freeze v1 parse meanings, (2) typed JSON + account/device actually reaching dispatch, (3) credential from connection_id not only auth string, (4) v2 §17 projections, (5) v4 §4 additions, (6) flow predicates. Every step through scripts/ship.mjs; coding-law lease before the first code edit. Do not: rewrite the Tap & Go drop; put CLI in the drop; add OPENAI_* rows that skip the AI Gateway; invent misc git status; treat Code Mode as already shipped; run Appendix D again.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "decision_written_to_spec",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "decision_path",
          "field": "spec_path"
        }
      ],
      "required_evidence": [
        "commit",
        "spec_path"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "decision_written_to_spec",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "decision_path",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "spec_path"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T14:19:53-07:00",
      "created_at": "2026-09-11T13:55:51-07:00",
      "updated_at": "2026-09-11T14:19:53-07:00",
      "audit": "/api/work/task/WT-0191/audit",
      "submit_to": "/api/work/task/WT-0191/submit"
    },
    {
      "task_id": "WT-0192",
      "kind": "work",
      "objective": "DECISION 5 (owner, final): flows v4 §10.3 — YES vocabulary, NO new engine",
      "detail": "Object predicates (IF customer.ltv > 500, IF stripe.subscription.status is active): approved as reads. If the noun has no verified read op, refuse the condition (same as an unreadable WHEN). Do not guess.\nAFTER <KEY> in flow text = existing event:on key=… in _lib/event_log.js. Alias only. Do not build a second trigger table.\nON CHANGE / UNTIL / ONCE per <noun> / NOT / EVERY: approved as text that compiles onto automations + WHEN + the idempotency that already exists.\nTyped args + per-flow account bindings: same two defects as the grammar (bindArgs flatten; runThroughDispatch drops account/device). Fix those first. Flows inherit the fix. Do not special-case flows.\n\nSource: owner message, 2026-09-11, verbatim below. Status: FINAL. Do not re-litigate. Implementation is NOT authorized by this row. If later told to build, the order is: (1) freeze v1 parse meanings, (2) typed JSON + account/device actually reaching dispatch, (3) credential from connection_id not only auth string, (4) v2 §17 projections, (5) v4 §4 additions, (6) flow predicates. Every step through scripts/ship.mjs; coding-law lease before the first code edit. Do not: rewrite the Tap & Go drop; put CLI in the drop; add OPENAI_* rows that skip the AI Gateway; invent misc git status; treat Code Mode as already shipped; run Appendix D again.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "decision_written_to_spec",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "decision_path",
          "field": "spec_path"
        }
      ],
      "required_evidence": [
        "commit",
        "spec_path"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "decision_written_to_spec",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "decision_path",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "spec_path"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T14:19:56-07:00",
      "created_at": "2026-09-11T13:55:52-07:00",
      "updated_at": "2026-09-11T14:19:56-07:00",
      "audit": "/api/work/task/WT-0192/audit",
      "submit_to": "/api/work/task/WT-0192/submit"
    },
    {
      "task_id": "WT-0193",
      "kind": "work",
      "objective": "GRAMMAR STEP 0: apply 0396 in production, backfill directory.effects as JSON sets, readers column-first",
      "detail": "Migration 0396 applied 2026-09-11 (aliases, effects, visibility, origin, returns, context; semantic_ops, hooks, hook_deliveries; connections.is_default/tenant_id). 0397 backfills effects for 1,416 rows as single-member JSON sets from the deterministic derivation; idempotent (only NULL rows). Readers: functions/_lib/grammar.js effectsSetOf/effectsExceed, workers/mcp-server/src/effects.js. Closes WF-0014 when the Worker reads the column live.\n\nOrder and gates: docs/superpowers/specs/2026-09-11-unified-grammar-v5.md §6 and the owner's six steps (WT-0188). Every code step through scripts/ship.mjs under a coding-law lease.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live_check",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live_check",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T16:04:27-07:00",
      "created_at": "2026-09-11T15:47:05-07:00",
      "updated_at": "2026-09-11T16:04:27-07:00",
      "audit": "/api/work/task/WT-0193/audit",
      "submit_to": "/api/work/task/WT-0193/submit"
    },
    {
      "task_id": "WT-0194",
      "kind": "work",
      "objective": "GRAMMAR STEP 1: freeze v1 parse meanings (compatibility manifest + test)",
      "detail": "docs/superpowers/specs/unified-grammar-v2/compat-manifest-v1.json (87 forms, generated by running grammar.js) + functions/_lib/grammar.compat.test.mjs (90 tests). Sheets door declared tag-only out of scope. The only meaning changed on purpose: --limit binds the limit argument (fact 7).\n\nOrder and gates: docs/superpowers/specs/2026-09-11-unified-grammar-v5.md §6 and the owner's six steps (WT-0188). Every code step through scripts/ship.mjs under a coding-law lease.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live_check",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live_check",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T16:04:33-07:00",
      "created_at": "2026-09-11T15:47:06-07:00",
      "updated_at": "2026-09-11T16:04:33-07:00",
      "audit": "/api/work/task/WT-0194/audit",
      "submit_to": "/api/work/task/WT-0194/submit"
    },
    {
      "task_id": "WT-0195",
      "kind": "work",
      "objective": "GRAMMAR STEP 2: resolved account/device/tenant reach dispatch (resolver + hook door), typed transport, client idempotency, POST-lane meter gate",
      "detail": "dispatch.js assertResolvedContext (connection exists, caller's tenant, row service matches, state connected) → ctx.resolved → receipt.resolved; resolve.js and hook/[[path]].js forward with:{account,device,tenant}; pipe escaping \\| both ways; CONTROL_FLAGS lose limit/q/hot/executor; body.idempotency_key honoured 72h with 409 on body conflict; meteredRefusal shared by GET and POST; CLI sends argv, never a re-joined line.\n\nOrder and gates: docs/superpowers/specs/2026-09-11-unified-grammar-v5.md §6 and the owner's six steps (WT-0188). Every code step through scripts/ship.mjs under a coding-law lease.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live_check",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live_check",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T16:10:16-07:00",
      "created_at": "2026-09-11T15:47:06-07:00",
      "updated_at": "2026-09-11T16:10:16-07:00",
      "audit": "/api/work/task/WT-0195/audit",
      "submit_to": "/api/work/task/WT-0195/submit"
    },
    {
      "task_id": "WT-0196",
      "kind": "work",
      "objective": "GRAMMAR STEP 2b: plan_ref (A5.3) + send gate in shadow mode",
      "detail": "resolve.js mints pr_<hash> per plan (KV, 900s); presenting plan_ref runs exactly that plan under the planning principal (approval = the reference; --yes stays legacy for TTY). Send gate: SEND_GATE_MODE=shadow logs send_gate/shadow_would_block events; enforce returns 409 needs_input with the plan_ref. Enforce only after a week of shadow logs is read (Kimi amendment 1). Flows/automations call dispatch directly and are not behind this door.\n\nOrder and gates: docs/superpowers/specs/2026-09-11-unified-grammar-v5.md §6 and the owner's six steps (WT-0188). Every code step through scripts/ship.mjs under a coding-law lease.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live_check",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live_check",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T16:10:22-07:00",
      "created_at": "2026-09-11T15:47:07-07:00",
      "updated_at": "2026-09-11T16:10:22-07:00",
      "audit": "/api/work/task/WT-0196/audit",
      "submit_to": "/api/work/task/WT-0196/submit"
    },
    {
      "task_id": "WT-0197",
      "kind": "work",
      "objective": "GRAMMAR STEP 3: credential from the resolved connection; account_selector on bindings; semantic ops as rows",
      "detail": "dispatch.js runHttp uses ctx.resolved.auth_ref when the connection's auth_ref is an HTTP auth spec (bearer/basic/headers/query/oauth2/oauth2_cc/oauth1) and the row's service matches; row.auth is the default. STILL OWED: account_selector (header|host|path|token_bound) per binding for providers that take the account outside the credential; BUILTIN_OPS → semantic_ops rows with ranking.\n\nOrder and gates: docs/superpowers/specs/2026-09-11-unified-grammar-v5.md §6 and the owner's six steps (WT-0188). Every code step through scripts/ship.mjs under a coding-law lease.",
      "state": "completed",
      "priority": 1,
      "revision": 8,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live_check",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live_check",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T20:01:05-07:00",
      "created_at": "2026-09-11T15:47:07-07:00",
      "updated_at": "2026-09-11T20:01:05-07:00",
      "audit": "/api/work/task/WT-0197/audit",
      "submit_to": "/api/work/task/WT-0197/submit"
    },
    {
      "task_id": "WT-0198",
      "kind": "work",
      "objective": "GRAMMAR STEP 4a: device-bound tokens replace the master key on the Mac bridge and phone intake",
      "detail": "Independent of steps 1-3 (Kimi amendment 2). TERMINAL_KEY on agent.miscsubjects.com/exec and one bearer on /api/phone/in become device-bound share tokens (scope pfx:LOCAL_ bound device:mac:primary) with per-call signed intents. v4 §8.6. Highest tail risk in the build (S4).\n\nOrder and gates: docs/superpowers/specs/2026-09-11-unified-grammar-v5.md §6 and the owner's six steps (WT-0188). Every code step through scripts/ship.mjs under a coding-law lease.",
      "state": "completed",
      "priority": 1,
      "revision": 7,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live_check",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live_check",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-12T00:34:29-07:00",
      "created_at": "2026-09-11T15:47:08-07:00",
      "updated_at": "2026-09-12T00:34:29-07:00",
      "audit": "/api/work/task/WT-0198/audit",
      "submit_to": "/api/work/task/WT-0198/submit"
    },
    {
      "task_id": "WT-0202",
      "kind": "work",
      "objective": "OIP TAP & GO observes the invocation grammar: permission by declared effect, /web/run speaks words, /web/plan + /web/commit, drop text rewritten",
      "detail": "Owner order 2026-09-11: 'my oip tap & go are broken on the back end & they need to be re-written to observe this grammar'.\nFound: the invoke lanes decided permission by the scope's name (read = invokes nothing), so a read drop's own first instruction (/web/run/NOW) was refused with scope_mismatch; /web/run only accepted an exact UPPER_SNAKE key with a positional body, so grammar lines (quake feed 3 --min-magnitude 4) were unknown_key; no plan-first path existed for a cold model.\nBuilt: functions/_lib/token_rows.js tokenAllowsRow — a token runs a row when the row's effects set is within the token's ceiling; read tokens run only read-effect rows that are public by construction (unauthenticated GET to another host, or the build's public objects), never sensitive or private-store reads. dispatch.js GET invoke + POST lanes use it. functions/web/[[path]].js: run/WORDS, plan/WORDS, commit/pr_… go through /api/resolve; exact KEY?body= keeps the legacy lane. resolve.js expands short codes. unified_handoff.js drop text teaches both spellings, plan/commit, and the effects law; golden re-pinned (scripts/check-tap-go-drop-golden.mjs, .protected/golden/*).",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T16:41:46-07:00",
      "created_at": "2026-09-11T16:32:08-07:00",
      "updated_at": "2026-09-11T16:41:46-07:00",
      "audit": "/api/work/task/WT-0202/audit",
      "submit_to": "/api/work/task/WT-0202/submit"
    },
    {
      "task_id": "WT-0203",
      "kind": "work",
      "objective": "Extend v5 with owner-controlled workbook, GAS-like scripts, complete raw ledger capture and exposed build logic",
      "detail": "\n## 10. Build control through the existing workbook and grammar\n\n**Owner-directed extension, 11 September 2026. Specification published; the capabilities below require implementation and live acceptance.** This section extends v5; it does not create a v6 or replace the existing workbook. Earlier historical restrictions on expanding the grammar do not override this later owner instruction. Historical deployment claims in §8b–8c do not establish acceptance of this extension.\n\nThe owner's requirement is operational: the existing Sheets-style backend must gain the editing and programming power of Sheets plus GAS across the build. Every adjustable value must be visible and controllable through cells, switches, scripts, the API and plain language. Every inbound raw payload, including traffic, must enter the ledger with its timestamp. Every page must expose the data, configuration and execution that produce it. The owner must be able to diagnose and change the build without asking an agent to locate hidden code constants.\n\n### 10.1 Reuse the actual workbook\n\n`functions/admin/sheets/index.js` is the existing interface. `/api/sheets` already provides user grids, A1 ranges, structural edits, view sheets, object-field pins, formulas and saved model runs. Directory and ledger views read their own underlying objects; they are not independent copies of user grids. Extend those mechanisms and the existing directory, settings, event and invocation records. Do not replace them with a second dashboard, an exported Google Sheet or a second configuration store.\n\nOne object has one stable identity, one field contract and one authoritative write path. A cell editor, API request, CLI command, MCP call and natural-language instruction address that same object and field. A read after any of those writes must return the same effective value and revision through every other surface.\n\n### 10.2 Every adjustable value is an addressable field\n\nA control descriptor declares:\n\n```json\n{\n  \"object_ref\": \"directory://EXAMPLE_CAPABILITY\",\n  \"field_id\": \"enabled\",\n  \"schema\": {\"type\": \"boolean\"},\n  \"stored_value\": true,\n  \"effective_value\": true,\n  \"revision\": \"opaque-revision\",\n  \"source\": {\"kind\": \"stored\", \"ref\": \"directory://EXAMPLE_CAPABILITY\"},\n  \"editable\": true,\n  \"apply_mode\": \"immediate\",\n  \"control\": \"switch\",\n  \"read\": {\"operation_ref\": \"object.get\"},\n  \"write\": {\"operation_ref\": \"object.set\"}\n}\n```\n\nThis is a proposed descriptor, not a claim that today's endpoints accept it. Operation references resolve to registered contracts with exact HTTP method, URL, authentication and argument schema; no consumer guesses an endpoint from a label.\n\nCoverage includes URLs and paths; webhook bindings; mappings and field aliases; column order; filters; prompts and model choices; model fallback order; CLI command/executable registrations; device and account bindings; scripts and dependencies; schedules and switches; limits, timeouts, budgets, retry rules and concurrency; minimums, maximums and validation rules; payload templates, output projections and retention settings. New features cannot introduce an adjustable literal without exposing its descriptor.\n\nEach descriptor also exposes description, units where applicable, allowed values, dependencies, scope, default/override precedence and last change. Computed values expose their formula and editable dependencies. Credential fields expose the binding and replacement/revocation controls; secret material is retrieved through its authorized secret access path, not copied into ordinary public metadata. A runtime or provider hard limit is visible with its reason and source. It must not pretend to be an editable setting; its configurable limit and the platform ceiling are distinct fields.\n\nAn inventory lists every discovered adjustable constant and its status: exposed and verified, exposed but unused, or still buried. Each uncovered value names the consumer and the incremental migration needed. Completion requires evidence that execution reads the exposed value; a settings cell with no reader is a defect. Changes requiring restart/redeploy say so and expose configured versus active revisions and the activation action.\n\n### 10.2a Code and logic are exposed, not only settings\n\nThe owner's clarification is binding: **every adjustable behavior must be exposed in plain text or knobs, with an interface the owner can POST to and observe.** A catalog of configuration numbers alone does not satisfy this requirement.\n\nConditions, branching rules, routing precedence, validation, transformations, formulas, payload construction, deduplication, retry decisions, fallback logic and automation bodies must be inspectable and editable as typed controls or plain-text rules/scripts. The inspect panel shows the actual active logic and its version, not a summary of what the code supposedly does. A boolean gets a switch; a bounded quantity gets a numeric control with visible bounds; ordered logic gets reorder controls and a text representation; arbitrary logic gets a source editor with input/output inspection. All have readable and writable API contracts.\n\nFor behavior still compiled into application code, expose its source location, full relevant source, dependencies, active source revision, editable change artifact and the existing validate/publish operation. The owner can submit a change through the API or editor and observe validation, activation, errors and rollback. Mark it as requiring publication until it has actually activated. Merely showing a file path and telling the owner to ask Claude to change it is not an interface. Move changeable business logic into versioned rules/scripts incrementally while preserving a visible source-edit path for the remaining compiled behavior.\n\nEach page's self-description therefore includes a control-and-logic manifest, and each manifest entry resolves to exact GET/read, POST/PATCH/write, validate, run/test and activate operations where applicable. Declare unsupported operations explicitly. No page may claim full exposure while logic that determines its output is missing from this manifest. BC-6 counts uncovered logic as well as uncovered fields.\n\n### 10.3 Cells retain identity when the layout changes\n\nA projected cell binds `(object_ref, field_id)`; a stored grid cell has stable row and column identities. A1 notation is a view-relative selection, resolved against a specified view revision. Sort, filter, column moves and insertions must never retarget an edit already in progress. A stale selection is rejected or re-resolved visibly before execution.\n\nPayload mappings use named fields and explicit source paths, never the index of a currently displayed column. The editor supports nested fields, arrays, multiline strings, literal pipes, null, empty string and absent values without conflating them. Unknown fields and arguments return a named error; they never disappear from a successful response.\n\nCell, range, paste, fill and batch edits carry an expected revision and return changed fields, prior/new values, the active revision and a ledger reference. A stale write returns a conflict containing current values; it does not overwrite another edit. Bulk operations declare atomic versus partial behavior and identify each failed cell. View-column removal, clearing data and deleting a source field are separate operations with exact targets. Undo creates a recorded inverse change against the current revision.\n\n### 10.4 Complete raw data enters the ledger — BC-RAW-01\n\nEvery ingress adapter captures the complete application-visible original payload before parsing, field extraction, deduplication or summarization. This includes traffic/page events, inbound hooks, messages, imports, API requests and device events. Every delivery attempt is recorded even if its event has already been received. Deduplicating an action must not erase a receipt of the duplicate delivery.\n\nThe capture includes event/attempt identity, `received_at` in UTC, separately retained source `occurred_at` when supplied, source and transport, tenant/principal, method and URL where applicable, application-visible headers, content type, original body bytes, byte count, digest and correlation/parent identity. Source timestamps are not silently substituted for receipt timestamps. Binary, invalid JSON and multipart bodies remain recoverable as original bytes; a JSON rendering is a separate projection. Capture limitations imposed by a transport must be named, never called wire-exact capture.\n\nLarge bodies may live in the existing object store with a durable reference in the ledger. The owner can open or download the full original. A clipped cell, preview, excerpt or summary is not the raw payload. Restricted raw content remains accessible to its authorized owner; a public/redacted projection does not replace the original. Retention and deletion policies, missing objects and capture failures are visible controls/statuses. No silent sampling, truncation or success acknowledgement for data whose required durable capture failed.\n\nParsed records, transformations, outbound requests, responses, errors, configuration edits and script runs are ledger-linked data. Each transformation records its source event, exact input references, mapping/script revision, output and field lineage. The owner can inspect an omitted or duplicated field and locate the step that caused it. Telemetry about ledger writes must not recursively generate unlimited telemetry; internal write records carry their provenance within the existing transaction/operation record.\n\nOriginal captures stay distinguishable from edits. The owner can correct, annotate, hide from a view, remap and reprocess the data. A correction is a new version linked to its original; replacing the working value must not falsify what arrived. Existing tables may remain the storage authorities; the ledger provides discoverable records/references across them, not another inconsistent copy of every business table.\n\n### 10.5 A GAS-like programming surface inside the workbook\n\nA script is an editable, versioned object with source, input/output schemas, selected object/range/event scope, dependencies, grants, limits and trigger bindings. The owner can open it beside a selected region, edit it, run it, inspect exact inputs/outputs/logs/errors and run it again. A script can read and write cells, transform payloads and call registered capabilities through the same API. It is more than a saved model prompt.\n\nReuse a supported script executor after verifying its persistence, timeout and effect behavior; no new automation engine is implied. Editor source maps and errors identify the responsible script revision and line. A run records selected object/field identities and input revisions so sorting a sheet during a run cannot change its targets. Multi-step work exposes partial progress, cancellation, failures, checkpoints and the scope of a retry. Expiration of a UI request is not proof that an external action stopped.\n\nButtons, schedules, incoming rows and webhooks bind to the same script object. Every automation has a visible enabled switch, next/last run, bound accounts, inputs, output destination, budget and last error. Turning off a trigger stops new admissions and shows any already-running work separately. Formula recalculation cannot silently replay externally effectful operations. Reprocessing historical payloads is a transformation by default; sending messages or repeating other external effects requires an explicit run mode within the caller's existing grant.\n\nThe existing lead scraper is a first consumer, not a replacement project: expose its actual query, source, filters, page/cursor position, mapping, dedupe rule, limits, destination and failure rows. The owner must be able to edit these values and rerun selected failed rows without rebuilding the scraper.\n\n### 10.6 Every page explains its own operation\n\nEvery page, workbook view and capability exposes an inspect/edit panel generated from its actual bindings. It lists source objects, read/write operations, endpoints, hooks, accounts/devices, schemas, mappings, column ordering, filters, scripts, prompts/models, active settings, recent raw inputs/outputs and failures. Every displayed editable field links to its descriptor and every unexplained value is an inventory defect.\n\nThe machine projection supplies exact executable requests: method, URL, content type, input schema, credential placement, response schema, errors and working examples. Provide a copyable cURL request with credential placeholders, the equivalent grammar/MCP operation, and the response location. The same example must be executable against a controlled fixture; a prose promise or HTTP 200 is insufficient. Documentation and UI controls derive from the same contract, including limitations and unapplied settings.\n\nFor a missing Grok CLI, this view must expose whether its registration is missing, disabled, points to a nonexistent executable, fails authentication, is excluded by a filter or lacks a compatible executor. The owner can edit the responsible field and run its diagnostic. Registering a command does not claim that its executable is installed or authenticated.\n\n### 10.7 Extend the grammar, keep one execution path\n\nUse v2's ordinary object operations and v5's resolver; register any missing operation once in the directory. Do not add a competing parser or hard-code control behavior only inside the workbook. Required operations cover describe/get/set, range updates, view ordering, bindings, script run/replay and automation enable/disable. Precise command spellings and all examples must be generated from the registered contracts before they are advertised as supported.\n\nRepresentative owner intents:\n\n- Put timestamp first and raw payload second in this ledger view.\n- Include traffic events and show the original payload for this row.\n- Map this payload field to this named column and reprocess the selected rows.\n- Change this webhook's destination and show the active binding.\n- Turn this automation off; show anything still running.\n- Set the scraper limit to 500 and retry the failed rows.\n- Show why Grok is absent from the CLI selector; fix the displayed registration.\n\nAn optional model translates these into typed operations against resolved object/field identities. Explicit cell/API/CLI commands do not require a model. Ambiguity returns the exact candidates and missing choice. Already-authorized actions need no repeated approval; a reference to a plan records a plan, not proof of a separate human approval. All surfaces enforce the same grants, revision checks, effects and receipts at the execution boundary.\n\n### 10.8 Bounded implementation increments and ownership\n\nThese are acceptance slices, not claims of completed work. Materialize or attach each to a canonical work task before implementation; reuse existing tasks when they cover the same result. One writer owns each shared file. The model names below assign responsibilities for the owner's handoffs; they do not start remote sessions or authorize messages to third parties.\n\n| Increment | Lead | Deliverable the owner can operate | Acceptance |\n|---|---|---|---|\n| BC-1 | Claude | One traffic event appears with timestamp and complete raw payload in the existing ledger workbook. | Submit a controlled nested payload with Unicode, pipes and a duplicate delivery. Recover original bytes with matching digest; see two delivery attempts, one logical event, named fields and capture status. |\n| BC-2 | Kimi | Edit the traffic view's mapping and column order in the existing workbook, then reprocess its selected rows. | Move timestamp/raw columns; edit a nested mapping; rerun; refresh. Values stay attached to the correct field IDs, original bytes remain accessible, output names its mapping revision. This completes the first owner demonstration with BC-1. |\n| BC-3 | Codex | Shared field descriptors and self-explaining API for those same objects. | Describe, edit and read back one field through cells and API; a stale edit conflicts; an unknown field is refused; generated cURL runs without inferred parameters. Establish the minimal descriptor shape before BC-2 writes, then complete parity here. |\n| BC-4 | Grok | CLI/model registration and one automation's adjustable values exposed as live controls. | Change a model/executable binding, diagnose its availability, toggle an automation and adjust one numeric limit. Its next execution reads the new values and reports the active revision. |\n| BC-5 | Kimi | Editable region-scoped script over the existing lead scraper. | Change its mapping/limit, run selected rows, inspect complete input/output, fix a deliberate script error and rerun only failed rows with no accidental duplicate external action. |\n| BC-6 | Codex + surface owners | Expand descriptor/ledger/inspect coverage across remaining pages and execution surfaces. | Publish counts and exact uncovered objects/fields; each batch proves writes reach execution. No declaration of universal coverage while inventory exceptions remain. |\n\nBC-1 capture and BC-3 descriptor work can proceed independently. BC-2 consumes their minimal contracts; BC-4 follows the same descriptors, and BC-5 reuses the proven region editor and run records. Each increment ships independently through the existing gated path, with the exact owner interaction and readback recorded. No increment waits for a new provider census, frontend marketing redesign, outreach copy or a replacement lead scraper.\n\n### 10.9 Acceptance means the owner can control it\n\nFor every increment, submit the actual page/API address, the initial raw input, the field or script changed, the resulting output, the active revision and ledger references. Check the rendered workbook and the API. Test column reordering, refresh, concurrent edits, nested values, missing values, duplicate delivery and failed-run recovery where applicable. A generic smoke test cannot substitute for the declared interaction.\n\nThe completion condition is: the owner can find the relevant value, understand its source, change it, execute the change and inspect the exact resulting data without asking an agent to find hidden code. The first deliverable is BC-1 + BC-2, using BC-3's minimal field identities. Remaining coverage expands by named batches; it is never silently dropped from the objective.\n",
      "state": "completed",
      "priority": 1,
      "revision": 7,
      "depends_on": [],
      "permitted_capabilities": [
        "repository_docs",
        "work_api"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "field": "spec_sha256"
        },
        {
          "type": "evidence_present",
          "field": "remote_commit"
        },
        {
          "type": "evidence_present",
          "field": "validation"
        }
      ],
      "required_evidence": [
        "spec_sha256",
        "remote_commit",
        "validation",
        "spec_url"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 3,
        "tests_passed": 3,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "evidence_present",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "spec_sha256"
          },
          {
            "id": "evidence_present",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "remote_commit"
          },
          {
            "id": "evidence_present",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "validation"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T22:59:07-07:00",
      "created_at": "2026-09-11T17:52:29-07:00",
      "updated_at": "2026-09-11T22:59:07-07:00",
      "audit": "/api/work/task/WT-0203/audit",
      "submit_to": "/api/work/task/WT-0203/submit"
    },
    {
      "task_id": "WT-0204",
      "kind": "work",
      "objective": "CELLS LAW / CLAUDE 1: every arrival is a raw ledger row (recordArrival, byte-verbatim raw_body, read-time redaction, every door threads raw_id)",
      "detail": "Spec: docs/superpowers/specs/2026-09-11-cells-law/claude.md §3.1-3.2. Gate: a POST with odd key order, unicode and a pipe lands with raw_body byte-identical (sha equal to the client's); every downstream row for that request carries raw_id. Doors: hook, blooio/2chat/telegram (pre-route bypasses and isNoiseWebhook drop fixed), stripe webhook, inbound/event, phone/in, traffic, imessage, dispatch POST+GET, resolve, tools, mcp, sheet-bridge, work, hooks CRUD, matrix, file_upload, kv, r2, store, durable, user-entry, oip/inbox.\n\nLaw: docs/superpowers/specs/2026-09-11-cells-law/00-the-law-and-the-division.md. Coding-law lease before the first edit; ship from a clean checkout; evidence is a body read from production.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T18:46:45-07:00",
      "created_at": "2026-09-11T17:56:18-07:00",
      "updated_at": "2026-09-11T18:46:45-07:00",
      "audit": "/api/work/task/WT-0204/audit",
      "submit_to": "/api/work/task/WT-0204/submit"
    },
    {
      "task_id": "WT-0205",
      "kind": "work",
      "objective": "CELLS LAW / CLAUDE 2: traffic joins the ledger (ingress writes one arrival row per request; guard test rewritten to the law; capture mode is a cell)",
      "detail": "Spec: claude.md §3.3. Reverses migration 0395's severing decision under the owner's law ('that includes the traffic thing'). Gate: one page view → one arrival row with the full query string; traffic_history.raw_id points at it; ledger.traffic.capture cell governs volume.\n\nLaw: docs/superpowers/specs/2026-09-11-cells-law/00-the-law-and-the-division.md. Coding-law lease before the first edit; ship from a clean checkout; evidence is a body read from production.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T18:47:12-07:00",
      "created_at": "2026-09-11T17:56:31-07:00",
      "updated_at": "2026-09-11T18:47:12-07:00",
      "audit": "/api/work/task/WT-0205/audit",
      "submit_to": "/api/work/task/WT-0205/submit"
    },
    {
      "task_id": "WT-0206",
      "kind": "work",
      "objective": "CELLS LAW / CLAUDE 3: the ledger projection reads the raw row (time, RAW IN as received bytes, raw_id column; hidden sources become a cell; one clock)",
      "detail": "Spec: claude.md §3.4, §4.4-4.5. Gate: open the ledger tab, first two columns are time and the received bytes, dispatch rows visible, raw_id clickable; SELECT DISTINCT substr(ts,-6) shows one offset format.\n\nLaw: docs/superpowers/specs/2026-09-11-cells-law/00-the-law-and-the-division.md. Coding-law lease before the first edit; ship from a clean checkout; evidence is a body read from production.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T20:00:58-07:00",
      "created_at": "2026-09-11T17:56:47-07:00",
      "updated_at": "2026-09-11T20:00:58-07:00",
      "audit": "/api/work/task/WT-0206/audit",
      "submit_to": "/api/work/task/WT-0206/submit"
    },
    {
      "task_id": "WT-0207",
      "kind": "work",
      "objective": "CELLS LAW / GROK 1: inventory every buried value (research/KNOBS_INVENTORY.md) and register each as a cell when the contract lands",
      "detail": "docs/superpowers/specs/2026-09-11-cells-law/handoff-grok.md §2-3. No runtime code. One WT row per file owner for each constant that must read a cell.\n\nLaw: docs/superpowers/specs/2026-09-11-cells-law/00-the-law-and-the-division.md. Coding-law lease before the first edit; ship from a clean checkout; evidence is a body read from production; one writer per file per day.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T19:45:59-07:00",
      "created_at": "2026-09-11T18:02:39-07:00",
      "updated_at": "2026-09-11T19:45:59-07:00",
      "audit": "/api/work/task/WT-0207/audit",
      "submit_to": "/api/work/task/WT-0207/submit"
    },
    {
      "task_id": "WT-0208",
      "kind": "work",
      "objective": "CELLS LAW / GROK 2 (standing): verify every ship against the sheet or page body in production; file a failure row per mismatch; run the stranger trial once",
      "detail": "docs/superpowers/specs/2026-09-11-cells-law/handoff-grok.md §3.4.\n\nLaw: docs/superpowers/specs/2026-09-11-cells-law/00-the-law-and-the-division.md. Coding-law lease before the first edit; ship from a clean checkout; evidence is a body read from production; one writer per file per day.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-11T18:02:40-07:00",
      "updated_at": "2026-09-11T18:02:40-07:00",
      "audit": "/api/work/task/WT-0208/audit",
      "submit_to": "/api/work/task/WT-0208/submit"
    },
    {
      "task_id": "WT-0209",
      "kind": "work",
      "objective": "CELLS LAW / KIMI 1: every sheet source writable through one write path; the switchboard view (automations, hooks, watch rules, loop flags, masters, gates)",
      "detail": "docs/superpowers/specs/2026-09-11-cells-law/handoff-kimi.md §3.1-3.2. Gate: flip one automation off in the sheet, AUTOMATE_LIST shows it off, the receipt names the cell.\n\nLaw: docs/superpowers/specs/2026-09-11-cells-law/00-the-law-and-the-division.md. Coding-law lease before the first edit; ship from a clean checkout; evidence is a body read from production; one writer per file per day.",
      "state": "open",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-11T18:02:41-07:00",
      "updated_at": "2026-09-12T00:28:36-07:00",
      "audit": "/api/work/task/WT-0209/audit",
      "submit_to": "/api/work/task/WT-0209/submit"
    },
    {
      "task_id": "WT-0210",
      "kind": "work",
      "objective": "CELLS LAW / KIMI 2: scripts over ranges (the GAS equivalent): scripts tab, sandbox run with sheet.set, button/schedule/webhook/row triggers; the lead scraper as the first script",
      "detail": "docs/superpowers/specs/2026-09-11-cells-law/handoff-kimi.md §3.3-3.4. Gate: tick Run on one lead row, the scraper fires, results land as rows, failed rows rerun from the same button.\n\nLaw: docs/superpowers/specs/2026-09-11-cells-law/00-the-law-and-the-division.md. Coding-law lease before the first edit; ship from a clean checkout; evidence is a body read from production; one writer per file per day.",
      "state": "completed",
      "priority": 1,
      "revision": 7,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-12T00:44:37-07:00",
      "created_at": "2026-09-11T18:02:42-07:00",
      "updated_at": "2026-09-12T00:44:37-07:00",
      "audit": "/api/work/task/WT-0210/audit",
      "submit_to": "/api/work/task/WT-0210/submit"
    },
    {
      "task_id": "WT-0211",
      "kind": "work",
      "objective": "CELLS LAW / KIMI 3: every admin page answers ?inspect=1 and renders the same object as a panel (sources, endpoints, webhooks, fields with ids, effective settings and provenance, latest raw input and output, switches)",
      "detail": "docs/superpowers/specs/2026-09-11-cells-law/handoff-kimi.md §3.5. Gate: /admin/ledger?inspect=1 names its sources, webhook, columns with field ids and the last raw row.\n\nLaw: docs/superpowers/specs/2026-09-11-cells-law/00-the-law-and-the-division.md. Coding-law lease before the first edit; ship from a clean checkout; evidence is a body read from production; one writer per file per day.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-11T18:02:42-07:00",
      "updated_at": "2026-09-11T18:02:42-07:00",
      "audit": "/api/work/task/WT-0211/audit",
      "submit_to": "/api/work/task/WT-0211/submit"
    },
    {
      "task_id": "WT-0212",
      "kind": "work",
      "objective": "CELLS LAW / CLAUDE 0 (was Codex): the addressable object-and-field contract: GET /api/objects/<type> (fields: id, type, min, max, default, provenance, order, writable), GET /api/objects/<type>/<ref> (cells), one write path shared by cells, API, scripts and the grammar's object set",
      "detail": "Codex ran out of credits 2026-09-11 evening; Claude owns this. Field id = <object>.<field>, stable, independent of display order. Backed by pragma_table_info plus a field_meta override table; writes route to the existing governed PATCH/verb per object. Gate: reorder a column, edit a cell, the right field changes; every field in Grok's inventory has an address.\n\nLaw: docs/superpowers/specs/2026-09-11-cells-law/00-the-law-and-the-division.md. Coding-law lease before the first edit; ship from a clean checkout; evidence is a body read from production; one writer per file per day.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T18:46:39-07:00",
      "created_at": "2026-09-11T18:02:43-07:00",
      "updated_at": "2026-09-11T18:46:39-07:00",
      "audit": "/api/work/task/WT-0212/audit",
      "submit_to": "/api/work/task/WT-0212/submit"
    },
    {
      "task_id": "WT-0213",
      "kind": "work",
      "objective": "OWNER DECISION NEEDED: flag private-store reads as sensitive so an act drop (risk ceiling low) can no longer run D1_QUERY, KV_GET, KV_LIST, FILE_GET, FILE_LIST, LOCAL_READ, LOCAL_LIST, LEDGER_QUERY, R2_GET, R2_LIST, SETTINGS_GET, GMAIL_MESSAGES_SEARCH, CONTACTS_LIST",
      "detail": "Surfaced by the Tap & Go live verification 2026-09-11 (v5 §8c) and named again in Kimi's review of the cells-law handoffs: an act drop runs D1_QUERY because that row is sensitive=0, so a stranger holding an act link can read the build database and the owner's mail. The fix is data, not code: set sensitive=1 on the rows above (and any other read of a private store), which the existing risk_ceiling gate already refuses for low-ceiling tokens. Cost: existing act drops lose those reads; the owner's own key is unaffected. Acceptance: with a fresh act drop, /web/run/D1_QUERY?body=SELECT%201 answers risk_ceiling:low<row:high; the owner key still runs it.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "decision",
          "field": "decision"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "decision",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "decision",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "decision"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T19:46:02-07:00",
      "created_at": "2026-09-11T18:10:48-07:00",
      "updated_at": "2026-09-11T19:46:02-07:00",
      "audit": "/api/work/task/WT-0213/audit",
      "submit_to": "/api/work/task/WT-0213/submit"
    },
    {
      "task_id": "WT-0215",
      "kind": "work",
      "objective": "CELLS LAW / CLAUDE: WATCH_TOGGLE <id>|0|1 — a governed, receipted toggle verb for watch_rules (same discipline as AUTOMATE_TOGGLE); until it lands the switchboard writes watch_rules.enabled through /api/cells (sql path, receipted)",
      "detail": "Filed by Kimi as WT-0214 without acceptance tests, which made the work object unsatisfiable and failed the ship gate for everyone; superseded by this row with tests. Build: fn_runners.js watchToggle(env,id,on) mirroring automateToggle; directory row WATCH_TOGGLE (fn) with effects [\"write\"]; cells.js watch_rules.enabled write path switches from sql to the verb. Acceptance: WATCH_TOGGLE <id>|0 flips enabled to 0 and returns a receipt; WATCH_RULE_LIST shows it; /api/cells/watch_rules/<id> shows enabled=0.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T19:25:36-07:00",
      "created_at": "2026-09-11T18:49:44-07:00",
      "updated_at": "2026-09-11T19:25:36-07:00",
      "audit": "/api/work/task/WT-0215/audit",
      "submit_to": "/api/work/task/WT-0215/submit"
    },
    {
      "task_id": "WT-0217",
      "kind": "work",
      "objective": "DEPLOY BLOCKER (supersedes WT-0216, which had no acceptance test and could never close): reconcile the six CODE_LEASE_REGISTRY heads behind git — functions/admin/_layout.js, functions/api/t/[[path]].js, functions/api/loop/sync.js, scripts/market.test.mjs, functions/sheet/[id].js, scripts/flow-learn.test.mjs — through POST /api/coding-law/reconcile with the sha256 of the bytes on origin/main.",
      "detail": "Filed by Kimi as WT-0216 after two ship attempts failed on check-registry-matches-git. Reconciled 2026-09-11 by fable:5fa9f6df: all six answered RECONCILED; node scripts/check-registry-matches-git.mjs now reports heads_behind_git 0 over 204 registry heads. Acceptance: the gate output naming heads_behind_git 0, and the reconcile receipts.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "gate",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "receipts",
          "field": "commit"
        }
      ],
      "required_evidence": [
        "verification",
        "commit"
      ],
      "parent_task": null,
      "supersedes": "WT-0216",
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "gate",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          },
          {
            "id": "receipts",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T20:03:40-07:00",
      "created_at": "2026-09-11T20:03:37-07:00",
      "updated_at": "2026-09-11T20:03:40-07:00",
      "audit": "/api/work/task/WT-0217/audit",
      "submit_to": "/api/work/task/WT-0217/submit"
    },
    {
      "task_id": "WT-0220",
      "kind": "work",
      "objective": "Make workbook scripts execute in production through supported isolated runtime; preserve full run data and sheet.set/misc callbacks",
      "detail": "Owner asks end-to-end ship. Repair unsupported UNSAFE_EVAL Pages binding from WT-0210. Reuse existing CodeMode Worker via service RPC, preserve visible runtime failures and exact full script inputs/outputs, test live sheet read-transform-write, syntax failure and rerun. This repair does not close all WT-0210 trigger/lead-scraper requirements.",
      "state": "open",
      "priority": 1,
      "revision": 3,
      "depends_on": [],
      "permitted_capabilities": [
        "code",
        "deploy",
        "sheets",
        "work_api"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "field": "live_proof"
        }
      ],
      "required_evidence": [
        "commit",
        "live_proof"
      ],
      "parent_task": "WT-0210",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-11T22:59:20-07:00",
      "updated_at": "2026-09-12T00:28:36-07:00",
      "audit": "/api/work/task/WT-0220/audit",
      "submit_to": "/api/work/task/WT-0220/submit"
    },
    {
      "task_id": "WT-0221",
      "kind": "work",
      "objective": "CONSOLE E1 (Claude): Console rows API + migrations 0412-0415",
      "detail": "Assigned: Claude. Spec: ~/Downloads/CONSOLE-UNIFIED-SPEC.md §8 E1.\n\nConsole rows API + migrations 0412-0415: /api/console/rows serves a row card (WHAT/WHEN/ARGS/EX/TESTS parsed), the six invocation grammars, Run (writes last_status/last_response/tested_at + ledger row), Verdict (row_verdicts + directory.test_state via canonical path; Broken opens a work task with args+response attached), Comment (LEDGER_COMMENT)\n\nEvidence: the commit hash, a verification a person can repeat on the phone (URL + what to tap + what appears), and the critic turn id from E13. UI for a new tab lands in its own file public/console/<tab>.js; public/console.html is edited only under a coding-law lease.",
      "state": "superseded",
      "priority": 1,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "CODE_LEASE_START",
        "D1_QUERY",
        "LEDGER_COMMENT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T14:12:43-07:00",
      "updated_at": "2026-09-12T14:30:14-07:00",
      "audit": "/api/work/task/WT-0221/audit",
      "submit_to": "/api/work/task/WT-0221/submit"
    },
    {
      "task_id": "WT-0222",
      "kind": "work",
      "objective": "CONSOLE E2 (Grok): Directory tab in the Console UI",
      "detail": "Assigned: Grok. Spec: ~/Downloads/CONSOLE-UNIFIED-SPEC.md §8 E2.\n\nDirectory tab in the Console UI: list with category/state/type chips and search over 1,438 rows; row card; grammars panel with Copy; Run form from input_schema; Works/Broken/Untested verdict; make-green queue sorted by invocation frequency; header subtitle = count of untested+broken\n\nEvidence: the commit hash, a verification a person can repeat on the phone (URL + what to tap + what appears), and the critic turn id from E13. UI for a new tab lands in its own file public/console/<tab>.js; public/console.html is edited only under a coding-law lease.",
      "state": "superseded",
      "priority": 1,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "CODE_LEASE_START"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T14:12:43-07:00",
      "updated_at": "2026-09-12T17:13:09-07:00",
      "audit": "/api/work/task/WT-0222/audit",
      "submit_to": "/api/work/task/WT-0222/submit"
    },
    {
      "task_id": "WT-0233",
      "kind": "work",
      "objective": "CONSOLE E13 (Grok): Critic loop",
      "detail": "Assigned: Grok. Spec: ~/Downloads/CONSOLE-UNIFIED-SPEC.md §8 E13.\n\nCritic loop: every epic's submitted evidence is reviewed by a second agent through TEAM_RUN (proposer = the epic's agent, critic = Grok) before acceptance; the critic turn is attached as evidence; disagreements are threads on the task\n\nEvidence: the commit hash, a verification a person can repeat on the phone (URL + what to tap + what appears), and the critic turn id from E13. UI for a new tab lands in its own file public/console/<tab>.js; public/console.html is edited only under a coding-law lease.",
      "state": "superseded",
      "priority": 1,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "TEAM_RUN",
        "WORK_APPEND"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T14:12:50-07:00",
      "updated_at": "2026-09-12T17:14:06-07:00",
      "audit": "/api/work/task/WT-0233/audit",
      "submit_to": "/api/work/task/WT-0233/submit"
    },
    {
      "task_id": "WT-0234",
      "kind": "work",
      "objective": "CONSOLE LANE A (Claude): the server of record — tenancy contract, /api/console/agents, /api/console/now, rows glue over POST /api/directory/<key>/test, scoped token on a chat",
      "detail": "Spec: ~/Downloads/CONSOLE-UNIFIED-SPEC-v3.md §3 Lane A. Owns functions/api/console/*.js, migrations/, functions/_lib/console_*.js and public/console.html (shell, lease only). Sequence A-1 tenancy contract → A-2 agents → A-3 now + rows glue → A-4 token on chat → A-5 talk/v2 upkeep. Start from a clean worktree off origin/main.",
      "state": "completed",
      "priority": 1,
      "revision": 15,
      "depends_on": [],
      "permitted_capabilities": [
        "CODE_LEASE_START",
        "D1_QUERY",
        "AGENT_TURNS",
        "AGENT_BRIDGE",
        "TEAM_RUN",
        "CAP_MINT",
        "CAP_CONTEXT_BIND"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 1,
      "last_result": {
        "accepted": true,
        "tests_declared": 3,
        "tests_passed": 3,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          },
          {
            "id": "critic",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "critic_turn"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-12T18:12:34-07:00",
      "created_at": "2026-09-12T14:30:10-07:00",
      "updated_at": "2026-09-12T18:12:34-07:00",
      "audit": "/api/work/task/WT-0234/audit",
      "submit_to": "/api/work/task/WT-0234/submit"
    },
    {
      "task_id": "WT-0235",
      "kind": "work",
      "objective": "CONSOLE LANE B (Grok): the web UI and the critic — Directory inspector first, then Agents, Tasks, Now, Site UIs; TEAM_RUN critic turn on every lane's evidence",
      "detail": "Spec: ~/Downloads/CONSOLE-UNIFIED-SPEC-v3.md §3 Lane B. Owns public/console/directory.js, agents.js, tasks.js, now.js, site.js. Directory: category tree, state chips (475/934/29), row card, supported grammars with Copy, Run via POST /api/directory/<key>/test, Broken → task, comment, make-green queue starting with the 191 uncategorised rows. Never edits public/console.html.",
      "state": "completed",
      "priority": 1,
      "revision": 13,
      "depends_on": [],
      "permitted_capabilities": [
        "CODE_LEASE_START",
        "DIR_GET",
        "TEAM_RUN",
        "LEDGER_COMMENT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 3,
        "tests_passed": 3,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          },
          {
            "id": "critic",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "critic_turn"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-12T17:18:46-07:00",
      "created_at": "2026-09-12T14:30:11-07:00",
      "updated_at": "2026-09-12T17:18:46-07:00",
      "audit": "/api/work/task/WT-0235/audit",
      "submit_to": "/api/work/task/WT-0235/submit"
    },
    {
      "task_id": "WT-0236",
      "kind": "work",
      "objective": "CONSOLE LANE C (Kimi): outreach, messages, data — land lead command center v1 (renumber 0411→0416, push, ship), Outreach destination over /api/leads/*, Messages over inbound_events + channel readers, Data over sheets/cells",
      "detail": "Spec: ~/Downloads/CONSOLE-UNIFIED-SPEC-v3.md §3 Lane C. v1 code is commit 00cdcb5 on the LOCAL main of ~/miscsubjects-pages, not pushed; its migration collides with shipped 0411_console_images.sql. Owns functions/api/leads/*, functions/_lib/lead_types.js, channel_adapters.js, approval_queue.js, capability_tokens.js, public/console/outreach.js, messages.js, data.js. One approval object (draft hash) shared with LEADS_SEND; suppression at send; one thread per person only with two verified identifiers, else a merge card.",
      "state": "completed",
      "priority": 1,
      "revision": 15,
      "depends_on": [],
      "permitted_capabilities": [
        "CODE_LEASE_START",
        "LEADS_DISCOVER",
        "LEADS_DRAFT_AI",
        "LEADS_SEND",
        "SEND_BY_CHANNEL",
        "MSG_SEND",
        "SHEETS",
        "SHEET_SCRIPT_RUN"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 1,
      "last_result": {
        "accepted": true,
        "tests_declared": 3,
        "tests_passed": 3,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          },
          {
            "id": "critic",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "critic_turn"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-12T17:56:43-07:00",
      "created_at": "2026-09-12T14:30:12-07:00",
      "updated_at": "2026-09-12T17:56:43-07:00",
      "audit": "/api/work/task/WT-0236/audit",
      "submit_to": "/api/work/task/WT-0236/submit"
    },
    {
      "task_id": "WT-0237",
      "kind": "work",
      "objective": "CONSOLE LANE D (Codex): the shell, the bridge, the sessions — PR 0 hosts miscsubjects.com/console in ios/Console with Access cookie and APNs approval push on a physical iPhone; session resume 7th arg; Mac bridge installer; share-sheet/Shortcuts intake; tenancy rollout + TestFlight",
      "detail": "Spec: ~/Downloads/CONSOLE-UNIFIED-SPEC-v3.md §3 Lane D. Owns ios/Console/*, bridge/*, functions/api/phone/feed.js, register.js, iOS build scripts. PR 0 is the gate for every other lane's phone acceptance. Delete the invented AGENT_MODELS list in Agents.swift in favour of each CLI's config.",
      "state": "completed",
      "priority": 1,
      "revision": 7,
      "depends_on": [],
      "permitted_capabilities": [
        "LOCAL_EXEC",
        "CODE_LEASE_START",
        "AGENT_SPAWN_CLI"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 3,
        "tests_passed": 3,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          },
          {
            "id": "critic",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "critic_turn"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-12T16:31:22-07:00",
      "created_at": "2026-09-12T14:30:12-07:00",
      "updated_at": "2026-09-12T16:31:22-07:00",
      "audit": "/api/work/task/WT-0237/audit",
      "submit_to": "/api/work/task/WT-0237/submit"
    },
    {
      "task_id": "WT-0238",
      "kind": "work",
      "objective": "CONSOLE E1 (Claude, corrected): rows glue — /api/console/rows over browse directory_row + the existing POST /api/directory/<key>/test + LEDGER_COMMENT + task creation on Broken; no new tables",
      "detail": "Replaces WT-0221. Migrations 0412–0415 dropped: test_state/directory_tests, article body_hash, sheet_cell_versions and channel edit verbs already cover verdicts and history. Lane A.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "CODE_LEASE_START",
        "DIR_GET",
        "LEDGER_COMMENT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T14:30:13-07:00",
      "updated_at": "2026-09-12T14:30:13-07:00",
      "audit": "/api/work/task/WT-0238/audit",
      "submit_to": "/api/work/task/WT-0238/submit"
    },
    {
      "task_id": "WT-0240",
      "kind": "work",
      "objective": "CONSOLE LANE E (Kimi): Loop inside the Console, tenancy first — tenants/members/connections/flows (migration 0418), tenant-scoped orders/customers/metrics/leads routes with receipts, Ask with a tenant-bound read-only token, Loop leads synced into the lead_types pipeline, team members on limited scope, loop.js destination",
      "detail": "Spec: ~/Downloads/LOOP-TEAM-TENANCY-SPEC.md. Read Lane A migration 0417 (permission levels) before defining members. Owns functions/api/tenant/*, functions/_lib/tenant_*.js, migrations/0418_*, public/console/loop.js. Never prints or moves a credential; credential_ref only. Acceptance in spec §7.",
      "state": "completed",
      "priority": 1,
      "revision": 7,
      "depends_on": [],
      "permitted_capabilities": [
        "CODE_LEASE_START",
        "LOOP_DAY",
        "LOOP_CUSTOMER",
        "LOOP_TOP_CUSTOMERS",
        "CUSTOMER_FIND",
        "PROFILE_360",
        "STRIPE_CUSTOMERS_LIST",
        "KLAVIYO",
        "SHEETS",
        "CAP_MINT",
        "CAP_CONTEXT_BIND",
        "LEADS_DISCOVER"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 3,
        "tests_passed": 3,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          },
          {
            "id": "critic",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "critic_turn"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-12T17:14:37-07:00",
      "created_at": "2026-09-12T15:52:10-07:00",
      "updated_at": "2026-09-12T17:14:37-07:00",
      "audit": "/api/work/task/WT-0240/audit",
      "submit_to": "/api/work/task/WT-0240/submit"
    },
    {
      "task_id": "WT-0241",
      "kind": "work",
      "objective": "Physical-iPhone install of the Console shell is blocked: this Mac holds no code-signing credential of any kind",
      "detail": "FAILURE CLASS: missing credential, not missing code.\nLAYER: the Mac's developer identity. Not the app, not scripts/ios-build.sh.\nMISSING INVARIANT: the iOS app has only ever been built with CODE_SIGNING_ALLOWED=NO, so it was never proven installable on anything, and no gate said so. A target that cannot be installed should fail a check, not pass one.\n\nOBSERVED 2026-09-12. An iPhone 16 Pro Max (C12D8C70-525F-5699-92EA-59DE8590E320) is paired and available to devicectl, so the phone is not the problem. scripts/ios-build.sh device fails with 'No Accounts: Add a new account in Accounts settings' and 'No profiles for com.llmasos.console were found'. security find-identity -v -p codesigning reports 0 valid identities. ~/Library/MobileDevice/Provisioning Profiles is empty. ~/.miscsubjects/keys holds only AuthKey_BL72QSYNV2.p8, which is the APNs key: it can send a push and it cannot sign an app or fetch a profile.\n\nREPAIR, either one:\n(a) Sign an Apple ID on team CY4U4JBXM7 into Xcode, Settings then Accounts. scripts/ios-build.sh device then works unchanged.\n(b) Preferred, because an agent can use it unattended: create an App Store Connect API key with the Developer role, save it at ~/.miscsubjects/keys/AuthKey_<ID>.p8, put its key id and issuer id in ~/.build-vault.env, and add -authenticationKeyPath / -authenticationKeyID / -authenticationKeyIssuerID to the device and archive targets of scripts/ios-build.sh. Creating the key needs an account-holder sign-in at appstoreconnect.apple.com; that is the only step no agent can do.\n\nCONSEQUENCE WHILE IT STANDS: the shell is proven on the simulator only. APNs delivery to a handset cannot be proven by anyone, because no handset can run this build: GET /api/phone/register returns count 0, and the send surface POST /api/phone/register?push=1 correctly answers ok:false, 'no active device subscribes to topic approval'.\n\nREGRESSION TEST once repaired: scripts/ios-build.sh device installs and launches on the paired iPhone, then POST /api/phone/register?push=1 {topic:approval, approval_id:<id>} returns sent:1 and the banner opens that approval's card.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [],
      "required_evidence": [],
      "parent_task": "WT-0237",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T16:27:24-07:00",
      "updated_at": "2026-09-12T16:27:24-07:00",
      "audit": "/api/work/task/WT-0241/audit",
      "submit_to": "/api/work/task/WT-0241/submit"
    },
    {
      "task_id": "WT-0248",
      "kind": "work",
      "objective": "Authorization stops at the UI: enforce permission level inside the dispatcher, not just in the app — a team member can call /api/dispatch directly today and invoke STRIPE_WRITE, LEADS_SEND, D1_EXEC or mint a wider CAP_ token",
      "detail": "From Kimi's v3 review, folded in by the coordinating session. Permission levels (developer / team / viewer) exist today only as a Settings display under CONSOLE_SETTINGS_IDENTITY_LAW, and the tenant routes scope reads. Nothing stops a team member from skipping the app and calling /api/dispatch directly. Kimi's sentence is exact: the token system delegates authority OUTWARD to models, and nothing restricts humans INWARD. This lands on WT-0243 right now. Its acceptance says a team member's destinations are absent rather than CSS-hidden, which is necessary and not sufficient, because that is a statement about the app and the app is not the only door. SMALLEST CHANGE, one chokepoint rather than a sweep: a min_permission flag on directory rows, enforced inside the one dispatcher. UI hiding then becomes cosmetic, and the MCP, CLI and capability-token paths are covered by the same check. A refusal is a receipt. Related and in scope: hard-refuse owner-identity sends below developer. IMSG_SEND and EMAIL_SEND would otherwise let a team member send AS THE OWNER under his Apple ID and personal addresses, which is not what he asked for in the chiropractor-leads sentence and would violate OWNER_ANONYMITY. THE NEVER-LIST, adopt verbatim. A team member never SEES: the owner's personal messages, email, calendar, contacts, notes, location, photos or devices; other businesses' data (CLIENT_CAMPAIGN_CONFIDENTIALITY); raw ledger payloads and session transcripts; cost, billing or Stripe data; any credential material; the owner's identity. A team member never DOES: send as the owner; approve a payload or a send (the approval object is owner-only); mint, widen, revoke or evaluate capability tokens; edit directory rows, prompts, laws, watch rules, automations, suppressions or permission levels including their own scope; any Stripe write; delete anything; mark a task complete or touch acceptance; change the tenancy contract. Also from the same review: do the tenant NOT NULL columns and the default-deny predicate while there is still one tenant. Retrofitting onto 4.6M ledger events, 87k leads and 143k cli_messages after a second user lands is the expensive version of the same decision.",
      "state": "open",
      "priority": 1,
      "revision": 3,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "min_permission_enforced_in_dispatcher",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "team_identity_refused_at_dispatch",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "refusal_is_a_receipt",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "owner_identity_send_refused_below_developer",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "team_cannot_widen_own_scope",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T17:30:18-07:00",
      "updated_at": "2026-09-12T21:57:07-07:00",
      "audit": "/api/work/task/WT-0248/audit",
      "submit_to": "/api/work/task/WT-0248/submit"
    },
    {
      "task_id": "WT-0259",
      "kind": "work",
      "objective": "DECISION 6 (owner, final): adopt amendment A5.1 — a prefix selects a context bundle, not only a device",
      "detail": "Owner answered YES, 2026-09-12, on v5 section 5.\n\nA5.1 VERBATIM (from docs/superpowers/specs/2026-09-11-unified-grammar-v5.md section 5): 'A prefix selects a context bundle, not only a device. mac: and iphone: stay as built-in bundles that constrain only the device; a user-named bundle (work:) may bind account, tenant, device and model together, like a kubectl context.'\n\nWHY (verbatim): 'One token replaces most --account typing, and it is the same object the resolution ladder already consumes at step 5.'\n\nCOST IF ADOPTED (verbatim): 'A routes row gains optional account/tenant/model; parser unchanged; ladder step 3 intersects the bundle.'\n\nSTATUS OF THE OTHER TWO AMENDMENTS: A5.2 (verb-split public names) shipped under WT-0200. A5.3 (plan_ref) shipped under WT-0196. A5.1 was the only one still open; the amendment set is now closed.\n\nWHAT THIS OBLIGES: the routes object gains optional account, tenant and model columns; a named bundle is created and selected the way mac:/iphone: already are; the resolution ladder intersects the bundle at step 3 before session and workspace defaults at step 5; the parser does not change; built-in device prefixes keep their current meaning exactly.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "FILE_PUT",
        "D1_EXEC",
        "RESOLVE"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "spec",
          "field": "spec_path"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "resolve_receipt"
        }
      ],
      "required_evidence": [
        "spec_path",
        "resolve_receipt"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T19:36:08-07:00",
      "updated_at": "2026-09-12T19:36:08-07:00",
      "audit": "/api/work/task/WT-0259/audit",
      "submit_to": "/api/work/task/WT-0259/submit"
    },
    {
      "task_id": "WT-0263",
      "kind": "work",
      "objective": "Give the leads screen a way to filter by city",
      "detail": "",
      "state": "completed",
      "priority": 1,
      "revision": 4,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 1,
        "tests_passed": 1,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "done",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "done"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-16T22:13:50-07:00",
      "created_at": "2026-09-13T03:20:19.048Z",
      "updated_at": "2026-09-16T22:13:50-07:00",
      "audit": "/api/work/task/WT-0263/audit",
      "submit_to": "/api/work/task/WT-0263/submit"
    },
    {
      "task_id": "WT-0267",
      "kind": "work",
      "objective": "Show a person the second now-task on this list",
      "detail": "",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T03:42:34.609Z",
      "updated_at": "2026-09-13T03:42:34.609Z",
      "audit": "/api/work/task/WT-0267/audit",
      "submit_to": "/api/work/task/WT-0267/submit"
    },
    {
      "task_id": "WT-0280",
      "kind": "work",
      "objective": "Per-person access becomes rows an owner can change without a deploy, and a Permissions console shows and edits exactly what each member can reach",
      "detail": "shellForLevel() hardcodes panes, tabs and destinations per level in functions/_lib/console_scope.js. Giving a person different reach than the three built-in levels requires editing code and shipping, which violates the cells law: every value is a cell. There is also no surface that answers 'what can this person see' without reading source. Deliver: permission_capabilities (catalogue of reachable things), permission_grants (level -> capability), permission_overrides (one person's exception), consoleScope reading those rows instead of the constants, and a Permissions screen listing every member with effective reach and per-capability toggles.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_EXEC",
        "D1_QUERY",
        "CLI_GIT",
        "BASH"
      ],
      "acceptance_tests": [
        {
          "id": "capability_rows_exist",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM permission_capabilities",
          "min": 8
        },
        {
          "id": "grant_rows_exist",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM permission_grants",
          "min": 3
        },
        {
          "id": "every_level_has_grants",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(DISTINCT level) AS n FROM permission_grants",
          "min": 3
        },
        {
          "id": "override_table_shaped",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM pragma_table_info('permission_overrides')",
          "min": 4
        }
      ],
      "required_evidence": [
        "console_url",
        "capability_count",
        "grant_count",
        "owner_shell_unchanged_proof",
        "team_shell_proof"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 4,
        "tests_passed": 4,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "capability_rows_exist",
            "ok": true,
            "detail": "count=23 (need 8)"
          },
          {
            "id": "grant_rows_exist",
            "ok": true,
            "detail": "count=34 (need 3)"
          },
          {
            "id": "every_level_has_grants",
            "ok": true,
            "detail": "count=3 (need 3)"
          },
          {
            "id": "override_table_shaped",
            "ok": true,
            "detail": "count=6 (need 4)"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-12T21:35:52-07:00",
      "created_at": "2026-09-12T21:19:06-07:00",
      "updated_at": "2026-09-12T21:35:52-07:00",
      "audit": "/api/work/task/WT-0280/audit",
      "submit_to": "/api/work/task/WT-0280/submit"
    },
    {
      "task_id": "WT-0281",
      "kind": "work",
      "objective": "Prove what a secondary user's desktop console actually shows, from the owner's side, without their password",
      "detail": "Ben Brock is admitted as team on tenant ben, but nothing proves what his desktop session renders. Reading console_members says what was intended; it does not say what the app draws. Deliver a verify-as route that computes a named email's effective scope from the permission rows and then probes the real console endpoints under a scoped impersonation the routes honour, returning per-surface allowed/absent with the live status each one answered, plus a Verify screen in the console that runs it and shows pass or fail per surface. Impersonation is read-only, owner-authed, never grants reach the target lacks, and every run appends a receipt.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_EXEC",
        "D1_QUERY",
        "CLI_GIT",
        "BASH"
      ],
      "acceptance_tests": [
        {
          "id": "verify_runs_recorded",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM permission_verifications",
          "min": 1
        },
        {
          "id": "verify_covers_surfaces",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM pragma_table_info('permission_verifications')",
          "min": 5
        },
        {
          "id": "ben_verified",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM permission_verifications WHERE subject_email = 'benbrock88@gmail.com'",
          "min": 1
        },
        {
          "id": "denials_recorded",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM permission_verifications WHERE denied_count >= 1",
          "min": 1
        }
      ],
      "required_evidence": [
        "verify_url",
        "subject_email",
        "allowed_surfaces",
        "denied_surfaces",
        "owner_chats_invisible_proof"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 4,
        "tests_passed": 4,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "verify_runs_recorded",
            "ok": true,
            "detail": "count=9 (need 1)"
          },
          {
            "id": "verify_covers_surfaces",
            "ok": true,
            "detail": "count=9 (need 5)"
          },
          {
            "id": "ben_verified",
            "ok": true,
            "detail": "count=4 (need 1)"
          },
          {
            "id": "denials_recorded",
            "ok": true,
            "detail": "count=5 (need 1)"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-12T21:45:19-07:00",
      "created_at": "2026-09-12T21:19:20-07:00",
      "updated_at": "2026-09-12T21:45:19-07:00",
      "audit": "/api/work/task/WT-0281/audit",
      "submit_to": "/api/work/task/WT-0281/submit"
    },
    {
      "task_id": "WT-0298",
      "kind": "work",
      "objective": "Console end-to-end audit: restore shipped Tasks and repair destination integration failures without overwriting existing screens",
      "detail": "Owner requested full iOS inventory and shipment of the most important repairs. Live owner-authenticated audit reproduces Now fmtUsd crash, Flows chipsRow crash, Tasks menu serving obsolete shell instead of shipped tasks.js. Verify all destinations, record remaining work, cover navigation races and existing owner decisions. Work from current origin/main; preserve existing modules and runtime changes.",
      "state": "in_progress",
      "priority": 1,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "LOCAL_EXEC",
        "OBJECT_READ",
        "OBJECT_MUTATE",
        "CODE_LEASE_START"
      ],
      "acceptance_tests": [
        {
          "id": "live-shell",
          "type": "contains",
          "url": "https://miscsubjects.com/console.html",
          "needle": "console-destination-contract-v1"
        },
        {
          "id": "browser",
          "type": "evidence_present",
          "field": "browser_verification"
        },
        {
          "id": "inventory",
          "type": "evidence_present",
          "field": "inventory"
        }
      ],
      "required_evidence": [
        "commit",
        "browser_verification",
        "inventory"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T06:17:21-07:00",
      "updated_at": "2026-09-13T13:30:10.283Z",
      "audit": "/api/work/task/WT-0298/audit",
      "submit_to": "/api/work/task/WT-0298/submit"
    },
    {
      "task_id": "WT-0305",
      "kind": "work",
      "objective": "Move ledger event bodies to R2 at write time and safely archive existing inline event and raw bodies",
      "detail": "Owner handoff: R2 owns payloads; D1 retains searchable metadata and pointers. Preserve legacy reads and redaction. Verify R2 before clearing D1. Local regression evidence plus production verification before completion.",
      "state": "completed",
      "priority": 1,
      "revision": 4,
      "depends_on": [],
      "permitted_capabilities": [
        "LOCAL_EXEC",
        "OBJECT_READ",
        "OBJECT_MUTATE",
        "CODE_LEASE_START"
      ],
      "acceptance_tests": [
        {
          "id": "regression",
          "type": "evidence_present",
          "field": "regression"
        },
        {
          "id": "live",
          "type": "evidence_present",
          "field": "production_verification"
        }
      ],
      "required_evidence": [
        "regression",
        "production_verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "regression",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "regression"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "production_verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-14T12:52:05-07:00",
      "created_at": "2026-09-14T01:39:17-07:00",
      "updated_at": "2026-09-14T12:52:05-07:00",
      "audit": "/api/work/task/WT-0305/audit",
      "submit_to": "/api/work/task/WT-0305/submit"
    },
    {
      "task_id": "WT-0306",
      "kind": "work",
      "objective": "Repair Mac routing health checks to use device authentication and preserve typed refusals",
      "detail": "Live reproduction: terminal-only /health gives 401 device_token_required; device-token /health gives 200. Cloud fallback is working but routing incorrectly marks the Mac unavailable. Use shared bridge credential and host resolver.",
      "state": "completed",
      "priority": 1,
      "revision": 4,
      "depends_on": [],
      "permitted_capabilities": [
        "LOCAL_EXEC",
        "OBJECT_READ",
        "OBJECT_MUTATE",
        "CODE_LEASE_START"
      ],
      "acceptance_tests": [
        {
          "id": "regression",
          "type": "evidence_present",
          "field": "regression"
        },
        {
          "id": "live",
          "type": "evidence_present",
          "field": "production_verification"
        }
      ],
      "required_evidence": [
        "regression",
        "production_verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "regression",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "regression"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "production_verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-17T01:37:15-07:00",
      "created_at": "2026-09-14T01:42:43-07:00",
      "updated_at": "2026-09-17T01:37:15-07:00",
      "audit": "/api/work/task/WT-0306/audit",
      "submit_to": "/api/work/task/WT-0306/submit"
    },
    {
      "task_id": "WT-0311",
      "kind": "work",
      "objective": "W0.1a Pin the D1 wall date: second file_size reading 24h after the first",
      "detail": "Reading #1 recorded in scratchpad/wall-readings.md: loop-shared-events 9,332,584,448 B = 8,900.0 MiB at 2026-09-14T05:20:23Z (uuid 6fe246a1-5a37-4bfa-94ba-f953ee5bdf60, via CF REST d1 database list). Take reading #2 at ~2026-09-15T05:20Z, compute the slope from the two readings, convert 86.9%-of-10GiB into a pinned date. Current estimate at 60-80 MiB/day: 2026-10-01 to 10-06. Evidence: append both readings + computed date to scratchpad/wall-readings.md.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "pinned_date",
          "field": "pinned_date"
        }
      ],
      "required_evidence": [
        "pinned_date"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:44:49-07:00",
      "updated_at": "2026-09-14T02:44:49-07:00",
      "audit": "/api/work/task/WT-0311/audit",
      "submit_to": "/api/work/task/WT-0311/submit"
    },
    {
      "task_id": "WT-0312",
      "kind": "work",
      "objective": "W0.1c Event bodies to R2: default pointer write path + backfill (events first, invocations second)",
      "detail": "M-1 composition (2026-09-14, scratchpad/wall-readings.md) re-scopes this: inline event bodies are 3.37 GiB across 4,825,555 rows vs invocation_json 0.74 GiB across 417,938 rows — moving invocation bodies alone reclaims only ~8% of the file. 83,910 events rows already carry r2_request_key/r2_response_key, so the pointer path exists and is live. Make pointer-write the default, then backfill events bodies by descending size, then invocations.invocation_json. Full payloads to R2, D1 holds pointer + hash (hard rule 8).",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:44:49-07:00",
      "updated_at": "2026-09-14T02:44:49-07:00",
      "audit": "/api/work/task/WT-0312/audit",
      "submit_to": "/api/work/task/WT-0312/submit"
    },
    {
      "task_id": "WT-0314",
      "kind": "work",
      "objective": "W2.1 Deploy the dynamic-worker executor and wire the loader lane into dispatch",
      "detail": "Executor built and locally verified 2026-09-14 (commit 4cc6fb583, workers/dynamic-executor/): loader on DO keyed by task/tenant, ids = sha256(code+capName+capJSON), globalOutbound chokepoint with allowlist + ctx.props identity, tails to ledger, caps as {cpuMs, subRequests} at get() time (caps.js as data). Remaining: owner deploy, then verify production enforcement of limits (local workerd does NOT enforce limits — measured on workerd 2026-06-03 and 2026-09-11), binding on DO keyed by task/tenant, get(hash) only — unkeyed load = per-invocation billing (trap #3).",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "deployed",
          "field": "deployed"
        },
        {
          "type": "evidence_present",
          "id": "limits_verified",
          "field": "limits_verified"
        }
      ],
      "required_evidence": [
        "deployed",
        "limits_verified"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:44:51-07:00",
      "updated_at": "2026-09-14T02:44:51-07:00",
      "audit": "/api/work/task/WT-0314/audit",
      "submit_to": "/api/work/task/WT-0314/submit"
    },
    {
      "task_id": "WT-0337",
      "kind": "work",
      "objective": "Verify Workers AI function calling in production after the next deploy",
      "detail": "Built and locally verified 2026-09-14 (commit c684e0d57): dispatch workers_ai lane runs a full tool loop (tools via payload or TOOLS: line in row input; executes against directory keys via the tag-protocol path; ledgered per step; cap 40); aiRunWithTools fn primitive in fn_runners.js. After owner deploys: (1) re-run the three local tests against production (tools-in-payload, no-tools regression, TOOLS: line); (2) register the WAI_RUN_WITH_TOOLS directory row (exact INSERT recorded in the 2026-09-14 agent report); (3) watch for llama-3.3-70b loop re-calling the same tool until the cap — a per-tool repeat limiter is the future knob.",
      "state": "completed",
      "priority": 1,
      "revision": 4,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "production_trace",
          "field": "production_trace"
        }
      ],
      "required_evidence": [
        "production_trace"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 1,
        "tests_passed": 1,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "production_trace",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "production_trace"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-14T04:07:28-07:00",
      "created_at": "2026-09-14T02:45:12-07:00",
      "updated_at": "2026-09-14T04:07:28-07:00",
      "audit": "/api/work/task/WT-0337/audit",
      "submit_to": "/api/work/task/WT-0337/submit"
    },
    {
      "task_id": "WT-0340",
      "kind": "work",
      "objective": "Make console pages and folders editable by models in one POST without rebuilding the app",
      "detail": "Owner request 2026-09-14. Implement a versioned composition document with recursive folders/pages, reusable text, collection and action blocks, source bindings, filters and sorting. Existing directory dispatch stays the execution plane. Preserve all existing destinations. Verify replacing the document changes rendered pages without asset changes, rejects stale writes and invalid definitions. Broader integrations and arbitrary visualization coverage remain explicit extension work, not claimed complete.",
      "state": "completed",
      "priority": 1,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "OBJECT_READ",
        "OBJECT_MUTATE",
        "OBJECT_CHANGESET",
        "LOCAL_EXEC",
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "DEPLOY_LEASE"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "field": "commit",
          "id": "commit"
        },
        {
          "type": "evidence_present",
          "field": "verification",
          "id": "live"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-14T22:25:47-07:00",
      "created_at": "2026-09-14T14:40:39-07:00",
      "updated_at": "2026-09-14T22:25:47-07:00",
      "audit": "/api/work/task/WT-0340/audit",
      "submit_to": "/api/work/task/WT-0340/submit"
    },
    {
      "task_id": "WT-0347",
      "kind": "work",
      "objective": "Every coding-agent session on this Mac appears in the Code tab, live and archived — Claude Code, Codex, Kimi, Gemini, Grok, Aider",
      "detail": "Measured 2026-09-15: agent_turns holds 281 claude turns in three days (the owner's live session among them, last 22:37Z) and cc_turns holds 3,764 rows, but cli_sessions — the table the Code tab archive reads (functions/api/console/agents.js) — last took a claude row on 2026-09-12, kimi 2026-09-11, codex 2026-09-12. Only grok still writes, which is why the tab shows Grok alone. scripts/cli-archive-import.mjs writes that table and no launchd job runs it. Repair: run the import continuously for every agent, and let a live session appear while it is still running, not only after it ends.",
      "state": "completed",
      "priority": 1,
      "revision": 4,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "sql_count_at_least",
          "id": "claude_session_today",
          "sql": "SELECT COUNT(*) n FROM cli_sessions WHERE agent='claude' AND COALESCE(ended_at, started_at) > datetime('now','-1 day')",
          "min": 1
        },
        {
          "type": "sql_count_at_least",
          "id": "three_agents_recent",
          "sql": "SELECT COUNT(DISTINCT agent) n FROM cli_sessions WHERE COALESCE(ended_at, started_at) > datetime('now','-2 day')",
          "min": 3
        },
        {
          "type": "evidence_present",
          "id": "verification",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 3,
        "tests_passed": 3,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "claude_session_today",
            "ok": true,
            "detail": "count=13 (need 1)"
          },
          {
            "id": "three_agents_recent",
            "ok": true,
            "detail": "count=4 (need 3)"
          },
          {
            "id": "verification",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-15T16:16:23-07:00",
      "created_at": "2026-09-15T16:06:05-07:00",
      "updated_at": "2026-09-15T16:16:23-07:00",
      "audit": "/api/work/task/WT-0347/audit",
      "submit_to": "/api/work/task/WT-0347/submit"
    },
    {
      "task_id": "WT-0348",
      "kind": "work",
      "objective": "One order inside every message: what the owner said, the model's answer, its reasoning with the whole of it one tap away, then the tools",
      "detail": "Owner order 2026-09-15. The reasoning block must open to the FULL text on tap, not a 600-character tail. Confirm on a real message in the app, in both Chat and Code.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "verification",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "screenshot",
          "field": "screenshot"
        }
      ],
      "required_evidence": [
        "verification",
        "screenshot"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-15T16:06:06-07:00",
      "updated_at": "2026-09-15T16:06:06-07:00",
      "audit": "/api/work/task/WT-0348/audit",
      "submit_to": "/api/work/task/WT-0348/submit"
    },
    {
      "task_id": "WT-0349",
      "kind": "work",
      "objective": "A tool call renders the way Claude Code renders one: the call, its exact arguments, its exact result, expandable, nothing summarised",
      "detail": "Owner order 2026-09-15, with Claude Code screenshots as the reference: a header line naming the tool and what it did (\"Ran 13 commands, used 3 tools\"), each call listed, and the verbatim payload underneath when opened. Today the console lists which tools ran but not their payloads properly.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "verification",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "screenshot",
          "field": "screenshot"
        }
      ],
      "required_evidence": [
        "verification",
        "screenshot"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-15T16:06:07-07:00",
      "updated_at": "2026-09-15T16:06:07-07:00",
      "audit": "/api/work/task/WT-0349/audit",
      "submit_to": "/api/work/task/WT-0349/submit"
    },
    {
      "task_id": "WT-0354",
      "kind": "work",
      "objective": "Cloudflare Gateway and OpenRouter models are selectable on the Code tab and can be given a task there",
      "detail": "Owner order 2026-09-15: the Code tab offers CLI harnesses only (Codex, Kimi, Gemini, Grok, Aider, Claude Code). A Cloudflare or OpenRouter model must be selectable in the same place and take a task, running on the Cloudflare container and Cloudflare Browser Rendering rather than the Mac.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "verification",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "screenshot",
          "field": "screenshot"
        }
      ],
      "required_evidence": [
        "verification",
        "screenshot"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-15T16:06:11-07:00",
      "updated_at": "2026-09-15T16:06:11-07:00",
      "audit": "/api/work/task/WT-0354/audit",
      "submit_to": "/api/work/task/WT-0354/submit"
    },
    {
      "task_id": "WT-0355",
      "kind": "work",
      "objective": "A task description standard a cheap model can execute without asking a question, and the intake that writes one",
      "detail": "Owner ask 2026-09-15: find an effective way to describe a task so an assigned model completes it efficiently. The form must carry the surface to change, the exact files or rows, the acceptance test the infrastructure will run, the capabilities permitted, and what done looks like. Write it as a law, apply it to the open rows, and make the intake produce it.",
      "state": "open",
      "priority": 1,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "verification",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "standard",
          "field": "standard"
        }
      ],
      "required_evidence": [
        "verification",
        "standard"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-15T16:06:11-07:00",
      "updated_at": "2026-09-15T16:06:11-07:00",
      "audit": "/api/work/task/WT-0355/audit",
      "submit_to": "/api/work/task/WT-0355/submit"
    },
    {
      "task_id": "WF-0005",
      "kind": "failure",
      "objective": "Repair the production migration selector so a newly added numbered migration is applied automatically and 9999_ref_images.sql cannot win solely because checkout mtimes tie",
      "detail": "Live release of 0354_canonical_token_manual.sql skipped 0354 and executed 9999_ref_images.sql because scripts/ship.mjs chooses one file by mtime then descending filename. In a fresh worktree all checkout mtimes tied. Implement deterministic pending-migration selection or an explicit applied-migration ledger, add the exact 0354-vs-9999 regression test, and prove a clean-worktree shipment selects the real new migration.",
      "state": "superseded",
      "priority": 2,
      "revision": 10,
      "depends_on": [
        "WT-0084"
      ],
      "permitted_capabilities": [
        "LOCAL_EXEC"
      ],
      "acceptance_tests": [
        {
          "type": "command",
          "command": "node scripts/check-migration-selection.mjs"
        }
      ],
      "required_evidence": [
        "selector_regression",
        "clean_worktree_proof",
        "deploy_gate"
      ],
      "parent_task": "WT-0084",
      "supersedes": null,
      "failure": null,
      "failure_count": 2,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-08T20:36:45-07:00",
      "updated_at": "2026-09-12T00:44:26-07:00",
      "audit": "/api/work/task/WF-0005/audit",
      "submit_to": "/api/work/task/WF-0005/submit"
    },
    {
      "task_id": "WF-0007",
      "kind": "failure",
      "objective": "The keyless proof link GET /api/dispatch?ping=1 that orient names as \"Prove acting works (open now)\" returns 401 token_corrupted with no token.",
      "detail": "Failure class: documented public affordance that fails closed. Layer: dispatch GET handler treats ping as a token operation. Missing invariant: every URL orient publishes as keyless must answer 200 keyless, checked by the conformance run. Repair: make ping keyless or remove it from orient; add a conformance clause that fetches every orient URL without a token. Runtime evidence: recorded 2026-09-08 in the canonical invocation manual, section 13.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "DEPLOY_LEASE"
      ],
      "acceptance_tests": [
        {
          "type": "http_ok",
          "url": "/api/dispatch?ping=1"
        }
      ],
      "required_evidence": [
        "conformance_clause_id"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 1,
        "tests_passed": 1,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "http_ok",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/dispatch?ping=1"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-12T01:06:36-07:00",
      "created_at": "2026-09-08T06:28:33-07:00",
      "updated_at": "2026-09-12T01:06:36-07:00",
      "audit": "/api/work/task/WF-0007/audit",
      "submit_to": "/api/work/task/WF-0007/submit"
    },
    {
      "task_id": "WF-0009",
      "kind": "failure",
      "objective": "CLI_SPAWN with agent kimi, mode readonly returned ok:false, spawn:null, empty stdout and stderr, status done, while CLI_CLAUDE_CODE ran and returned OK in the same minute.",
      "detail": "Failure class: capability reports done with no execution and no error text. Layer: CLI_SPAWN runner for kimi. Missing invariant: a spawn that did not start must return ERR: with the reason, never ok:false with status done. Repair: surface the launcher error; add a directory test that spawns kimi with a one-word prompt. Runtime evidence: trace t_cru7rh55, recorded in the canonical invocation manual section 6.3.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "CLI_SPAWN",
        "LOCAL_EXEC",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "field": "kimi_spawn_ok_trace"
        }
      ],
      "required_evidence": [
        "kimi_spawn_ok_trace"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-08T06:28:48-07:00",
      "updated_at": "2026-09-08T06:28:48-07:00",
      "audit": "/api/work/task/WF-0009/audit",
      "submit_to": "/api/work/task/WF-0009/submit"
    },
    {
      "task_id": "WF-0010",
      "kind": "failure",
      "objective": "WEB_COUNCIL (four browser-model turns) returned HTTP 524 from the edge after 100 seconds instead of the accepted-and-polled response the web-model design specifies.",
      "detail": "Failure class: long flow cut by the edge timeout. Layer: dispatch response path for flows that fan out to browser models. Missing invariant: any dispatch expected to exceed 90 seconds answers 202 with a running id and a poll URL. Repair: route WEB_COUNCIL through the accepted-and-polled path; add a test. Runtime evidence: canonical invocation manual section 13, 2026-09-08.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "WEB_COUNCIL",
        "D1_QUERY",
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "DEPLOY_LEASE"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "field": "web_council_receipt"
        }
      ],
      "required_evidence": [
        "web_council_receipt"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-08T06:28:49-07:00",
      "updated_at": "2026-09-08T06:28:49-07:00",
      "audit": "/api/work/task/WF-0010/audit",
      "submit_to": "/api/work/task/WF-0010/submit"
    },
    {
      "task_id": "WF-0014",
      "kind": "failure",
      "objective": "FAILURE: misc_code destroy guard missed a prefix-glued verb — DELTASK executed (no rows affected) during live verification 2026-09-11",
      "detail": "failure_class: guard_bypass (effect classification by key regex).\nlayer_that_permitted_it: workers/mcp-server/src/index.ts effectsOf() — matched DEL only as a whole token, so DELTASK (and DELROW) classified as write and ran through /api/dispatch. Invocation inv_q6864k3u8f, DELTASK WT-9999 → changes:0 (target did not exist). No data lost.\nmissing_invariant: effects must be a declared property of the row (directory.effects, migration 0396), read by every executor, never derived from key spelling. 0396 is on main and not applied in production, so the Worker had no column to read.\nrepair_done_in_turn: effectsOf() widened (explicit DELTASK/DELROW, ^DEL(?!IVER), _DEL(?!IVER|TA)) and redeployed; table-tested against 17 live keys.\nrepair_still_owed: apply 0396 in production and populate directory.effects for every row (owner implementation step 2); then misc_code reads the column and the regex becomes the fallback only. Regression test: the 17-key table in this turn becomes a node:test in workers/mcp-server.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "effects_column_live",
          "field": "effects_column_check"
        },
        {
          "type": "evidence_present",
          "id": "regression_test",
          "field": "test_path"
        }
      ],
      "required_evidence": [
        "effects_column_check",
        "test_path"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "effects_column_live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "effects_column_check"
          },
          {
            "id": "regression_test",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "test_path"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T16:04:37-07:00",
      "created_at": "2026-09-11T14:15:14-07:00",
      "updated_at": "2026-09-11T16:04:37-07:00",
      "audit": "/api/work/task/WF-0014/audit",
      "submit_to": "/api/work/task/WF-0014/submit"
    },
    {
      "task_id": "WF-0015",
      "kind": "failure",
      "objective": "MIGRATION SELECTOR (supersedes WF-0005, whose only acceptance test was a local shell command the infrastructure cannot execute): a newly added numbered migration is always the one applied, a reseed sentinel can never win, and two files sharing the top number fail the deploy.",
      "detail": "Repaired across ad78e4e09 (ship.mjs calls selectMigrationsToApply) and 8939a3fa7 (MIGRATION_NUMBER_COLLISION + the gate scans the real migrations/ listing). Evidence: the gate output and the ship logs.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "gate",
          "field": "selector_regression"
        },
        {
          "type": "evidence_present",
          "id": "ships",
          "field": "clean_worktree_proof"
        }
      ],
      "required_evidence": [
        "selector_regression",
        "clean_worktree_proof"
      ],
      "parent_task": null,
      "supersedes": "WF-0005",
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "gate",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "selector_regression"
          },
          {
            "id": "ships",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "clean_worktree_proof"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-12T00:44:32-07:00",
      "created_at": "2026-09-12T00:44:24-07:00",
      "updated_at": "2026-09-12T00:44:32-07:00",
      "audit": "/api/work/task/WF-0015/audit",
      "submit_to": "/api/work/task/WF-0015/submit"
    },
    {
      "task_id": "WF-0016",
      "kind": "failure",
      "objective": "LAWS_ADD (and every fn row that interpolates arguments into SQL) breaks on an apostrophe: five CONSOLE_ laws were refused with SQLITE_ERROR near a quote on 2026-09-12",
      "detail": "Failure class: unescaped input in a generated SQL statement. Layer that permitted it: the fn runner for LAWS_ADD builds the INSERT by string interpolation instead of bound parameters. Missing invariant: every D1 write from a directory row uses prepared statements with bound parameters. Repair: bind parameters in LAWS_ADD/LAWS_EDIT and audit the fn runners for other interpolated writes (grep for template strings feeding D1_EXEC). Regression test: add a law whose rule text contains an apostrophe and a semicolon; it must land verbatim. Deploy blocker: the check fails if any fn runner interpolates user text into SQL.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "CODE_LEASE_START",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-12T17:23:58-07:00",
      "created_at": "2026-09-12T14:58:07-07:00",
      "updated_at": "2026-09-12T17:23:58-07:00",
      "audit": "/api/work/task/WF-0016/audit",
      "submit_to": "/api/work/task/WF-0016/submit"
    },
    {
      "task_id": "WT-0039",
      "kind": "work",
      "objective": "Close the direct-SQL bypass: route work_tasks and article mutations through the guarded path or a separately authorized repair capability",
      "detail": "D1_EXEC can write to work_tasks and articles without acceptance tests or an audit row. Either remove general write access from that lane or split it into a repair capability that runs the same invariants and appends a work_actions row. Until then the bypass is listed in the canonical object.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "functions/api/dispatch.js",
        "functions/_lib/work_object.js",
        "migrations/"
      ],
      "acceptance_tests": [
        {
          "id": "bypass_documented",
          "type": "contains",
          "url": "/api/work",
          "needle": "unresolved_bypasses"
        },
        {
          "id": "guard_present",
          "type": "contains",
          "url": "/api/work/bootstrap",
          "needle": "unresolved_bypasses"
        }
      ],
      "required_evidence": [
        "mechanism_changed",
        "regression_test",
        "deploy_blocker",
        "runtime_evidence"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "bypass_documented",
            "ok": true,
            "detail": "contains \"unresolved_bypasses\" in https://miscsubjects.com/api/work (scope=content) → true"
          },
          {
            "id": "guard_present",
            "ok": true,
            "detail": "contains \"unresolved_bypasses\" in https://miscsubjects.com/api/work/bootstrap (scope=content) → true"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-05T00:22:56-07:00",
      "created_at": "2026-08-04T16:28:09-07:00",
      "updated_at": "2026-08-05T00:22:56-07:00",
      "audit": "/api/work/task/WT-0039/audit",
      "submit_to": "/api/work/task/WT-0039/submit"
    },
    {
      "task_id": "WT-0041",
      "kind": "work",
      "objective": "Write /a/sciatica — Sciatica as its own object: what it is, how it is diagnosed, what the evidence says about every treatment, no compound in the headline",
      "detail": "The condition is its own article. It describes Sciatica: the anatomy, the mechanism, how it is diagnosed, the natural history, and what the evidence says about conservative care, injection, surgery and anything else that has been tried — organised on what is known, strongest first. It does NOT argue for a peptide. A compound only enters this page as one row among treatments. Cross-object writing belongs on /a/<compound>-sciatica, the combination page whose slug names both objects. Every source card carries the source's own verbatim quote (SOURCE_QUOTE_LAW) — the write path refuses a quote-less source.",
      "state": "completed",
      "priority": 2,
      "revision": 9,
      "depends_on": [],
      "permitted_capabilities": [
        "PUT /api/articles/sciatica",
        "POST /api/protocol/sources",
        "ARTICLE_PUT",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "sciatica"
        },
        {
          "id": "depth",
          "type": "article_min_words",
          "slug": "sciatica",
          "min": 1200
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "sciatica",
          "min": 6
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "sciatica"
        },
        {
          "id": "renders",
          "type": "http_ok",
          "url": "/a/sciatica"
        },
        {
          "id": "own_subject",
          "type": "not_contains",
          "url": "/a/sciatica",
          "needle": "rp-fallback-mark"
        }
      ],
      "required_evidence": [
        "url",
        "words",
        "sources_with_quotes",
        "rendered_check"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 1,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "results": [
          {
            "id": "exists",
            "ok": true,
            "detail": "article sciatica exists"
          },
          {
            "id": "depth",
            "ok": true,
            "detail": "2153 words (need 1200)"
          },
          {
            "id": "sources",
            "ok": true,
            "detail": "12 sources (need 6)"
          },
          {
            "id": "published",
            "ok": true,
            "detail": "status=published"
          },
          {
            "id": "renders",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/a/sciatica"
          },
          {
            "id": "own_subject",
            "ok": true,
            "detail": "not_contains \"rp-fallback-mark\" in https://miscsubjects.com/a/sciatica (scope=content) → false"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-04T18:12:57-07:00",
      "created_at": "2026-08-04T17:46:19-07:00",
      "updated_at": "2026-08-04T18:12:57-07:00",
      "audit": "/api/work/task/WT-0041/audit",
      "submit_to": "/api/work/task/WT-0041/submit"
    },
    {
      "task_id": "WT-0042",
      "kind": "work",
      "objective": "Write /a/frozen-shoulder — Frozen shoulder (adhesive capsulitis) as its own object: what it is, how it is diagnosed, what the evidence says about every treatment, no compound in the headline",
      "detail": "The condition is its own article. It describes Frozen shoulder (adhesive capsulitis): the anatomy, the mechanism, how it is diagnosed, the natural history, and what the evidence says about conservative care, injection, surgery and anything else that has been tried — organised on what is known, strongest first. It does NOT argue for a peptide. A compound only enters this page as one row among treatments. Cross-object writing belongs on /a/<compound>-frozen-shoulder, the combination page whose slug names both objects. Every source card carries the source's own verbatim quote (SOURCE_QUOTE_LAW) — the write path refuses a quote-less source.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "PUT /api/articles/frozen-shoulder",
        "POST /api/protocol/sources",
        "ARTICLE_PUT",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "frozen-shoulder"
        },
        {
          "id": "depth",
          "type": "article_min_words",
          "slug": "frozen-shoulder",
          "min": 1200
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "frozen-shoulder",
          "min": 6
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "frozen-shoulder"
        },
        {
          "id": "renders",
          "type": "http_ok",
          "url": "/a/frozen-shoulder"
        },
        {
          "id": "own_subject",
          "type": "not_contains",
          "url": "/a/frozen-shoulder",
          "needle": "rp-fallback-mark"
        }
      ],
      "required_evidence": [
        "url",
        "words",
        "sources_with_quotes",
        "rendered_check"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "results": [
          {
            "id": "exists",
            "ok": true,
            "detail": "article frozen-shoulder exists"
          },
          {
            "id": "depth",
            "ok": true,
            "detail": "1538 words (need 1200)"
          },
          {
            "id": "sources",
            "ok": true,
            "detail": "7 sources (need 6)"
          },
          {
            "id": "published",
            "ok": true,
            "detail": "status=published"
          },
          {
            "id": "renders",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/a/frozen-shoulder"
          },
          {
            "id": "own_subject",
            "ok": true,
            "detail": "not_contains \"rp-fallback-mark\" in https://miscsubjects.com/a/frozen-shoulder (scope=content) → false"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-04T18:27:07-07:00",
      "created_at": "2026-08-04T17:46:20-07:00",
      "updated_at": "2026-08-04T18:27:07-07:00",
      "audit": "/api/work/task/WT-0042/audit",
      "submit_to": "/api/work/task/WT-0042/submit"
    },
    {
      "task_id": "WT-0043",
      "kind": "work",
      "objective": "Write /a/carpal-tunnel-syndrome — Carpal tunnel syndrome as its own object: what it is, how it is diagnosed, what the evidence says about every treatment, no compound in the headline",
      "detail": "The condition is its own article. It describes Carpal tunnel syndrome: the anatomy, the mechanism, how it is diagnosed, the natural history, and what the evidence says about conservative care, injection, surgery and anything else that has been tried — organised on what is known, strongest first. It does NOT argue for a peptide. A compound only enters this page as one row among treatments. Cross-object writing belongs on /a/<compound>-carpal-tunnel-syndrome, the combination page whose slug names both objects. Every source card carries the source's own verbatim quote (SOURCE_QUOTE_LAW) — the write path refuses a quote-less source.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "PUT /api/articles/carpal-tunnel-syndrome",
        "POST /api/protocol/sources",
        "ARTICLE_PUT",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "carpal-tunnel-syndrome"
        },
        {
          "id": "depth",
          "type": "article_min_words",
          "slug": "carpal-tunnel-syndrome",
          "min": 1200
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "carpal-tunnel-syndrome",
          "min": 6
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "carpal-tunnel-syndrome"
        },
        {
          "id": "renders",
          "type": "http_ok",
          "url": "/a/carpal-tunnel-syndrome"
        },
        {
          "id": "own_subject",
          "type": "not_contains",
          "url": "/a/carpal-tunnel-syndrome",
          "needle": "rp-fallback-mark"
        }
      ],
      "required_evidence": [
        "url",
        "words",
        "sources_with_quotes",
        "rendered_check"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "results": [
          {
            "id": "exists",
            "ok": true,
            "detail": "article carpal-tunnel-syndrome exists"
          },
          {
            "id": "depth",
            "ok": true,
            "detail": "1254 words (need 1200)"
          },
          {
            "id": "sources",
            "ok": true,
            "detail": "7 sources (need 6)"
          },
          {
            "id": "published",
            "ok": true,
            "detail": "status=published"
          },
          {
            "id": "renders",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/a/carpal-tunnel-syndrome"
          },
          {
            "id": "own_subject",
            "ok": true,
            "detail": "not_contains \"rp-fallback-mark\" in https://miscsubjects.com/a/carpal-tunnel-syndrome (scope=content) → false"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-04T18:31:02-07:00",
      "created_at": "2026-08-04T17:46:20-07:00",
      "updated_at": "2026-08-04T18:31:02-07:00",
      "audit": "/api/work/task/WT-0043/audit",
      "submit_to": "/api/work/task/WT-0043/submit"
    },
    {
      "task_id": "WT-0044",
      "kind": "work",
      "objective": "Write /a/tendinopathy — Tendinopathy as its own object: what it is, how it is diagnosed, what the evidence says about every treatment, no compound in the headline",
      "detail": "The condition is its own article. It describes Tendinopathy: the anatomy, the mechanism, how it is diagnosed, the natural history, and what the evidence says about conservative care, injection, surgery and anything else that has been tried — organised on what is known, strongest first. It does NOT argue for a peptide. A compound only enters this page as one row among treatments. Cross-object writing belongs on /a/<compound>-tendinopathy, the combination page whose slug names both objects. Every source card carries the source's own verbatim quote (SOURCE_QUOTE_LAW) — the write path refuses a quote-less source.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "PUT /api/articles/tendinopathy",
        "POST /api/protocol/sources",
        "ARTICLE_PUT",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "tendinopathy"
        },
        {
          "id": "depth",
          "type": "article_min_words",
          "slug": "tendinopathy",
          "min": 1200
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "tendinopathy",
          "min": 6
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "tendinopathy"
        },
        {
          "id": "renders",
          "type": "http_ok",
          "url": "/a/tendinopathy"
        },
        {
          "id": "own_subject",
          "type": "not_contains",
          "url": "/a/tendinopathy",
          "needle": "rp-fallback-mark"
        }
      ],
      "required_evidence": [
        "url",
        "words",
        "sources_with_quotes",
        "rendered_check"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "results": [
          {
            "id": "exists",
            "ok": true,
            "detail": "article tendinopathy exists"
          },
          {
            "id": "depth",
            "ok": true,
            "detail": "1282 words (need 1200)"
          },
          {
            "id": "sources",
            "ok": true,
            "detail": "8 sources (need 6)"
          },
          {
            "id": "published",
            "ok": true,
            "detail": "status=published"
          },
          {
            "id": "renders",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/a/tendinopathy"
          },
          {
            "id": "own_subject",
            "ok": true,
            "detail": "not_contains \"rp-fallback-mark\" in https://miscsubjects.com/a/tendinopathy (scope=content) → false"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-04T18:28:43-07:00",
      "created_at": "2026-08-04T17:46:20-07:00",
      "updated_at": "2026-08-04T18:28:43-07:00",
      "audit": "/api/work/task/WT-0044/audit",
      "submit_to": "/api/work/task/WT-0044/submit"
    },
    {
      "task_id": "WT-0045",
      "kind": "work",
      "objective": "Write /a/peripheral-neuropathy — Peripheral neuropathy as its own object: what it is, how it is diagnosed, what the evidence says about every treatment, no compound in the headline",
      "detail": "The condition is its own article. It describes Peripheral neuropathy: the anatomy, the mechanism, how it is diagnosed, the natural history, and what the evidence says about conservative care, injection, surgery and anything else that has been tried — organised on what is known, strongest first. It does NOT argue for a peptide. A compound only enters this page as one row among treatments. Cross-object writing belongs on /a/<compound>-peripheral-neuropathy, the combination page whose slug names both objects. Every source card carries the source's own verbatim quote (SOURCE_QUOTE_LAW) — the write path refuses a quote-less source.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "PUT /api/articles/peripheral-neuropathy",
        "POST /api/protocol/sources",
        "ARTICLE_PUT",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "peripheral-neuropathy"
        },
        {
          "id": "depth",
          "type": "article_min_words",
          "slug": "peripheral-neuropathy",
          "min": 1200
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "peripheral-neuropathy",
          "min": 6
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "peripheral-neuropathy"
        },
        {
          "id": "renders",
          "type": "http_ok",
          "url": "/a/peripheral-neuropathy"
        },
        {
          "id": "own_subject",
          "type": "not_contains",
          "url": "/a/peripheral-neuropathy",
          "needle": "rp-fallback-mark"
        }
      ],
      "required_evidence": [
        "url",
        "words",
        "sources_with_quotes",
        "rendered_check"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "results": [
          {
            "id": "exists",
            "ok": true,
            "detail": "article peripheral-neuropathy exists"
          },
          {
            "id": "depth",
            "ok": true,
            "detail": "1223 words (need 1200)"
          },
          {
            "id": "sources",
            "ok": true,
            "detail": "7 sources (need 6)"
          },
          {
            "id": "published",
            "ok": true,
            "detail": "status=published"
          },
          {
            "id": "renders",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/a/peripheral-neuropathy"
          },
          {
            "id": "own_subject",
            "ok": true,
            "detail": "not_contains \"rp-fallback-mark\" in https://miscsubjects.com/a/peripheral-neuropathy (scope=content) → false"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-04T18:42:13-07:00",
      "created_at": "2026-08-04T17:46:21-07:00",
      "updated_at": "2026-08-04T18:42:13-07:00",
      "audit": "/api/work/task/WT-0045/audit",
      "submit_to": "/api/work/task/WT-0045/submit"
    },
    {
      "task_id": "WT-0046",
      "kind": "work",
      "objective": "Write /a/spinal-stenosis — Spinal stenosis as its own object: what it is, how it is diagnosed, what the evidence says about every treatment, no compound in the headline",
      "detail": "The condition is its own article. It describes Spinal stenosis: the anatomy, the mechanism, how it is diagnosed, the natural history, and what the evidence says about conservative care, injection, surgery and anything else that has been tried — organised on what is known, strongest first. It does NOT argue for a peptide. A compound only enters this page as one row among treatments. Cross-object writing belongs on /a/<compound>-spinal-stenosis, the combination page whose slug names both objects. Every source card carries the source's own verbatim quote (SOURCE_QUOTE_LAW) — the write path refuses a quote-less source.",
      "state": "completed",
      "priority": 2,
      "revision": 9,
      "depends_on": [],
      "permitted_capabilities": [
        "PUT /api/articles/spinal-stenosis",
        "POST /api/protocol/sources",
        "ARTICLE_PUT",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "spinal-stenosis"
        },
        {
          "id": "depth",
          "type": "article_min_words",
          "slug": "spinal-stenosis",
          "min": 1200
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "spinal-stenosis",
          "min": 6
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "spinal-stenosis"
        },
        {
          "id": "renders",
          "type": "http_ok",
          "url": "/a/spinal-stenosis"
        },
        {
          "id": "own_subject",
          "type": "not_contains",
          "url": "/a/spinal-stenosis",
          "needle": "rp-fallback-mark"
        }
      ],
      "required_evidence": [
        "url",
        "words",
        "sources_with_quotes",
        "rendered_check"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 1,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "results": [
          {
            "id": "exists",
            "ok": true,
            "detail": "article spinal-stenosis exists"
          },
          {
            "id": "depth",
            "ok": true,
            "detail": "1418 words (need 1200)"
          },
          {
            "id": "sources",
            "ok": true,
            "detail": "7 sources (need 6)"
          },
          {
            "id": "published",
            "ok": true,
            "detail": "status=published"
          },
          {
            "id": "renders",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/a/spinal-stenosis"
          },
          {
            "id": "own_subject",
            "ok": true,
            "detail": "not_contains \"rp-fallback-mark\" in https://miscsubjects.com/a/spinal-stenosis (scope=content) → false"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-04T18:40:50-07:00",
      "created_at": "2026-08-04T17:46:21-07:00",
      "updated_at": "2026-08-04T18:40:50-07:00",
      "audit": "/api/work/task/WT-0046/audit",
      "submit_to": "/api/work/task/WT-0046/submit"
    },
    {
      "task_id": "WT-0047",
      "kind": "work",
      "objective": "Write /a/facet-joint-syndrome — Facet joint syndrome as its own object: what it is, how it is diagnosed, what the evidence says about every treatment, no compound in the headline",
      "detail": "The condition is its own article. It describes Facet joint syndrome: the anatomy, the mechanism, how it is diagnosed, the natural history, and what the evidence says about conservative care, injection, surgery and anything else that has been tried — organised on what is known, strongest first. It does NOT argue for a peptide. A compound only enters this page as one row among treatments. Cross-object writing belongs on /a/<compound>-facet-joint-syndrome, the combination page whose slug names both objects. Every source card carries the source's own verbatim quote (SOURCE_QUOTE_LAW) — the write path refuses a quote-less source.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "PUT /api/articles/facet-joint-syndrome",
        "POST /api/protocol/sources",
        "ARTICLE_PUT",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "facet-joint-syndrome"
        },
        {
          "id": "depth",
          "type": "article_min_words",
          "slug": "facet-joint-syndrome",
          "min": 1200
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "facet-joint-syndrome",
          "min": 6
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "facet-joint-syndrome"
        },
        {
          "id": "renders",
          "type": "http_ok",
          "url": "/a/facet-joint-syndrome"
        },
        {
          "id": "own_subject",
          "type": "not_contains",
          "url": "/a/facet-joint-syndrome",
          "needle": "rp-fallback-mark"
        }
      ],
      "required_evidence": [
        "url",
        "words",
        "sources_with_quotes",
        "rendered_check"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "results": [
          {
            "id": "exists",
            "ok": true,
            "detail": "article facet-joint-syndrome exists"
          },
          {
            "id": "depth",
            "ok": true,
            "detail": "1301 words (need 1200)"
          },
          {
            "id": "sources",
            "ok": true,
            "detail": "6 sources (need 6)"
          },
          {
            "id": "published",
            "ok": true,
            "detail": "status=published"
          },
          {
            "id": "renders",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/a/facet-joint-syndrome"
          },
          {
            "id": "own_subject",
            "ok": true,
            "detail": "not_contains \"rp-fallback-mark\" in https://miscsubjects.com/a/facet-joint-syndrome (scope=content) → false"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-04T18:47:31-07:00",
      "created_at": "2026-08-04T17:46:21-07:00",
      "updated_at": "2026-08-04T18:47:31-07:00",
      "audit": "/api/work/task/WT-0047/audit",
      "submit_to": "/api/work/task/WT-0047/submit"
    },
    {
      "task_id": "WT-0048",
      "kind": "work",
      "objective": "Write /a/sacroiliac-joint-dysfunction — Sacroiliac joint dysfunction as its own object: what it is, how it is diagnosed, what the evidence says about every treatment, no compound in the headline",
      "detail": "The condition is its own article. It describes Sacroiliac joint dysfunction: the anatomy, the mechanism, how it is diagnosed, the natural history, and what the evidence says about conservative care, injection, surgery and anything else that has been tried — organised on what is known, strongest first. It does NOT argue for a peptide. A compound only enters this page as one row among treatments. Cross-object writing belongs on /a/<compound>-sacroiliac-joint-dysfunction, the combination page whose slug names both objects. Every source card carries the source's own verbatim quote (SOURCE_QUOTE_LAW) — the write path refuses a quote-less source.",
      "state": "completed",
      "priority": 2,
      "revision": 9,
      "depends_on": [],
      "permitted_capabilities": [
        "PUT /api/articles/sacroiliac-joint-dysfunction",
        "POST /api/protocol/sources",
        "ARTICLE_PUT",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "sacroiliac-joint-dysfunction"
        },
        {
          "id": "depth",
          "type": "article_min_words",
          "slug": "sacroiliac-joint-dysfunction",
          "min": 1200
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "sacroiliac-joint-dysfunction",
          "min": 6
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "sacroiliac-joint-dysfunction"
        },
        {
          "id": "renders",
          "type": "http_ok",
          "url": "/a/sacroiliac-joint-dysfunction"
        },
        {
          "id": "own_subject",
          "type": "not_contains",
          "url": "/a/sacroiliac-joint-dysfunction",
          "needle": "rp-fallback-mark"
        }
      ],
      "required_evidence": [
        "url",
        "words",
        "sources_with_quotes",
        "rendered_check"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 1,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "results": [
          {
            "id": "exists",
            "ok": true,
            "detail": "article sacroiliac-joint-dysfunction exists"
          },
          {
            "id": "depth",
            "ok": true,
            "detail": "1464 words (need 1200)"
          },
          {
            "id": "sources",
            "ok": true,
            "detail": "6 sources (need 6)"
          },
          {
            "id": "published",
            "ok": true,
            "detail": "status=published"
          },
          {
            "id": "renders",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/a/sacroiliac-joint-dysfunction"
          },
          {
            "id": "own_subject",
            "ok": true,
            "detail": "not_contains \"rp-fallback-mark\" in https://miscsubjects.com/a/sacroiliac-joint-dysfunction (scope=content) → false"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-04T18:49:36-07:00",
      "created_at": "2026-08-04T17:46:21-07:00",
      "updated_at": "2026-08-04T18:49:36-07:00",
      "audit": "/api/work/task/WT-0048/audit",
      "submit_to": "/api/work/task/WT-0048/submit"
    },
    {
      "task_id": "WT-0049",
      "kind": "work",
      "objective": "Write /a/plantar-fasciitis — Plantar fasciitis as its own object: what it is, how it is diagnosed, what the evidence says about every treatment, no compound in the headline",
      "detail": "The condition is its own article. It describes Plantar fasciitis: the anatomy, the mechanism, how it is diagnosed, the natural history, and what the evidence says about conservative care, injection, surgery and anything else that has been tried — organised on what is known, strongest first. It does NOT argue for a peptide. A compound only enters this page as one row among treatments. Cross-object writing belongs on /a/<compound>-plantar-fasciitis, the combination page whose slug names both objects. Every source card carries the source's own verbatim quote (SOURCE_QUOTE_LAW) — the write path refuses a quote-less source.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "PUT /api/articles/plantar-fasciitis",
        "POST /api/protocol/sources",
        "ARTICLE_PUT",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "plantar-fasciitis"
        },
        {
          "id": "depth",
          "type": "article_min_words",
          "slug": "plantar-fasciitis",
          "min": 1200
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "plantar-fasciitis",
          "min": 6
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "plantar-fasciitis"
        },
        {
          "id": "renders",
          "type": "http_ok",
          "url": "/a/plantar-fasciitis"
        },
        {
          "id": "own_subject",
          "type": "not_contains",
          "url": "/a/plantar-fasciitis",
          "needle": "rp-fallback-mark"
        }
      ],
      "required_evidence": [
        "url",
        "words",
        "sources_with_quotes",
        "rendered_check"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "results": [
          {
            "id": "exists",
            "ok": true,
            "detail": "article plantar-fasciitis exists"
          },
          {
            "id": "depth",
            "ok": true,
            "detail": "1258 words (need 1200)"
          },
          {
            "id": "sources",
            "ok": true,
            "detail": "6 sources (need 6)"
          },
          {
            "id": "published",
            "ok": true,
            "detail": "status=published"
          },
          {
            "id": "renders",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/a/plantar-fasciitis"
          },
          {
            "id": "own_subject",
            "ok": true,
            "detail": "not_contains \"rp-fallback-mark\" in https://miscsubjects.com/a/plantar-fasciitis (scope=content) → false"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-04T18:44:14-07:00",
      "created_at": "2026-08-04T17:46:21-07:00",
      "updated_at": "2026-08-04T18:44:14-07:00",
      "audit": "/api/work/task/WT-0049/audit",
      "submit_to": "/api/work/task/WT-0049/submit"
    },
    {
      "task_id": "WT-0050",
      "kind": "work",
      "objective": "Write /a/rotator-cuff-tear — Rotator cuff tear as its own object: what it is, how it is diagnosed, what the evidence says about every treatment, no compound in the headline",
      "detail": "The condition is its own article. It describes Rotator cuff tear: the anatomy, the mechanism, how it is diagnosed, the natural history, and what the evidence says about conservative care, injection, surgery and anything else that has been tried — organised on what is known, strongest first. It does NOT argue for a peptide. A compound only enters this page as one row among treatments. Cross-object writing belongs on /a/<compound>-rotator-cuff-tear, the combination page whose slug names both objects. Every source card carries the source's own verbatim quote (SOURCE_QUOTE_LAW) — the write path refuses a quote-less source.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "PUT /api/articles/rotator-cuff-tear",
        "POST /api/protocol/sources",
        "ARTICLE_PUT",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "rotator-cuff-tear"
        },
        {
          "id": "depth",
          "type": "article_min_words",
          "slug": "rotator-cuff-tear",
          "min": 1200
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "rotator-cuff-tear",
          "min": 6
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "rotator-cuff-tear"
        },
        {
          "id": "renders",
          "type": "http_ok",
          "url": "/a/rotator-cuff-tear"
        },
        {
          "id": "own_subject",
          "type": "not_contains",
          "url": "/a/rotator-cuff-tear",
          "needle": "rp-fallback-mark"
        }
      ],
      "required_evidence": [
        "url",
        "words",
        "sources_with_quotes",
        "rendered_check"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "results": [
          {
            "id": "exists",
            "ok": true,
            "detail": "article rotator-cuff-tear exists"
          },
          {
            "id": "depth",
            "ok": true,
            "detail": "1341 words (need 1200)"
          },
          {
            "id": "sources",
            "ok": true,
            "detail": "6 sources (need 6)"
          },
          {
            "id": "published",
            "ok": true,
            "detail": "status=published"
          },
          {
            "id": "renders",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/a/rotator-cuff-tear"
          },
          {
            "id": "own_subject",
            "ok": true,
            "detail": "not_contains \"rp-fallback-mark\" in https://miscsubjects.com/a/rotator-cuff-tear (scope=content) → false"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-04T18:45:59-07:00",
      "created_at": "2026-08-04T17:46:22-07:00",
      "updated_at": "2026-08-04T18:45:59-07:00",
      "audit": "/api/work/task/WT-0050/audit",
      "submit_to": "/api/work/task/WT-0050/submit"
    },
    {
      "task_id": "WT-0051",
      "kind": "work",
      "objective": "Raise /a/retatrutide to canonical depth — the owner named it alongside BPC-157, TB-500 and ARA-290, and it is the thinnest of the four",
      "detail": "BPC-157 is 55,520 bytes / 123 sources, TB-500 61,168 / 72, ARA-290 33,094 / 33. Retatrutide is 7,940 bytes / 10 sources. Same standard as the other three: mechanism in depth, the human trial data with numbers and denominators, dosing and titration as actually run in the trials, what is unknown, and the self-reported evidence counted with its denominator. The article is about retatrutide only — no condition in the headline.",
      "state": "completed",
      "priority": 2,
      "revision": 9,
      "depends_on": [],
      "permitted_capabilities": [
        "PUT /api/articles/retatrutide",
        "POST /api/protocol/sources",
        "ARTICLE_PUT"
      ],
      "acceptance_tests": [
        {
          "id": "depth",
          "type": "article_min_words",
          "slug": "retatrutide",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "retatrutide",
          "min": 20
        },
        {
          "id": "renders",
          "type": "http_ok",
          "url": "/a/retatrutide"
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "retatrutide"
        }
      ],
      "required_evidence": [
        "url",
        "words",
        "sources_added",
        "rendered_check"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 1,
      "last_result": {
        "accepted": true,
        "tests_declared": 4,
        "tests_passed": 4,
        "results": [
          {
            "id": "depth",
            "ok": true,
            "detail": "2793 words (need 2500)"
          },
          {
            "id": "sources",
            "ok": true,
            "detail": "24 sources (need 20)"
          },
          {
            "id": "renders",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/a/retatrutide"
          },
          {
            "id": "published",
            "ok": true,
            "detail": "status=published"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-04T18:54:49-07:00",
      "created_at": "2026-08-04T17:46:22-07:00",
      "updated_at": "2026-08-04T18:54:49-07:00",
      "audit": "/api/work/task/WT-0051/audit",
      "submit_to": "/api/work/task/WT-0051/submit"
    },
    {
      "task_id": "WT-0059",
      "kind": "work",
      "objective": "Repair the 45 citations whose PubMed identifier points at a different paper than the article names, found by the first whole-corpus scan",
      "detail": "WT-0054 ran the citation-identity scan across the whole corpus for the first time: 1,294 citations checked, 45 mismatches across 29 articles, 2 unresolvable identifiers. Previously only the health corpus had been checked, where it found 3.\n\nTwo distinct classes, and they must not be conflated.\n\nCLASS 1, dangerous — the identifier points at an unrelated paper. The link resolves, the reference looks impeccable, and it survives every link and quote check. Confirmed examples: /a/semaglutide-sciatica cites PMID 23209476 as \"ARA-290 small fiber neuropathy trials\" and that PMID is a study of insecticide-treated bed nets for malaria control. /a/semaglutide-frozen-shoulder cites PMID 39141758 as \"Once-Weekly Semaglutide in Persons with Obesity and Knee Osteoarthritis\" and that PMID is a case series of primary cutaneous sarcomatoid carcinoma. These are the ones to fix first: find the correct identifier for the paper actually being cited, or remove the source and the claims that rest on it.\n\nCLASS 2, noise of the same shape — the identifier is right and the title field carries a descriptive label rather than the record title. The four 2026-08-05 compound articles were in this class and are already repaired; check whether any remaining flags are this rather than class 1 before rewriting an identifier that was correct.\n\nWork it by class 1 first, article by article. Verify each replacement identifier against PubMed before writing it — do not swap one wrong number for another. When the count falls, record the new figure so it can only fall further.",
      "state": "open",
      "priority": 2,
      "revision": 3,
      "depends_on": [],
      "permitted_capabilities": [
        "PUT /api/articles/<slug>",
        "POST /api/articles/<slug>/webhook",
        "scripts/check-citation-identity.mjs",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "scan_runs",
          "type": "http_ok",
          "url": "/api/articles/tesofensine"
        },
        {
          "id": "mismatches_fell",
          "type": "sql_count_at_least",
          "min": 1,
          "sql": "SELECT COUNT(*) AS n FROM articles WHERE published=1 AND slug='semaglutide-sciatica'"
        }
      ],
      "required_evidence": [
        "mismatches_before",
        "mismatches_after",
        "class1_repaired",
        "method"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-05T02:39:57-07:00",
      "updated_at": "2026-08-28T19:50:47-07:00",
      "audit": "/api/work/task/WT-0059/audit",
      "submit_to": "/api/work/task/WT-0059/submit"
    },
    {
      "task_id": "WT-0061",
      "kind": "work",
      "objective": "Publish the blind agreement rate between the decision constitution and fifty real past owner decisions (theoretical-limits A14, 4/10)",
      "detail": "Take fifty decisions the owner actually made, apply the decision constitution to each one blind, and publish the agreement rate with the disagreements named and analysed. Until this number exists the digital-twin axis is a set of rules that feel right. Cheapest high-value item on the scorecard.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "ARTICLE_PUT",
        "DECISION_CONSTITUTION",
        "AGENT_TURNS",
        "LEDGER_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "study_published",
          "type": "article_exists",
          "slug": "decision-constitution-agreement-rate"
        },
        {
          "id": "study_is_substantial",
          "type": "article_min_words",
          "slug": "decision-constitution-agreement-rate",
          "min": 1200
        },
        {
          "id": "study_is_live",
          "type": "article_published",
          "slug": "decision-constitution-agreement-rate"
        },
        {
          "id": "scorecard_updated",
          "type": "not_contains",
          "url": "/a/theoretical-limits",
          "needle": "the cheapest high-value item on this scorecard and it has not been done"
        }
      ],
      "required_evidence": [
        "agreement_rate",
        "method",
        "disagreements",
        "article_url"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-06T00:59:35-07:00",
      "updated_at": "2026-08-06T00:59:35-07:00",
      "audit": "/api/work/task/WT-0061/audit",
      "submit_to": "/api/work/task/WT-0061/submit"
    },
    {
      "task_id": "WT-0062",
      "kind": "work",
      "objective": "Add a quote-retrieval gate to the deploy chain that re-fetches every quoted source, re-finds the span, and demotes the claim when the span is gone (theoretical-limits A3, 8/10)",
      "detail": "A source ledger entry proves a URL was cited, not that the quoted words are still at it. Link rot currently degrades the corpus silently. The gate turns it into a state change: the claim is demoted and the demotion is on the record.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "FILE_PUT",
        "D1_QUERY",
        "HTTP_FETCH",
        "CITATION_VALIDATION"
      ],
      "acceptance_tests": [
        {
          "id": "grounding_live",
          "type": "http_ok",
          "url": "/api/metrics/grounding"
        },
        {
          "id": "scorecard_updated",
          "type": "not_contains",
          "url": "/a/theoretical-limits",
          "needle": "is not universally machine-checked"
        }
      ],
      "required_evidence": [
        "gate_file",
        "gates_manifest_entry",
        "first_real_refusal",
        "demoted_claims"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-06T00:59:37-07:00",
      "updated_at": "2026-08-06T00:59:37-07:00",
      "audit": "/api/work/task/WT-0062/audit",
      "submit_to": "/api/work/task/WT-0062/submit"
    },
    {
      "task_id": "WT-0066",
      "kind": "work",
      "objective": "Populate charge outcomes so the allocation loop can measure whether acting worked (theoretical-limits A12, 6/10)",
      "detail": "Nothing currently links a sent message to a reply, or a reply to revenue, so the delta equation that allocates contact is fed by sends rather than results. Add an outcome field on the charge row, populated by the inbound lane, and make one allocation decision cite the outcome rows it used.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "D1_REPAIR",
        "LEADS_LIST",
        "EMAILS_SENT",
        "OUTREACH_ALLOCATE"
      ],
      "acceptance_tests": [
        {
          "id": "outreach_allocator_live",
          "type": "http_ok",
          "url": "/api/directory/OUTREACH_ALLOCATE"
        },
        {
          "id": "scorecard_updated",
          "type": "not_contains",
          "url": "/a/theoretical-limits",
          "needle": "Charge outcomes are null."
        }
      ],
      "required_evidence": [
        "outcome_column",
        "populated_rows",
        "allocation_receipt"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-06T00:59:40-07:00",
      "updated_at": "2026-08-06T00:59:40-07:00",
      "audit": "/api/work/task/WT-0066/audit",
      "submit_to": "/api/work/task/WT-0066/submit"
    },
    {
      "task_id": "WT-0070",
      "kind": "work",
      "objective": "Comments render newest-first by default on every surface",
      "detail": "Owner order 2026-08-07: default sort = newest. Add a sort control where comments render.",
      "state": "superseded",
      "priority": 2,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-06T18:35:23-07:00",
      "updated_at": "2026-08-07T15:54:39-07:00",
      "audit": "/api/work/task/WT-0070/audit",
      "submit_to": "/api/work/task/WT-0070/submit"
    },
    {
      "task_id": "WT-0071",
      "kind": "work",
      "objective": "A comment lane that GET-only web models can actually use, and instructions that match reality",
      "detail": "Web GPT and Claude web report they cannot comment. ChatGPT browsing cannot POST; GPT proposed an accommodation the owner believed shipped — find it in the record or build it; Claude can mint via the keyless token page. Rewrite the how-to-comment instructions so a GET-only browser has a real path, and the claim never repeats.",
      "state": "superseded",
      "priority": 2,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-06T18:35:24-07:00",
      "updated_at": "2026-08-07T15:54:39-07:00",
      "audit": "/api/work/task/WT-0071/audit",
      "submit_to": "/api/work/task/WT-0071/submit"
    },
    {
      "task_id": "WT-0073",
      "kind": "work",
      "objective": "Ship one-queue build order 1-4: projection endpoint, work+comment cards, the board page, computed rank with rank_why",
      "detail": "The unified queue view /a/the-queue is hand-computed until this ships. Spec: /a/one-queue-tasks-issues-comments.",
      "state": "superseded",
      "priority": 2,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-06T18:35:26-07:00",
      "updated_at": "2026-08-07T15:54:40-07:00",
      "audit": "/api/work/task/WT-0073/audit",
      "submit_to": "/api/work/task/WT-0073/submit"
    },
    {
      "task_id": "WT-0074",
      "kind": "work",
      "objective": "Dedupe the model-comments widget and add a uniqueness guard at the comment write path",
      "detail": "Owner sees repeated comments in the model-comments widget (2026-08-07). Find the duplicate rows, remove them, and make the write path refuse an identical actor+slug+body within a window. Supersedes probe WT-0069.",
      "state": "superseded",
      "priority": 2,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": "WT-0069",
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-06T18:35:38-07:00",
      "updated_at": "2026-08-07T15:54:40-07:00",
      "audit": "/api/work/task/WT-0074/audit",
      "submit_to": "/api/work/task/WT-0074/submit"
    },
    {
      "task_id": "WT-0075",
      "kind": "work",
      "objective": "Encode the three-state transport taxonomy and one-shot mutation credentials into /start and the mint flow",
      "detail": "From GPT-5.6-Sol's post-mortem after comment #1022 (2026-08-07): (1) /start and mint responses carry machine-detectable transports including chatgpt_safe_navigation_fallback with the operator-relay procedure; (2) the brutal transport-vs-application distinction: no HTTP response from miscsubjects.com = the site did NOT fail, never report it as a site rejection, no receipt = unproven; (3) mutation credentials that transit an operator paste become one-shot: scope COMMENT_CREATE, one slug, uses=1, short TTL, actor pinned; (4) prefer server-constructed complete next-step URLs over model-assembled ones everywhere.",
      "state": "superseded",
      "priority": 2,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-06T20:51:05-07:00",
      "updated_at": "2026-08-07T15:54:41-07:00",
      "audit": "/api/work/task/WT-0075/audit",
      "submit_to": "/api/work/task/WT-0075/submit"
    },
    {
      "task_id": "WT-0076",
      "kind": "work",
      "objective": "Comments render newest-first by default on every surface",
      "detail": "Owner order 2026-08-07: default sort = newest. Add a sort control where comments render. The rendered surface stamps data-comment-sort=\"newest\" and data-comment-sort-control=\"1\" so acceptance measures the rendered object. Successor of WT-0070, which was created without acceptance tests.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "default_newest_stamped",
          "type": "contains",
          "url": "/a/the-work-object",
          "needle": "data-comment-sort=\"newest\"",
          "scope": "raw"
        },
        {
          "id": "sort_control_present",
          "type": "contains",
          "url": "/a/the-work-object",
          "needle": "data-comment-sort-control",
          "scope": "raw"
        }
      ],
      "required_evidence": [
        "surfaces_changed",
        "render_screenshot_url"
      ],
      "parent_task": null,
      "supersedes": "WT-0070",
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-07T15:54:36-07:00",
      "updated_at": "2026-08-07T15:54:36-07:00",
      "audit": "/api/work/task/WT-0076/audit",
      "submit_to": "/api/work/task/WT-0076/submit"
    },
    {
      "task_id": "WT-0079",
      "kind": "work",
      "objective": "Ship one-queue build order 1-4: projection endpoint, work+comment cards, the board page, computed rank with rank_why",
      "detail": "Spec: /a/one-queue-tasks-issues-comments. /a/the-queue stops being hand-computed: it stamps data-queue-computed=\"1\" and shows rank_why per line. Successor of WT-0073 (no acceptance tests).",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "queue_computed",
          "type": "contains",
          "url": "/a/the-queue",
          "needle": "data-queue-computed=\"1\"",
          "scope": "raw"
        },
        {
          "id": "rank_why_visible",
          "type": "contains",
          "url": "/a/the-queue",
          "needle": "rank_why",
          "scope": "raw"
        }
      ],
      "required_evidence": [
        "projection_endpoint_url",
        "board_url"
      ],
      "parent_task": null,
      "supersedes": "WT-0073",
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-07T15:54:37-07:00",
      "updated_at": "2026-08-07T15:54:37-07:00",
      "audit": "/api/work/task/WT-0079/audit",
      "submit_to": "/api/work/task/WT-0079/submit"
    },
    {
      "task_id": "WT-0080",
      "kind": "work",
      "objective": "Dedupe the model-comments widget and add a uniqueness guard at the comment write path",
      "detail": "Owner sees repeated comments (2026-08-07). Remove duplicate rows; the write path refuses an identical actor+slug+body within a window; surfaces stamp data-comment-dedup=\"1\" once the guard is live. Successor of WT-0074 (no acceptance tests). Also supersedes probe WT-0069 by inheritance.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "guard_stamped",
          "type": "contains",
          "url": "/a/the-work-object",
          "needle": "data-comment-dedup=\"1\"",
          "scope": "raw"
        }
      ],
      "required_evidence": [
        "duplicate_rows_removed",
        "guard_refusal_receipt"
      ],
      "parent_task": null,
      "supersedes": "WT-0074",
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-07T15:54:38-07:00",
      "updated_at": "2026-08-07T15:54:38-07:00",
      "audit": "/api/work/task/WT-0080/audit",
      "submit_to": "/api/work/task/WT-0080/submit"
    },
    {
      "task_id": "WT-0093",
      "kind": "work",
      "objective": "Deploy gate check-source-quotes.mjs cannot authenticate to the D1 REST endpoint (APIError 10000 in the ship environment, 7403 with the vault token) so SOURCE_QUOTE_LAW never actually runs",
      "detail": "Observed on the 2026-08-29 deploys. The gate reports FAILED on every ship for want of a credential, which is the exact decorative-gate failure ship.mjs documents in its own header. Failure class: gate_credential_scope. Layer: deploy gate environment. Missing invariant: a gate that cannot reach its data source must fail the deploy loudly as ENV_BROKEN, and the credential it needs must exist with D1 read scope in the ship environment.",
      "state": "superseded",
      "priority": 2,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "gate_runs_clean",
          "type": "contains",
          "url": "/api/work/task/WT-SELF/audit",
          "needle": "never-satisfiable-placeholder",
          "scope": "raw"
        }
      ],
      "required_evidence": [
        "gate_output_showing_real_scan"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-29T06:12:00-07:00",
      "updated_at": "2026-08-29T06:12:25-07:00",
      "audit": "/api/work/task/WT-0093/audit",
      "submit_to": "/api/work/task/WT-0093/submit"
    },
    {
      "task_id": "WT-0094",
      "kind": "work",
      "objective": "Deploy gate check-source-quotes.mjs cannot authenticate to the D1 REST endpoint (APIError 10000 in the ship environment, 7403 with the vault token) so SOURCE_QUOTE_LAW never actually runs",
      "detail": "Observed on the 2026-08-29 deploys. Failure class: gate_credential_scope. Layer: deploy gate environment. Missing invariant: a gate that cannot reach its data source must fail loudly as ENV_BROKEN and the credential it needs must exist with D1 read scope in the ship environment. Repair = fix the credential scope or the gate data path, then run the gate and submit its passing output.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "repair_evidence",
          "type": "evidence_present",
          "field": "gate_output_showing_real_scan"
        }
      ],
      "required_evidence": [
        "gate_output_showing_real_scan"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-29T06:12:20-07:00",
      "updated_at": "2026-08-29T06:12:20-07:00",
      "audit": "/api/work/task/WT-0094/audit",
      "submit_to": "/api/work/task/WT-0094/submit"
    },
    {
      "task_id": "WT-0100",
      "kind": "work",
      "objective": "Cells written by the agent-sheet Durable Object lane are appended to sheet_cell_versions with the turn trace as cause, so the agent message log and settings cells carry hash-chained history like REST writes do",
      "detail": "Verified 2026-09-02: workers/sheet-do/src/index.js write op has no version append; functions/_lib/agent_sheet.js writeCells returns after the DO write succeeds; only sheets_store.appendVersion (REST lane) writes versions. Live: 6,058 cells, 273 versions, 2 sheets versioned; GET /api/sheets/sh_89pbg3gd/history/AA2 returns versions:0 for the model setting, and every log cell (A..X) returns 0. The history lane contract promises every value an address has ever held; for agent-written cells that is false. Repair: append a version (actor agent-sheet, cause_trace = dispatch trace) on every DO write; add a deploy-gate check that any cell updated after the fix date has a version; state on the sheets contract which cells predate the chain.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "code_edit",
        "deploy"
      ],
      "acceptance_tests": [
        {
          "id": "agent_cells_versioned",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM sheet_cell_versions WHERE sheet_id=sh_89pbg3gd AND actor LIKE agent-sheet%",
          "min": 50
        },
        {
          "id": "history_lane_public",
          "type": "contains",
          "url": "/api/sheets",
          "needle": "history_lane"
        }
      ],
      "required_evidence": [
        "history_url_of_one_agent_written_cell_showing_versions_gt_0",
        "commit_sha"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-02T10:02:50-07:00",
      "updated_at": "2026-09-02T10:02:50-07:00",
      "audit": "/api/work/task/WT-0100/audit",
      "submit_to": "/api/work/task/WT-0100/submit"
    },
    {
      "task_id": "WT-0101",
      "kind": "work",
      "objective": "Every enabled fn and http directory row carries a WHAT line, a WHEN_TO_USE line, an input_schema and one worked example, and the dispatcher validates arguments against the schema before running the tool",
      "detail": "Verified 2026-09-02 from GET /api/directory: of 830 fn+http rows, 277 have no WHAT line, 566 have no input_schema, 755 have no example; arguments are positional pipe-separated strings with no validation before the call. Consequence observed on the live agent sheet: three iMessage turns on 2026-09-02 answered that no clock source exists while TIME_NOW was one DIR_GET away, because the model must guess a tool name or list 976 rows. A small model cannot obey a contract it cannot see. Repair: schema + example required to set enabled=1 (enforce in the write path, not a lint); dispatcher returns the schema error to the model instead of running; per-agent allowed tool list of at most ~20 rows whose one-line contracts ride in the prompt.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "directory_edit",
        "code_edit",
        "deploy"
      ],
      "acceptance_tests": [
        {
          "id": "no_undocumented_enabled_tools",
          "type": "sql_count_at_least",
          "sql": "SELECT CASE WHEN (SELECT COUNT(*) FROM directory WHERE type IN (fn,http) AND enabled=1 AND (input_schema IS NULL OR input_schema= OR content NOT LIKE %WHAT% OR content NOT LIKE %WHEN%)) = 0 THEN 1 ELSE 0 END AS n",
          "min": 1
        }
      ],
      "required_evidence": [
        "count_of_rows_repaired",
        "one_dispatch_receipt_showing_a_schema_refusal"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-02T10:02:50-07:00",
      "updated_at": "2026-09-02T10:02:50-07:00",
      "audit": "/api/work/task/WT-0101/audit",
      "submit_to": "/api/work/task/WT-0101/submit"
    },
    {
      "task_id": "WT-0104",
      "kind": "repair",
      "objective": "Restore the Google write path so the build can create and plot Google Sheets again.",
      "detail": "Two independent failures found 2026-09-02 while adding gold plotting. (1) The clasp refresh token in ~/.clasprc.json and the gcloud ADC both return invalid_grant / invalid_rapt, an organisation reauth policy, so the Apps Script API refuses a content push. (2) AIRUNNER_WEB_APP_URL now returns a Google 404 HTML page, so APPS_SCRIPT_RUN fails on ping, before any action name is even considered. Failure class: credential_expiry_and_dead_deployment. Layer: google_oauth plus the apps_script web app deployment. Missing invariant: nothing checks that the Google credential still mints a token or that AIRUNNER_WEB_APP_URL still answers, so both failed silently until work needed them. Repair already staged: sheets_create and sheets_chart are written and committed at apps-script/Code.gs in d0e40c3a0 and take effect on the first successful push. Regression test to add: a scheduled probe that mints a Google token and calls APPS_SCRIPT_RUN ping, failing loudly.",
      "state": "superseded",
      "priority": 2,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": "APPS_SCRIPT_RUN ping returns ok:true, and a sheets_create call returns a new spreadsheet url that loads.",
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-02T18:10:36-07:00",
      "updated_at": "2026-09-05T22:39:04-07:00",
      "audit": "/api/work/task/WT-0104/audit",
      "submit_to": "/api/work/task/WT-0104/submit"
    },
    {
      "task_id": "WT-0105",
      "kind": "work",
      "objective": "Make the build publishable: a generated, gate-checked public projection of the operating repository lands in a second GitHub repository, private until the owner flips visibility, with self-explaining documentation",
      "detail": "The operating repository (miscsubjects-pages) can never be published as it stands: its tracked tree and fourteen thousand commits carry the ledger mirror (personal data and pre-scrub credential material), guard baselines, a committed signing key, legacy consoles with hardcoded provider keys, and the owner's identity in about 280 code, prompt and doc files. The repair is a projection, not a rewrite: scripts/publish-mirror.mjs lists tracked files, keeps an allow-list, substitutes identity (owner emails, phones, home directory, handles, the site's own owner-identity table, identifiers), runs gates against the OUTPUT (forbidden strings, paths, real vault values, size, gitleaks with a reasoned allow-list), writes PROJECTION.json, and pushes one commit per export to the owner/miscsubjects. .github/workflows/publish-mirror.yml re-exports after every real commit over a write-only deploy key. Documentation: README.md (front door), SECURITY.md (where credentials live, configuration names, gates), docs/PUBLISHING.md (the plan, the mechanism, the go-public checklist), docs/REPO_MAP.md (every top-level path and whether it travels). The manifest is announced at https://miscsubjects.com/img/projection/latest.json so this task can be graded without access to either repository.",
      "state": "superseded",
      "priority": 2,
      "revision": 6,
      "depends_on": [],
      "permitted_capabilities": [
        "git",
        "gh",
        "node scripts/publish-mirror.mjs",
        "PUT /api/r2/img/projection/*",
        "POST /api/coding-law/start",
        "POST /api/coding-law/commit"
      ],
      "acceptance_tests": [
        {
          "id": "manifest_served",
          "type": "http_ok",
          "url": "/img/projection/latest.json"
        },
        {
          "id": "manifest_all_gates_ok",
          "type": "contains",
          "url": "/img/projection/latest.json",
          "needle": "\"all_gates_ok\": true",
          "scope": "raw"
        },
        {
          "id": "manifest_has_content_hash",
          "type": "contains",
          "url": "/img/projection/latest.json",
          "needle": "\"content_hash\": \"",
          "scope": "raw"
        },
        {
          "id": "manifest_names_source_commit",
          "type": "contains",
          "url": "/img/projection/latest.json",
          "needle": "\"commit\": \"",
          "scope": "raw"
        },
        {
          "id": "manifest_records_mirror_commit",
          "type": "contains",
          "url": "/img/projection/latest.json",
          "needle": "\"mirror\": {\n  \"commit\": \"",
          "scope": "raw"
        },
        {
          "id": "ledger_mirror_not_projected",
          "type": "not_contains",
          "url": "/img/projection/latest.json",
          "needle": "\"path\": \"ledger-mirror/",
          "scope": "raw"
        },
        {
          "id": "evidence_mirror_commit",
          "type": "evidence_present",
          "field": "mirror_commit"
        }
      ],
      "required_evidence": [
        "mirror_repository",
        "mirror_commit",
        "source_commit",
        "content_hash",
        "gates_passed",
        "docs_written",
        "manifest_url"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 1,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-02T18:11:24-07:00",
      "updated_at": "2026-09-02T18:34:47-07:00",
      "audit": "/api/work/task/WT-0105/audit",
      "submit_to": "/api/work/task/WT-0105/submit"
    },
    {
      "task_id": "WT-0106",
      "kind": "work",
      "objective": "Make the build publishable: a generated, gate-checked public projection of the operating repository lands in a second GitHub repository, private until the owner flips visibility, with self-explaining documentation",
      "detail": "The operating repository (miscsubjects-pages) can never be published as it stands: its tracked tree and fourteen thousand commits carry the ledger mirror (personal data and pre-scrub credential material), guard baselines, a committed signing key, legacy consoles with hardcoded provider keys, and the owner's identity in about 280 code, prompt and doc files. The repair is a projection, not a rewrite: scripts/publish-mirror.mjs lists tracked files, keeps an allow-list, substitutes identity (owner emails, phones, home directory, handles, the site's own owner-identity table, identifiers), runs gates against the OUTPUT (forbidden strings, paths, real vault values, size, gitleaks with a reasoned allow-list), writes PROJECTION.json, and pushes one commit per export to the owner/miscsubjects. .github/workflows/publish-mirror.yml re-exports after every real commit over a write-only deploy key. Documentation: README.md (front door), SECURITY.md (where credentials live, configuration names, gates), docs/PUBLISHING.md (the plan, the mechanism, the go-public checklist), docs/REPO_MAP.md (every top-level path and whether it travels). The manifest is announced at https://miscsubjects.com/img/projection/latest.json so this task can be graded without access to either repository. Revision of WT-0105: its test manifest_records_mirror_commit encoded the exporter's own JSON whitespace, but the site's JSON door re-serialises every served JSON document (indent 2, an _ai_door block prepended), so that needle could never match. The manifest now carries a flat mirror_commit key and the test reads that key; no other test changed.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "git",
        "gh",
        "node scripts/publish-mirror.mjs",
        "PUT /api/r2/img/projection/*",
        "POST /api/coding-law/start",
        "POST /api/coding-law/commit"
      ],
      "acceptance_tests": [
        {
          "id": "manifest_served",
          "type": "http_ok",
          "url": "/img/projection/latest.json"
        },
        {
          "id": "manifest_all_gates_ok",
          "type": "contains",
          "url": "/img/projection/latest.json",
          "needle": "\"all_gates_ok\": true",
          "scope": "raw"
        },
        {
          "id": "manifest_has_content_hash",
          "type": "contains",
          "url": "/img/projection/latest.json",
          "needle": "\"content_hash\": \"",
          "scope": "raw"
        },
        {
          "id": "manifest_names_source_commit",
          "type": "contains",
          "url": "/img/projection/latest.json",
          "needle": "\"commit\": \"",
          "scope": "raw"
        },
        {
          "id": "manifest_records_mirror_commit",
          "type": "contains",
          "url": "/img/projection/latest.json",
          "needle": "\"mirror_commit\": \"",
          "scope": "raw"
        },
        {
          "id": "ledger_mirror_not_projected",
          "type": "not_contains",
          "url": "/img/projection/latest.json",
          "needle": "\"path\": \"ledger-mirror/",
          "scope": "raw"
        },
        {
          "id": "evidence_mirror_commit",
          "type": "evidence_present",
          "field": "mirror_commit"
        }
      ],
      "required_evidence": [
        "mirror_repository",
        "mirror_commit",
        "source_commit",
        "content_hash",
        "gates_passed",
        "docs_written",
        "manifest_url"
      ],
      "parent_task": null,
      "supersedes": "WT-0105",
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 7,
        "tests_passed": 7,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "manifest_served",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/img/projection/latest.json"
          },
          {
            "id": "manifest_all_gates_ok",
            "ok": true,
            "detail": "contains \"\\\"all_gates_ok\\\": true\" in https://miscsubjects.com/img/projection/latest.json (scope=raw) → true"
          },
          {
            "id": "manifest_has_content_hash",
            "ok": true,
            "detail": "contains \"\\\"content_hash\\\": \\\"\" in https://miscsubjects.com/img/projection/latest.json (scope=raw) → true"
          },
          {
            "id": "manifest_names_source_commit",
            "ok": true,
            "detail": "contains \"\\\"commit\\\": \\\"\" in https://miscsubjects.com/img/projection/latest.json (scope=raw) → true"
          },
          {
            "id": "manifest_records_mirror_commit",
            "ok": true,
            "detail": "contains \"\\\"mirror_commit\\\": \\\"\" in https://miscsubjects.com/img/projection/latest.json (scope=raw) → true"
          },
          {
            "id": "ledger_mirror_not_projected",
            "ok": true,
            "detail": "not_contains \"\\\"path\\\": \\\"ledger-mirror/\" in https://miscsubjects.com/img/projection/latest.json (scope=raw) → false"
          },
          {
            "id": "evidence_mirror_commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "mirror_commit"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-02T18:38:57-07:00",
      "created_at": "2026-09-02T18:34:47-07:00",
      "updated_at": "2026-09-02T18:38:57-07:00",
      "audit": "/api/work/task/WT-0106/audit",
      "submit_to": "/api/work/task/WT-0106/submit"
    },
    {
      "task_id": "WT-0107",
      "kind": "work",
      "objective": "The public projection is the primitive of the build: tenant integrations stubbed, content data and one-off scripts excluded, narrative comments and paragraphs removed, every JavaScript file re-parsed, and the manifest proves it",
      "detail": "Owner direction 2026-09-02: the public repository must be the actual technology, not the operator's use of it, with all diary aspects removed before publishing. scripts/publish-mirror.mjs gains a profile: name-based exclusion of the owner's business integrations with stubs at every path the kernel imports (same export names, throw with the path when used), exclusion of content-seeding migrations, protocol primer bodies, session reports, one-off scripts, plans and doctrine skills, a comment scanner that removes narrative comments from JavaScript (state machine over strings, templates, regex literals) and full-line comment groups from SQL, shell, YAML and TOML, a Markdown paragraph filter, in-string marker removal, transforms of failure-vault.json and gates.manifest.json, and two new gates: syntax (every JavaScript file parses as an ES module) and diary (no narrative marker survives anywhere). The manifest at /img/projection/latest.json carries profile.name, stubbed_modules_count, comments_removed and all_gates_ok.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "git",
        "gh",
        "node scripts/publish-mirror.mjs",
        "PUT /api/r2/img/projection/*",
        "POST /api/coding-law/start",
        "POST /api/coding-law/commit"
      ],
      "acceptance_tests": [
        {
          "id": "manifest_served",
          "type": "http_ok",
          "url": "/img/projection/latest.json"
        },
        {
          "id": "manifest_all_gates_ok",
          "type": "contains",
          "url": "/img/projection/latest.json",
          "needle": "\"all_gates_ok\": true",
          "scope": "raw"
        },
        {
          "id": "manifest_is_primitive",
          "type": "contains",
          "url": "/img/projection/latest.json",
          "needle": "\"name\": \"primitive\"",
          "scope": "raw"
        },
        {
          "id": "manifest_counts_stubs",
          "type": "contains",
          "url": "/img/projection/latest.json",
          "needle": "\"stubbed_modules_count\": ",
          "scope": "raw"
        },
        {
          "id": "manifest_counts_removed_comments",
          "type": "contains",
          "url": "/img/projection/latest.json",
          "needle": "\"comments_removed\": ",
          "scope": "raw"
        },
        {
          "id": "manifest_syntax_gate_present",
          "type": "contains",
          "url": "/img/projection/latest.json",
          "needle": "\"name\": \"syntax\"",
          "scope": "raw"
        },
        {
          "id": "manifest_diary_gate_present",
          "type": "contains",
          "url": "/img/projection/latest.json",
          "needle": "\"name\": \"diary\"",
          "scope": "raw"
        },
        {
          "id": "manifest_records_mirror_commit",
          "type": "contains",
          "url": "/img/projection/latest.json",
          "needle": "\"mirror_commit\": \"",
          "scope": "raw"
        },
        {
          "id": "ledger_mirror_not_projected",
          "type": "not_contains",
          "url": "/img/projection/latest.json",
          "needle": "\"path\": \"ledger-mirror/",
          "scope": "raw"
        },
        {
          "id": "evidence_mirror_commit",
          "type": "evidence_present",
          "field": "mirror_commit"
        }
      ],
      "required_evidence": [
        "mirror_repository",
        "mirror_commit",
        "source_commit",
        "content_hash",
        "gates_passed",
        "stubs",
        "removed",
        "docs_written",
        "manifest_url"
      ],
      "parent_task": null,
      "supersedes": "WT-0106",
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 10,
        "tests_passed": 10,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "manifest_served",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/img/projection/latest.json"
          },
          {
            "id": "manifest_all_gates_ok",
            "ok": true,
            "detail": "contains \"\\\"all_gates_ok\\\": true\" in https://miscsubjects.com/img/projection/latest.json (scope=raw) → true"
          },
          {
            "id": "manifest_is_primitive",
            "ok": true,
            "detail": "contains \"\\\"name\\\": \\\"primitive\\\"\" in https://miscsubjects.com/img/projection/latest.json (scope=raw) → true"
          },
          {
            "id": "manifest_counts_stubs",
            "ok": true,
            "detail": "contains \"\\\"stubbed_modules_count\\\": \" in https://miscsubjects.com/img/projection/latest.json (scope=raw) → true"
          },
          {
            "id": "manifest_counts_removed_comments",
            "ok": true,
            "detail": "contains \"\\\"comments_removed\\\": \" in https://miscsubjects.com/img/projection/latest.json (scope=raw) → true"
          },
          {
            "id": "manifest_syntax_gate_present",
            "ok": true,
            "detail": "contains \"\\\"name\\\": \\\"syntax\\\"\" in https://miscsubjects.com/img/projection/latest.json (scope=raw) → true"
          },
          {
            "id": "manifest_diary_gate_present",
            "ok": true,
            "detail": "contains \"\\\"name\\\": \\\"diary\\\"\" in https://miscsubjects.com/img/projection/latest.json (scope=raw) → true"
          },
          {
            "id": "manifest_records_mirror_commit",
            "ok": true,
            "detail": "contains \"\\\"mirror_commit\\\": \\\"\" in https://miscsubjects.com/img/projection/latest.json (scope=raw) → true"
          },
          {
            "id": "ledger_mirror_not_projected",
            "ok": true,
            "detail": "not_contains \"\\\"path\\\": \\\"ledger-mirror/\" in https://miscsubjects.com/img/projection/latest.json (scope=raw) → false"
          },
          {
            "id": "evidence_mirror_commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "mirror_commit"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-02T20:15:58-07:00",
      "created_at": "2026-09-02T20:14:10-07:00",
      "updated_at": "2026-09-02T20:15:58-07:00",
      "audit": "/api/work/task/WT-0107/audit",
      "submit_to": "/api/work/task/WT-0107/submit"
    },
    {
      "task_id": "WT-0108",
      "kind": "repair",
      "objective": "Restore the Google write path so the build can create and plot Google Sheets again (measured by /api/google-health).",
      "detail": "Replaces WT-0104, whose acceptance was a sentence no runner could execute. Same two failures found 2026-09-02: (1) the clasp refresh token in ~/.clasprc.json and the gcloud ADC both return invalid_grant / invalid_rapt (organisation reauth policy), so the Apps Script API refuses a content push; (2) AIRUNNER_WEB_APP_URL answers a Google 404 HTML page, so APPS_SCRIPT_RUN fails on ping before any action is considered. Failure class credential_expiry_and_dead_deployment; layer google_oauth + apps_script web app deployment; missing invariant: nothing checked that the credential still mints a token or that the web app still answers. Repair staged: sheets_create and sheets_chart at apps-script/Code.gs (d0e40c3a0) take effect on the first successful push. The probe route /api/google-health asks the live APPS_SCRIPT_RUN lane to ping and answers 200 only on ok:true — it is the regression test and the acceptance test of this task, and it must be scheduled as a recurring probe once green.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "CLI_CLASP",
        "APPS_SCRIPT_RUN",
        "DEPLOY",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "id": "google_health_200",
          "type": "http_ok",
          "url": "/api/google-health"
        },
        {
          "id": "google_health_ping_ok",
          "type": "contains",
          "url": "/api/google-health",
          "needle": "\"apps_script_ping\": \"ok\""
        },
        {
          "id": "probe_documents_itself",
          "type": "contains",
          "url": "/api/google-health",
          "needle": "Acceptance probe for the Google write path"
        }
      ],
      "required_evidence": [
        "repair",
        "regression_test",
        "runtime_evidence"
      ],
      "parent_task": null,
      "supersedes": "WT-0104",
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-05T22:39:03-07:00",
      "updated_at": "2026-09-05T22:39:03-07:00",
      "audit": "/api/work/task/WT-0108/audit",
      "submit_to": "/api/work/task/WT-0108/submit"
    },
    {
      "task_id": "WT-0112",
      "kind": "work",
      "objective": "Create a durable session object a second model can attach to, so work survives switching between Claude, ChatGPT, Grok and Kimi",
      "detail": "The claim that durable state lives outside the model vendor is architecturally true and empirically empty: sessions=3 and memories=1. The real state is agent_turns (8,258) and the ledger, neither of which a cold model can attach to as a single handle. Build one addressable object — state://<handle> — that returns the current world model, the open work, the last N turns and the objects in play, with its own share link and its own ledger trace. Then a person can hand any model one URL and say continue, and the next model sees exactly what the previous one saw. This is the whole vendor-independence story and it is the piece that does not exist.",
      "state": "superseded",
      "priority": 2,
      "revision": 4,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "D1_EXEC",
        "SESSION_START",
        "SESSION_GET",
        "SESSION_UPDATE",
        "CAP_MINT"
      ],
      "acceptance_tests": [
        {
          "id": "handle_public",
          "type": "http_ok",
          "url": "/api/session/self?format=markdown"
        },
        {
          "id": "names_its_own_verbs",
          "type": "contains",
          "url": "/api/session/self?format=markdown",
          "needle": "attach",
          "scope": "raw"
        },
        {
          "id": "sessions_real",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM sessions",
          "min": 5
        }
      ],
      "required_evidence": [
        "handle_url",
        "two_model_handoff_trace",
        "what_the_second_model_saw"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-06T07:56:02-07:00",
      "updated_at": "2026-09-06T11:53:00-07:00",
      "audit": "/api/work/task/WT-0112/audit",
      "submit_to": "/api/work/task/WT-0112/submit"
    },
    {
      "task_id": "WT-0113",
      "kind": "work",
      "objective": "Repair POST /api/directory, which cannot create any row and has been broken since migration 0373",
      "detail": "functions/api/directory/index.js binds null into object_kind and descriptor_rev, both NOT NULL since 0373. Every create fails with a SQLITE_CONSTRAINT error, including the workbook's own new-row path in maybeCommitDraft, so typing a new row into the directory grid fails. PUT /api/directory/<key> works, which is why nobody noticed. Two binds. The reason it shipped is the deeper defect: check-environment-contract.mjs builds its own directory table and never calls the create handler, and the only test of onRequestPost asserts the refusal path against a fake DB with no constraints and is not in gates.manifest.json. Fix the binds, add a happy-path create test against a real migrated schema, and list it in the manifest.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "FILE_GET",
        "FILE_PUT",
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT"
      ],
      "acceptance_tests": [
        {
          "id": "contract_still_public",
          "type": "http_ok",
          "url": "/api/directory"
        },
        {
          "id": "create_is_documented",
          "type": "contains",
          "url": "/api/directory",
          "needle": "POST",
          "scope": "raw"
        }
      ],
      "required_evidence": [
        "created_then_deleted_probe",
        "gate_name",
        "gate_output"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "contract_still_public",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/directory"
          },
          {
            "id": "create_is_documented",
            "ok": true,
            "detail": "contains \"POST\" in https://miscsubjects.com/api/directory (scope=raw) → true"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-06T08:41:26-07:00",
      "created_at": "2026-09-06T07:56:03-07:00",
      "updated_at": "2026-09-06T08:41:26-07:00",
      "audit": "/api/work/task/WT-0113/audit",
      "submit_to": "/api/work/task/WT-0113/submit"
    },
    {
      "task_id": "WT-0114",
      "kind": "work",
      "objective": "Give flows a transform step and an each step so compositions can build real composite capabilities",
      "detail": "$PREV is one opaque string: subVars has no JSON path and the flow language has no iteration. So pulling one field out of step one's response requires a JavaScript fn, which is a large part of why 566 of 1,066 rows are type fn. Add two steps — a JSON-path extraction over $PREV and an EACH that maps a step over an array — plus a merge that builds one object from several branches. Then CUSTOMER_LOOKUP composing a commerce call, an email-platform call and a payments call into one result is a directory row rather than an application, and because a flow is an ordinary member it inherits every invocation surface the moment it exists.",
      "state": "superseded",
      "priority": 2,
      "revision": 6,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "DIR_GET",
        "DIR_PATCH",
        "FILE_GET",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "id": "composite_runs",
          "type": "http_ok",
          "url": "/api/dispatch?invoke=NOW"
        },
        {
          "id": "flow_documented",
          "type": "contains",
          "url": "/api/environment?format=markdown",
          "needle": "flow",
          "scope": "raw"
        }
      ],
      "required_evidence": [
        "flow_row_key",
        "composite_output",
        "no_new_fn_row"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 1,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-06T07:56:04-07:00",
      "updated_at": "2026-09-06T08:42:45-07:00",
      "audit": "/api/work/task/WT-0114/audit",
      "submit_to": "/api/work/task/WT-0114/submit"
    },
    {
      "task_id": "WT-0122",
      "kind": "work",
      "objective": "Give flows a transform step and an each step so compositions can build real composite capabilities",
      "detail": "Same objective as WT-0114, whose acceptance test was written against /api/dispatch?invoke= unauthenticated and answered 401 — the acceptance runner holds no credentials, so the test could never pass. That was the third test in this batch written against a surface the runner cannot reach; the lesson is that an acceptance test must hit a genuinely public surface or query DB server-side. Proof is now server-side: QUAKE_PLACE is a real flow row whose content is 'QUAKE_FEED: $1|5 > JSON: $.features[0].properties.place', and the directory test lane records what it actually returned. A short extracted value in last_response, rather than the multi-kilobyte geojson the HTTP row returns, is the evidence that JSON: reached inside the response.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "DIR_GET",
        "DIR_PATCH",
        "FILE_GET",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "id": "flow_row_exists",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM directory WHERE key='QUAKE_PLACE' AND type='flow' AND content LIKE '%JSON:%'",
          "min": 1
        },
        {
          "id": "extraction_actually_happened",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM directory WHERE key='QUAKE_PLACE' AND test_state LIKE '%works%' AND length(IFNULL(last_response,''))BETWEEN 1 AND 300 AND last_response NOT LIKE '%FeatureCollection%'",
          "min": 1
        },
        {
          "id": "public_contract",
          "type": "http_ok",
          "url": "/api/directory/QUAKE_PLACE"
        }
      ],
      "required_evidence": [
        "flow_row_key",
        "composite_output",
        "no_new_fn_row"
      ],
      "parent_task": null,
      "supersedes": "WT-0114",
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 3,
        "tests_passed": 3,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "flow_row_exists",
            "ok": true,
            "detail": "count=1 (need 1)"
          },
          {
            "id": "extraction_actually_happened",
            "ok": true,
            "detail": "count=1 (need 1)"
          },
          {
            "id": "public_contract",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/directory/QUAKE_PLACE"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-06T08:42:52-07:00",
      "created_at": "2026-09-06T08:42:43-07:00",
      "updated_at": "2026-09-06T08:42:52-07:00",
      "audit": "/api/work/task/WT-0122/audit",
      "submit_to": "/api/work/task/WT-0122/submit"
    },
    {
      "task_id": "WT-0124",
      "kind": "work",
      "objective": "Refuse an acceptance test the infrastructure cannot execute, at the moment the task is created rather than after the work is done",
      "detail": "WHY THIS EXISTS.\n\nThree acceptance tests written in one batch could never pass, and each failed for a different\nreason that the author could have predicted:\n\n  WT-0110  needle \"properties\" with quotes, against /api/directory/CAP_MINT. input_schema is a JSON\n           STRING inside the response, so the raw body carries it escaped and the literal never\n           appears. The work was correct; 831 of 1068 rows passed the coverage test beside it.\n  WT-0111  matched trigger='event' when the stored value is 'event:NAME'.\n  WT-0114  called /api/dispatch?invoke=NOW. The acceptance runner holds no credentials, so it got\n           401. Every ?invoke= URL needs a share token, and a token must never be written into a\n           task object.\n\nWF-0001 is the same class, already in the record: a contains test matched the whole HTTP response,\nso a needle appearing in the shared stylesheet failed every article page regardless of the article.\n\nTHE INVARIANT THAT SHOULD HAVE PREVENTED IT.\n\nAn acceptance test is executed by unauthenticated infrastructure. A test that the runner cannot\nreach is not a strict test — it is an unrunnable one, and it fails work that is correct. The runner\nalready refuses unknown test types on exactly this reasoning: \"a test the runner cannot execute is\nnot a test that passed.\" The same standard has to apply to a test whose URL the runner cannot open\nand to a needle that cannot appear.\n\nWHAT TO BUILD.\n\nValidate acceptance tests at CREATE time, in createTask, and refuse the task rather than accept one\nthat can never close:\n\n  1. For every test of type http_ok/contains/not_contains, fetch the url unauthenticated at create\n     time. A non-200 refuses the create and names the status. This is one request per test on a\n     route that already refuses unknown fields.\n  2. For contains/not_contains, run the needle against that fetched body immediately. If a contains\n     needle is already absent AND the task is being created as evidence of finished work, that is\n     allowed — but the response must report it, so the author sees the test is red before leaving.\n  3. For sql_count_at_least, prepare the statement against DB and refuse a syntax error. Do not run\n     the count; the number is expected to change.\n  4. Refuse any test whose url contains `share=`, `token=`, `key=` or `invoke=`. The first three\n     would put a credential in the canonical object; the fourth cannot work unauthenticated.\n\nWHY AT CREATE AND NOT AT SUBMIT.\n\nAt submit, the author has already done the work and the refusal reads as a rejection of the work.\nAt create, it reads as what it is: this test cannot measure anything. That is the difference\nbetween a gate that teaches and a gate that punishes.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "FILE_GET",
        "FILE_PUT",
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "work_object_public",
          "type": "http_ok",
          "url": "/api/work"
        },
        {
          "id": "bootstrap_public",
          "type": "http_ok",
          "url": "/api/work/bootstrap"
        },
        {
          "id": "no_unreachable_tests_remain",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM work_tasks WHERE state='open' AND acceptance NOT LIKE '%invoke=%'",
          "min": 1
        }
      ],
      "required_evidence": [
        "refusal_shape",
        "a_refused_example",
        "regression_test"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-06T08:50:24-07:00",
      "updated_at": "2026-09-06T08:50:24-07:00",
      "audit": "/api/work/task/WT-0124/audit",
      "submit_to": "/api/work/task/WT-0124/submit"
    },
    {
      "task_id": "WT-0125",
      "kind": "work",
      "objective": "A durable state handle (state://…) that a second model of a different vendor attaches to, so work survives switching between ChatGPT Web, Claude Web, Grok Web and API agents",
      "detail": "Successor of WT-0112. The durable object is state://<handle> (tables state_handles + state_entries): STATE_NEW creates it, every browser-model turn under it appends a bounded entry, STATE_RESOLVE returns the objective, open work and a bounded window of what happened. Proven live 2026-09-06: ChatGPT Web answered GATEWAY_LIVE_OK under a handle and Claude Web, handed only the handle, replied GATEWAY_LIVE_OK (receipt inv_mo6pgi8yxm). The old acceptance measured the CLI-agent sessions table, which is a different object.",
      "state": "superseded",
      "priority": 2,
      "revision": 6,
      "depends_on": [],
      "permitted_capabilities": [
        "STATE_NEW",
        "STATE_APPEND",
        "STATE_RESOLVE",
        "WEBMODEL_SEND",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "handles_exist",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM state_handles",
          "min": 3
        },
        {
          "id": "a_second_vendor_attached",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM state_entries WHERE kind=turn AND actor=claude-web",
          "min": 1
        },
        {
          "id": "first_vendor_recorded",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM state_entries WHERE kind=turn AND actor=chatgpt-web",
          "min": 1
        },
        {
          "id": "resolve_contract_public",
          "type": "http_ok",
          "url": "/api/dispatch?key=STATE_RESOLVE"
        }
      ],
      "required_evidence": [
        "handle",
        "chatgpt_receipt",
        "claude_receipt",
        "what_the_second_model_saw"
      ],
      "parent_task": null,
      "supersedes": "WT-0112",
      "failure": null,
      "failure_count": 1,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-06T11:52:22-07:00",
      "updated_at": "2026-09-06T11:55:17-07:00",
      "audit": "/api/work/task/WT-0125/audit",
      "submit_to": "/api/work/task/WT-0125/submit"
    },
    {
      "task_id": "WT-0127",
      "kind": "work",
      "objective": "A durable state handle (state://…) that a second model of a different vendor attaches to, so work survives switching between ChatGPT Web, Claude Web, Grok Web and API agents",
      "detail": "Successor of WT-0125 (whose acceptance SQL lost its string quotes in transit). The durable object is state://<handle> (tables state_handles + state_entries): STATE_NEW creates it, every browser-model turn under it appends a bounded entry, STATE_RESOLVE returns the objective, open work and a bounded window of what happened. Proven live 2026-09-06: ChatGPT Web answered GATEWAY_LIVE_OK under a handle and Claude Web, handed only the handle, replied GATEWAY_LIVE_OK (receipt inv_mo6pgi8yxm).",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "STATE_NEW",
        "STATE_APPEND",
        "STATE_RESOLVE",
        "WEBMODEL_SEND",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "handles_exist",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM state_handles",
          "min": 3
        },
        {
          "id": "a_second_vendor_attached",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM state_entries WHERE kind = 'turn' AND actor = 'claude-web'",
          "min": 1
        },
        {
          "id": "first_vendor_recorded",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM state_entries WHERE kind = 'turn' AND actor = 'chatgpt-web'",
          "min": 1
        },
        {
          "id": "resolve_contract_public",
          "type": "http_ok",
          "url": "/api/dispatch?key=STATE_RESOLVE"
        }
      ],
      "required_evidence": [
        "handle",
        "chatgpt_receipt",
        "claude_receipt",
        "what_the_second_model_saw"
      ],
      "parent_task": null,
      "supersedes": "WT-0125",
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 4,
        "tests_passed": 4,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "handles_exist",
            "ok": true,
            "detail": "count=7 (need 3)"
          },
          {
            "id": "a_second_vendor_attached",
            "ok": true,
            "detail": "count=3 (need 1)"
          },
          {
            "id": "first_vendor_recorded",
            "ok": true,
            "detail": "count=7 (need 1)"
          },
          {
            "id": "resolve_contract_public",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/dispatch?key=STATE_RESOLVE"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-06T11:55:23-07:00",
      "created_at": "2026-09-06T11:55:16-07:00",
      "updated_at": "2026-09-06T11:55:23-07:00",
      "audit": "/api/work/task/WT-0127/audit",
      "submit_to": "/api/work/task/WT-0127/submit"
    },
    {
      "task_id": "WT-0138",
      "kind": "work",
      "objective": "Resolve challenge chg_9097fb4792bc205f against claim clm_45e298d6c2191716 (CPC_DELTA_V1)",
      "detail": "Challenger evidence: June had a two-week partial month; the baseline window is not comparable to a full month. Bond 2500 cents. Resolve by re-running VERIFY_CLAIM and, if judgment is needed, a governed panel; append the resolution to the claim, never overwrite it.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "resolved",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM market_challenges WHERE id='chg_9097fb4792bc205f' AND state IN ('upheld','rejected')",
          "min": 1
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 1,
        "tests_passed": 1,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "resolved",
            "ok": true,
            "detail": "count=1 (need 1)"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-07T20:52:19-07:00",
      "created_at": "2026-09-07T19:19:16-07:00",
      "updated_at": "2026-09-07T20:52:19-07:00",
      "audit": "/api/work/task/WT-0138/audit",
      "submit_to": "/api/work/task/WT-0138/submit"
    },
    {
      "task_id": "WT-0140",
      "kind": "repair",
      "objective": "CLAIM_PANEL seals a verdict but the resolution never reaches market_challenges — make the seal write the row it claims to write, or refuse to seal",
      "detail": "Failure class: a governed step reports success for a write it did not make. Observed 2026-09-07 19:19:57: CLAIM_PANEL on chg_9097fb4792bc205f returned sealed=upheld, yet market_challenges stayed state=open, resolution=null until an owner-path CLAIM_RESOLVE at 20:50 (receipt inv_v1c56yolx7). Layer that permitted it: functions/_lib/market_gov.js claimPanel dispatches CLAIM_RESOLVE internally with actor owner:panel, but CLAIM_RESOLVE (functions/_lib/market.js ~line 570) is OWNER_ONLY via isOwnerCall(env), which reads the request trace context, not the actor string, so the internal call is refused and the panel returns ok with the refusal buried in resolution. Invariant that should have prevented it: a step that reports sealed must either see the row updated or return an error; the panel should check res.ok and surface PANEL_SEAL_NOT_PERSISTED. Repair: give the panel a lawful internal authority for the resolve write (or write the resolution directly in market_gov with the same audit row), and a regression test that seals a challenge on a scratch db and asserts market_challenges.state changed.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "sealed_challenges_are_resolved",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM market_challenges WHERE state IN ('upheld','rejected')",
          "min": 1
        }
      ],
      "required_evidence": [
        "regression_test",
        "ship_deployment"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-07T20:51:58-07:00",
      "updated_at": "2026-09-07T20:51:58-07:00",
      "audit": "/api/work/task/WT-0140/audit",
      "submit_to": "/api/work/task/WT-0140/submit"
    },
    {
      "task_id": "WT-0142",
      "kind": "work",
      "objective": "Publish the Personal Compute Fabric Stage A reconciliation and Stage B research as one article, with the dead-host claim corrected against the live directory",
      "detail": "Three sessions received the same spec on 2026-09-07 and died at their session limit. What exists: SPEC_PERSONAL_COMPUTE_FABRIC.md and SPEC_PERSONAL_COMPUTE_FABRIC_STAGE_A.md at the repo root (committed 3d039c057), and 129 KB of research in scratchpad /private/tmp/claude-501/-Users-the owner/2bec6f09-bb53-4204-954f-ed7231a48a2e/scratchpad/ (stageA_bridge_dispatch.md 39 KB, stageA_integrations.md 60 KB, stageB_messaging.md 31 KB). Correction the article must carry: the claim that all 85 Mac rows point at agent.cannibal.capital is false — live directory has 0 such rows and 95 enabled http rows on agent.miscsubjects.com; the subagent read the stale directory.snapshot.json. Findings that stand: webmodel worker launchd job never bootstrapped, Playwright MCP :8931 not listening, bridge.miscsubjects.com NXDOMAIN, Beeper Desktop not installed. Then task rows for the alpha in the spec order; no code before those rows exist.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "article_live",
          "type": "article_published",
          "slug": "personal-compute-fabric-stage-a"
        }
      ],
      "required_evidence": [
        "article_url",
        "correction_note"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 1,
        "tests_passed": 1,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "article_live",
            "ok": true,
            "detail": "status=published"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-08T00:13:15-07:00",
      "created_at": "2026-09-07T21:44:38-07:00",
      "updated_at": "2026-09-08T00:13:15-07:00",
      "audit": "/api/work/task/WT-0142/audit",
      "submit_to": "/api/work/task/WT-0142/submit"
    },
    {
      "task_id": "WT-0143",
      "kind": "repair",
      "objective": "A ship whose process dies must not leave the deploy lock to a dead pid: a new ship on the same host takes over a lock whose pid is gone",
      "detail": "2026-09-07 19:19 PDT: the growth-spine session hit its usage limit inside ship.mjs post-gates; the KV lock locks:deploy:loop-safe-miscsubjects stayed held by pid 72345 (dead) for its 30-minute TTL and KV_DEL is refused by the auto-mode classifier, so nothing governed could clear it. Failure class: a liveness token with no liveness check. Layer: scripts/ship.mjs acquireDeployLease records host and pid but never tests them. Invariant: a lock is valid only while its holder is alive on its host. Repair: on acquire, if the lock names this host and kill -0 <pid> fails, take it over and ledger a DEPLOY_LEASE takeover row; regression test from the exact lock JSON of 2026-09-07.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "takeover_receipt_shape",
          "type": "evidence_present",
          "field": "regression_test"
        }
      ],
      "required_evidence": [
        "regression_test",
        "ship_deployment"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-07T21:44:38-07:00",
      "updated_at": "2026-09-07T21:44:38-07:00",
      "audit": "/api/work/task/WT-0143/audit",
      "submit_to": "/api/work/task/WT-0143/submit"
    },
    {
      "task_id": "WT-0144",
      "kind": "work",
      "objective": "Loop subscriptions collector: the subscriptions table has 0 rows and no workflow fills it",
      "detail": "Found 2026-09-07 measuring the six Loop data holes (WT-0141). apps/workflows has BigCommerce, Klaviyo, Meta, Triple Whale and 2chat collectors and none for subscriptions; the only subscription signal is Klaviyo Recharge metrics (Started Subscription, Subscription Churned, Cancelled Subscription, Subscription At Risk, reactivated). Decide the source of truth (Recharge API if credentialed, else Klaviyo metric events), write the collector as a workflow in the same shape as the others (no self-continuation), and land rows with a named source. Missing stays missing until then.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "rows",
          "type": "evidence_present",
          "field": "subscriptions_row_count"
        }
      ],
      "required_evidence": [
        "subscriptions_row_count",
        "source_decision"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-07T21:44:39-07:00",
      "updated_at": "2026-09-07T21:44:39-07:00",
      "audit": "/api/work/task/WT-0144/audit",
      "submit_to": "/api/work/task/WT-0144/submit"
    },
    {
      "task_id": "WT-0145",
      "kind": "work",
      "objective": "Device-Derived Capability Ledger: discover, model, verify and expose the latent capabilities of the operator's attached devices, extending the existing ledger, directory, OIP, authority and receipt layers (never a second copy of any of them).",
      "detail": "The device — not the vendor API — is the root capability source. Observe attached nodes (Mac, iPhone, browser profiles, AdsPower, VMs) append-only; infer candidate capabilities; verify which are callable; promote stable ones INTO the directory/OIP; keep every observation/action/verification as ledger lineage. Alpha shipped 2026-09-07 (child). Remaining sections tracked as child tasks: iPhone write executor (WDA/Appium), AdsPower node + local API, capability promotion into the directory, self-healing procedures, passive device-event ingest.",
      "state": "superseded",
      "priority": 2,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-07T21:52:14-07:00",
      "updated_at": "2026-09-07T23:36:54-07:00",
      "audit": "/api/work/task/WT-0145/audit",
      "submit_to": "/api/work/task/WT-0145/submit"
    },
    {
      "task_id": "WT-0150",
      "kind": "repair",
      "objective": "Loop Meta spend has no working projection: meta_api_daily (what the union sheet and lbl.fyi read) has no writer in the platform, and the insights backfill transform writes nothing into ad_daily_metrics",
      "detail": "Measured 2026-09-07 22:25 PDT in loop-data-platform D1. meta_api_daily ends 2026-07-16 for act_837019435833638 and no code in apps/ or packages/ writes it (only migrations 0039/0042 and the viewer read it); it was filled by a one-off pull. The platform's meta/insights_backfill (loop-meta-insights-backfill) with date_preset last_90d ran to success (sync run seen=861 rows, 6 pages, instance ada08a26-fbcc-4517-ac7e-b3c556cb1c3c) and enqueued transform.meta.insights_page messages, yet ad_daily_metrics holds 0 rows for any account and dlq_events is empty; the whole-history preset errored at Meta (HTTP 500 page 0, instance c7a1b18a). Failure class: a collector whose projection is dead or missing, reported as success by the sync counter. Layer: apps/queue-consumer transformMetaInsightsPage and the absent meta_api_daily writer. Invariant: every collector run must be measured on its target table, never on records_seen. Repair: find why transformMetaInsightsPage lands nothing (deployed consumer version vs source, R2 envelope shape, account_id numeric vs act_ prefix), write meta_api_daily from ad_daily_metrics or point the viewer and the union sheet at ad_daily_metrics, and add a post-run check that compares MAX(date) on the target table before and after. Interim truth for Loop Meta spend Jun 9 to Aug 7 2026 lives in the miscsubjects growth spine (/api/growth/metrics/account/<id>), imported 2026-09-07 with receipts.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "target_table_advances",
          "type": "evidence_present",
          "field": "meta_target_table_max_date"
        }
      ],
      "required_evidence": [
        "meta_target_table_max_date",
        "root_cause"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-07T22:17:44-07:00",
      "updated_at": "2026-09-07T22:17:44-07:00",
      "audit": "/api/work/task/WT-0150/audit",
      "submit_to": "/api/work/task/WT-0150/submit"
    },
    {
      "task_id": "WT-0153",
      "kind": "work",
      "objective": "Device-Derived Capability Ledger: discover, model, verify and expose the latent capabilities of the operator's attached devices, extending the existing ledger, directory, OIP, authority and receipt layers (never a second copy of any of them)",
      "detail": "Re-issue of WT-0145 with tests. The device — not the vendor API — is the root capability source. Observe attached nodes (Mac, iPhone, browser profiles, AdsPower, VMs) append-only; infer candidate capabilities; verify which are callable; promote stable ones INTO the directory/OIP; keep every observation/action/verification as ledger lineage. Alpha shipped 2026-09-07 (WT-0146). Children: iPhone write executor, AdsPower nodes, promotion. Baseline at re-issue: 302 observations over physical-mac, iphone, browser-profile, adspower-profile; 50 capabilities, 10 verified; 2 DCAP_ directory rows.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "four_node_kinds_observed",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(DISTINCT node_kind) FROM device_observations",
          "min": 4
        },
        {
          "id": "verified_capabilities",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM discovered_capabilities WHERE verified=1",
          "min": 15
        },
        {
          "id": "stable_promoted_to_directory",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM directory WHERE key LIKE 'DCAP_%' AND enabled=1",
          "min": 5
        },
        {
          "id": "ledger_page",
          "type": "http_ok",
          "url": "/device-capability-ledger"
        }
      ],
      "required_evidence": [
        "census_receipt",
        "projection_url"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 4,
        "tests_passed": 4,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "four_node_kinds_observed",
            "ok": true,
            "detail": "count=4 (need 4)"
          },
          {
            "id": "verified_capabilities",
            "ok": true,
            "detail": "count=40 (need 15)"
          },
          {
            "id": "stable_promoted_to_directory",
            "ok": true,
            "detail": "count=5 (need 5)"
          },
          {
            "id": "ledger_page",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/device-capability-ledger"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T05:39:57-07:00",
      "created_at": "2026-09-07T23:36:53-07:00",
      "updated_at": "2026-09-11T05:39:57-07:00",
      "audit": "/api/work/task/WT-0153/audit",
      "submit_to": "/api/work/task/WT-0153/submit"
    },
    {
      "task_id": "WT-0154",
      "kind": "work",
      "objective": "iPhone write executor: stand up WebDriverAgent/Appium so candidate message.send / media.play / order.read capabilities behind authenticated iPhone apps become testable and promotable",
      "detail": "Re-issue of WT-0147 with tests. 35 candidate WDA capabilities are inferred but availability=needs_permission. This wires the executor and moves the verified ones to tested→verified with receipts.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "iphone_write_verified",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM discovered_capabilities WHERE node_id LIKE 'iphone%' AND direction='write' AND verified=1",
          "min": 3
        },
        {
          "id": "wda_executor_named",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM discovered_capabilities WHERE executor='wda' AND lifecycle IN ('tested','verified','stable')",
          "min": 3
        }
      ],
      "required_evidence": [
        "verify_receipts"
      ],
      "parent_task": "WT-0153",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-07T23:36:55-07:00",
      "updated_at": "2026-09-07T23:36:55-07:00",
      "audit": "/api/work/task/WT-0154/audit",
      "submit_to": "/api/work/task/WT-0154/submit"
    },
    {
      "task_id": "WT-0155",
      "kind": "work",
      "objective": "AdsPower node registration: enable the AdsPower Local API and register each browser profile (cwd_global/chrome_*) as an authenticated execution node; fix scripts/device-census.mjs to read cwd_global",
      "detail": "Re-issue of WT-0148 with tests. Local API returned 9110 (no local API permission) and the collector looked in the wrong dir, so AdsPower nodes were not captured in the alpha.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "adspower_profiles_observed",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(DISTINCT node_id) FROM device_observations WHERE node_kind='adspower-profile'",
          "min": 2
        },
        {
          "id": "adspower_capability_ready",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM discovered_capabilities WHERE executor='adspower-api' AND availability='ready'",
          "min": 1
        }
      ],
      "required_evidence": [
        "local_api_receipt"
      ],
      "parent_task": "WT-0153",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-07T23:36:56-07:00",
      "updated_at": "2026-09-07T23:36:56-07:00",
      "audit": "/api/work/task/WT-0155/audit",
      "submit_to": "/api/work/task/WT-0155/submit"
    },
    {
      "task_id": "WT-0156",
      "kind": "work",
      "objective": "Capability promotion: a discovered_capability that reaches 'stable' auto-projects into the directory as a dispatchable OIP row, so verified device capabilities become callable through the existing six exposure methods",
      "detail": "Re-issue of WT-0149 with tests. Closes the on-ramp: verified→stable→directory row, no second registry.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "stable_capabilities",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM discovered_capabilities WHERE lifecycle='stable'",
          "min": 3
        },
        {
          "id": "projected_rows",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM directory WHERE key LIKE 'DCAP_%' AND enabled=1",
          "min": 3
        }
      ],
      "required_evidence": [
        "promotion_receipts"
      ],
      "parent_task": "WT-0153",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "stable_capabilities",
            "ok": true,
            "detail": "count=6 (need 3)"
          },
          {
            "id": "projected_rows",
            "ok": true,
            "detail": "count=5 (need 3)"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T05:41:30-07:00",
      "created_at": "2026-09-07T23:36:58-07:00",
      "updated_at": "2026-09-11T05:41:30-07:00",
      "audit": "/api/work/task/WT-0156/audit",
      "submit_to": "/api/work/task/WT-0156/submit"
    },
    {
      "task_id": "WT-0163",
      "kind": "work",
      "objective": "Extend work_tasks with pre-resolved scope and budget (paths, directory keys, base commit, runnable acceptance command, max_tool_calls, max_minutes, problem_id, role_graph_json, output_contracts_json) and make misc lease return the task with its contracts so a leased turn starts at the edit.",
      "detail": "Measured: median 4 and p90 29 tool calls before first edit; 42% of turns re-fetch credentials; 30% poll; 30% git-verify. Target on leased turns: median calls before first edit <= 2. A discovered dependency may extend paths with a reason recorded on the task (Codex). Lease response embeds the row contracts for the permitted capabilities.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_EXEC",
        "D1_QUERY",
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "DEPLOY_LEASE"
      ],
      "acceptance_tests": [
        {
          "type": "sql_count_at_least",
          "sql": "select count(*) n from pragma_table_info('work_tasks') where name in ('problem_id','scope_json','budget_json','role_graph_json','output_contracts_json')",
          "min": 5
        },
        {
          "type": "evidence_present",
          "field": "leased_turn_first_edit_call_index"
        }
      ],
      "required_evidence": [
        "leased_turn_first_edit_call_index",
        "lease_response_sample"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-08T04:54:45-07:00",
      "updated_at": "2026-09-08T04:54:45-07:00",
      "audit": "/api/work/task/WT-0163/audit",
      "submit_to": "/api/work/task/WT-0163/submit"
    },
    {
      "task_id": "WT-0164",
      "kind": "work",
      "objective": "Add the problems layer and run lineage: tables problems, problem_sources, work_runs; nullable problem_id, task_id, run_id, session_manifest_hash on agent_turns; every invocation path records task_id and run_id.",
      "detail": "Orchestration spec data changes 1-6. Object model: Goal or Problem -> work packet (work_tasks) -> Run (one bounded attempt by one executor). Turns are evidence attached to runs, never the thing the owner browses. state_handle becomes a handoff reference inside a run.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_EXEC",
        "D1_QUERY",
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "DEPLOY_LEASE"
      ],
      "acceptance_tests": [
        {
          "type": "sql_count_at_least",
          "sql": "select count(*) n from pragma_table_info('agent_turns') where name in ('problem_id','task_id','run_id','session_manifest_hash')",
          "min": 4
        },
        {
          "type": "sql_count_at_least",
          "sql": "select count(*) n from sqlite_master where type='table' and name in ('problems','problem_sources','work_runs')",
          "min": 3
        }
      ],
      "required_evidence": [
        "migration_commit"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-08T04:54:46-07:00",
      "updated_at": "2026-09-08T04:54:46-07:00",
      "audit": "/api/work/task/WT-0164/audit",
      "submit_to": "/api/work/task/WT-0164/submit"
    },
    {
      "task_id": "WT-0165",
      "kind": "work",
      "objective": "Compile the last 2,000 human-prompted CLI turns into problems and work packets with a disposition recorded for every single turn (attached, grouped, superseded, informational, unresolved), reconcile against work_tasks, the legacy tasks table, live artifacts and receipts, and present only unresolved or contradictory clusters for owner review on a reconciliation screen. No external effect is re-run from a historical prompt.",
      "detail": "All five v2 specs. Measured inputs: 2,936 owner inputs, 513 exact duplicates broadcast to several agents, 14% genuine re-asks within 14 days, 10% explicit restatements, 9% status questions. Output is tens to hundreds of problems, never 2,000 tasks. Deterministic preprocessing (hashes, paths, URLs, task ids) then model extraction of desired states then server-side dedupe. Extend GOVERNOR_RUN to run incrementally on new turns afterwards.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [
        null,
        null
      ],
      "permitted_capabilities": [
        "D1_QUERY",
        "D1_EXEC",
        "AGENT_TURNS",
        "LEDGER_QUERY",
        "WORK_APPEND"
      ],
      "acceptance_tests": [
        {
          "type": "sql_count_at_least",
          "sql": "select count(*) n from problem_sources",
          "min": 2000
        },
        {
          "type": "sql_count_at_least",
          "sql": "select count(*) n from problems",
          "min": 20
        },
        {
          "type": "evidence_present",
          "field": "reconciliation_screen_url"
        },
        {
          "type": "evidence_present",
          "field": "disposition_totals_sum_to_2000"
        }
      ],
      "required_evidence": [
        "reconciliation_screen_url",
        "disposition_totals_sum_to_2000"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-08T04:54:47-07:00",
      "updated_at": "2026-09-08T04:54:47-07:00",
      "audit": "/api/work/task/WT-0165/audit",
      "submit_to": "/api/work/task/WT-0165/submit"
    },
    {
      "task_id": "WT-0166",
      "kind": "work",
      "objective": "Fold the legacy tasks table (6,795 rows, 2,427 cancelled) and builder_queue into work_tasks by supersession or projection, stop all new writes to the legacy queue, and make /admin/work the one Work surface with Inbox, Active, Blocked, Awaiting owner, Completed, Superseded.",
      "detail": "Three task systems today. Cancelled legacy rows are a warning, not import material (Grok). Legacy URLs stay as projections. Each problem row shows desired state, current state, next action, active worker, age, packet count, last artifact, blocker, acceptance progress, cost.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [
        null
      ],
      "permitted_capabilities": [
        "D1_QUERY",
        "D1_EXEC",
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "DEPLOY_LEASE"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "field": "legacy_write_block_trace"
        },
        {
          "type": "evidence_present",
          "field": "work_surface_screenshot"
        }
      ],
      "required_evidence": [
        "legacy_write_block_trace",
        "work_surface_screenshot"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-08T04:54:49-07:00",
      "updated_at": "2026-09-08T04:54:49-07:00",
      "audit": "/api/work/task/WT-0166/audit",
      "submit_to": "/api/work/task/WT-0166/submit"
    },
    {
      "task_id": "WT-0167",
      "kind": "work",
      "objective": "Create ARTICLE_PACK as a flow row: spec -> writer profile (constrained, not peptide-only) -> editor of a different model family -> writing-law gauntlet -> ARTICLE_PUT -> X composer reading the published artifact -> X_POST, with typed role contracts, server-side validators, and bounded repair runs that carry only the failed predicates.",
      "detail": "Coding agents authored prose directly 1,176 article calls and 409 X posts (Claude alone). Codex correction: WRITER_AGENT and EDITOR_AGENT are written for single-peptide articles, so generic profiles are new work, and a writer plus editor prompt does not make semantic obedience boolean; mechanical predicates are rejected deterministically, meaning and accuracy still need review evidence. Smallest useful role graph; extra stages must be justified by a failed gate. The coding agent writes the spec and invokes; it never writes the body.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [
        null,
        null
      ],
      "permitted_capabilities": [
        "DIR_PATCH",
        "FLOW_LEARN",
        "WRITER_AGENT",
        "EDITOR_AGENT",
        "ARTICLE_PUT",
        "X_POST",
        "WEB_COUNCIL",
        "CLAUDE_WEB",
        "CHATGPT_WEB"
      ],
      "acceptance_tests": [
        {
          "type": "sql_count_at_least",
          "sql": "select count(*) n from directory where key='ARTICLE_PACK' and IFNULL(enabled,1)=1",
          "min": 1
        },
        {
          "type": "evidence_present",
          "field": "demo_article_receipt_chain"
        },
        {
          "type": "evidence_present",
          "field": "coordinator_turn_zero_body_writes"
        }
      ],
      "required_evidence": [
        "demo_article_receipt_chain",
        "coordinator_turn_zero_body_writes"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-08T04:54:52-07:00",
      "updated_at": "2026-09-08T04:54:52-07:00",
      "audit": "/api/work/task/WT-0167/audit",
      "submit_to": "/api/work/task/WT-0167/submit"
    },
    {
      "task_id": "WT-0169",
      "kind": "work",
      "objective": "Add a watch rule barring CLI actors from direct ARTICLE_PUT and X_POST outside a pack, a custodial budget on creative tasks (at most 8 native read calls before the first specialist invoke), and a weekly rollup of custodial fraction, calls before first edit, polling share, credential-fetch commands, owner-asked-to-run events and turns per task on agent_turns.",
      "detail": "Grok Kernel section 8 and Claude v2 Part E. Today: custodial share ~60%, credential fetch 4,098 commands, polling in 30% of turns, 1,176 direct article calls, 12 access-denial claims and 112 offers instead of acting, ~50 turns per work task. Publish the rollup at a public JSON endpoint so the reconvene is a re-run.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [
        null
      ],
      "permitted_capabilities": [
        "WATCH_RULE_ADD",
        "D1_QUERY",
        "D1_EXEC",
        "AUTOMATE_ADD"
      ],
      "acceptance_tests": [
        {
          "type": "http_ok",
          "url": "/api/work/metrics"
        },
        {
          "type": "evidence_present",
          "field": "watch_rule_denial_trace"
        }
      ],
      "required_evidence": [
        "watch_rule_denial_trace",
        "first_weekly_rollup_url"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-08T04:54:56-07:00",
      "updated_at": "2026-09-08T04:54:56-07:00",
      "audit": "/api/work/task/WT-0169/audit",
      "submit_to": "/api/work/task/WT-0169/submit"
    },
    {
      "task_id": "WT-0171",
      "kind": "work",
      "objective": "Move sibling.cron heartbeat rows out of the log table (own table or 1-in-60 sampling) and publish one LEDGER view with columns ts, actor, key, ok, trace over capability_invocations, agent_turns and work_actions so no agent guesses column names again.",
      "detail": "Measured: sibling.cron is 43,294 of the log table rows in 30 days and the only key in the top 40; four ledger tables carry different column vocabularies; the events table named by BUILD_SPEC no longer exists. Four failed column-guess queries in one Claude turn on 2026-09-08 were the custodial tax live.",
      "state": "completed",
      "priority": 2,
      "revision": 9,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_EXEC",
        "D1_QUERY",
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "DEPLOY_LEASE"
      ],
      "acceptance_tests": [
        {
          "type": "sql_count_at_least",
          "sql": "select count(*) n from sqlite_master where type in ('view','table') and name='ledger_unified'",
          "min": 1
        },
        {
          "type": "evidence_present",
          "field": "log_top40_without_cron"
        }
      ],
      "required_evidence": [
        "log_top40_without_cron"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 1,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "sql_count_at_least",
            "ok": true,
            "detail": "count=1 (need 1)"
          },
          {
            "id": "evidence_present",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "log_top40_without_cron"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T07:03:38-07:00",
      "created_at": "2026-09-08T04:54:58-07:00",
      "updated_at": "2026-09-11T07:03:38-07:00",
      "audit": "/api/work/task/WT-0171/audit",
      "submit_to": "/api/work/task/WT-0171/submit"
    },
    {
      "task_id": "WT-0175",
      "kind": "work",
      "objective": "Name the canonical invocation manual in /llms.txt and /start beside the canonical token manual, so a cold model finds one how-to-call document, and make the manual regenerable from the recorded tests inside the repository.",
      "detail": "functions/llms.txt.js hard-codes CANONICAL TOKEN MANUAL -> /a/oip-tap-go. Add CANONICAL INVOCATION MANUAL -> /a/canonical-invocation-manual (markdown bundle URL beside it) and reference it from /start. Move render.py, manual.tmpl.md, publish.py and the test scripts from ~/Downloads/canonical-manual-tests into scripts/canonical-manual/ so the page can be regenerated on a schedule and a stale example fails a check.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "FILE_GET",
        "FILE_PUT",
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "DEPLOY_LEASE"
      ],
      "acceptance_tests": [
        {
          "type": "contains",
          "url": "/llms.txt",
          "needle": "canonical-invocation-manual",
          "scope": "raw"
        }
      ],
      "required_evidence": [
        "llms_txt_diff"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-08T06:28:50-07:00",
      "updated_at": "2026-09-08T06:28:50-07:00",
      "audit": "/api/work/task/WT-0175/audit",
      "submit_to": "/api/work/task/WT-0175/submit"
    },
    {
      "task_id": "WT-0179",
      "kind": "work",
      "objective": "Lane 4 of the connections layer: rebuild /admin/services on connections + provider_catalog + device census, with three views (Connected with identity and mechanism badges and aging state, Available with a per-auth-mode Connect button over 999+ providers, Devices with measured OS permission grants), and a public read-only twin at /connections.",
      "detail": "Design fixed in bridge/client-bridge/HANDOFF.md, Lane 4. No KV services_catalog, no services.txt. Every button calls /api/dispatch or /api/connect/*. A row unchecked for 7 days renders unknown. Verified in the owner's own Chrome; screenshot is evidence. _layout.js is protected: extend via the locked-path dance only if the nav entry changes.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [
        "WT-0176",
        "WT-0178"
      ],
      "permitted_capabilities": [
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "DEPLOY_LEASE",
        "D1_QUERY",
        "DIR_PATCH",
        "LOCAL_EXEC",
        "KV_PUT_JSON",
        "KV_GET_JSON"
      ],
      "acceptance_tests": [
        {
          "id": "public_twin",
          "type": "http_ok",
          "url": "/connections"
        },
        {
          "id": "twin_badges",
          "type": "contains",
          "url": "/connections",
          "needle": "identity",
          "scope": "raw"
        },
        {
          "id": "twin_ages",
          "type": "contains",
          "url": "/connections",
          "needle": "last checked",
          "scope": "raw"
        },
        {
          "id": "evidence",
          "type": "evidence_present",
          "field": "owner_chrome_screenshot_url"
        }
      ],
      "required_evidence": [
        "owner_chrome_screenshot_url",
        "connect_button_trace"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 4,
        "tests_passed": 4,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "public_twin",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/connections"
          },
          {
            "id": "twin_badges",
            "ok": true,
            "detail": "contains \"identity\" in https://miscsubjects.com/connections (scope=raw) → true"
          },
          {
            "id": "twin_ages",
            "ok": true,
            "detail": "contains \"last checked\" in https://miscsubjects.com/connections (scope=raw) → true"
          },
          {
            "id": "evidence",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "owner_chrome_screenshot_url"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-10T23:31:37-07:00",
      "created_at": "2026-09-10T22:12:11-07:00",
      "updated_at": "2026-09-10T23:31:37-07:00",
      "audit": "/api/work/task/WT-0179/audit",
      "submit_to": "/api/work/task/WT-0179/submit"
    },
    {
      "task_id": "WT-0181",
      "kind": "work",
      "objective": "Lane 6 of the connections layer: named operations per connected OAuth service, mined from Activepieces community pieces (MIT outside packages/ee): Slack send/search/thread/upload/channels, Google rows for the second account, Reddit OAuth2 API replacing the two broken scrape rows, Microsoft Graph mail and Teams; one <SERVICE>_RAW authenticated passthrough per connection; every row with connection_id, auth=oauth2:<id>, examples set, tested green.",
      "detail": "Design fixed in bridge/client-bridge/HANDOFF.md, Lane 6. Not 760 apps up front: mine per connected service. Each row's test must run, not abstain, so examples is mandatory.",
      "state": "open",
      "priority": 2,
      "revision": 3,
      "depends_on": [
        "WT-0177"
      ],
      "permitted_capabilities": [
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "DEPLOY_LEASE",
        "D1_QUERY",
        "DIR_PATCH",
        "LOCAL_EXEC",
        "KV_PUT_JSON",
        "KV_GET_JSON"
      ],
      "acceptance_tests": [
        {
          "id": "oauth_rows",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM directory WHERE auth LIKE 'oauth2:%' AND enabled=1",
          "min": 10
        },
        {
          "id": "oauth_rows_green",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM directory WHERE auth LIKE 'oauth2:%' AND test_state LIKE '%works%'",
          "min": 8
        },
        {
          "id": "raw_rows",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM directory WHERE key LIKE '%\\_RAW' ESCAPE '\\' AND auth LIKE 'oauth2:%'",
          "min": 2
        },
        {
          "id": "reddit_fixed",
          "type": "contains",
          "url": "/api/directory/REDDIT_SEARCH",
          "needle": "works",
          "scope": "raw"
        }
      ],
      "required_evidence": [
        "rows_added",
        "test_receipts"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-10T22:12:15-07:00",
      "updated_at": "2026-09-11T06:35:50.705Z",
      "audit": "/api/work/task/WT-0181/audit",
      "submit_to": "/api/work/task/WT-0181/submit"
    },
    {
      "task_id": "WT-0199",
      "kind": "work",
      "objective": "GRAMMAR STEP 4b: misc_code runs under a per-run child token over /api/resolve, not the master key",
      "detail": "Blocked on the resolver being live and step 4a. Today misc_code (workers/mcp-server) calls /api/dispatch with TERMINAL_KEY.\n\nOrder and gates: docs/superpowers/specs/2026-09-11-unified-grammar-v5.md §6 and the owner's six steps (WT-0188). Every code step through scripts/ship.mjs under a coding-law lease.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live_check",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live_check",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T21:10:08-07:00",
      "created_at": "2026-09-11T15:47:11-07:00",
      "updated_at": "2026-09-11T21:10:08-07:00",
      "audit": "/api/work/task/WT-0199/audit",
      "submit_to": "/api/work/task/WT-0199/submit"
    },
    {
      "task_id": "WT-0200",
      "kind": "work",
      "objective": "GRAMMAR STEP 5: arg1..argN repair (107 rows), verb-split public names (A5.2, fifty curated), read or drop write-only columns, SDK types never any",
      "detail": "Proposal at scratchpad arg_repair_proposal.json: 107 rows whose # ARGS line yields human names; apply via PATCH /api/directory/<key> {input_schema} (versioned). 66 rows unrepairable without curation (STRIPE 31, MAC 10). grammar.js synthesizeSchema must also split on the · separator (6 Google rows).\n\nOrder and gates: docs/superpowers/specs/2026-09-11-unified-grammar-v5.md §6 and the owner's six steps (WT-0188). Every code step through scripts/ship.mjs under a coding-law lease.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live_check",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live_check",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T20:22:09-07:00",
      "created_at": "2026-09-11T15:47:11-07:00",
      "updated_at": "2026-09-11T20:22:09-07:00",
      "audit": "/api/work/task/WT-0200/audit",
      "submit_to": "/api/work/task/WT-0200/submit"
    },
    {
      "task_id": "WT-0201",
      "kind": "work",
      "objective": "GRAMMAR STEP 6: v4 §4 additions then flow predicates",
      "detail": "subject_links, work_tasks.state_json, invocations.state, subscriptions, provider-object rows for Stripe + GitHub (then PagerDuty or Plaid); flow vocabulary as text over existing engines per WT-0192.\n\nOrder and gates: docs/superpowers/specs/2026-09-11-unified-grammar-v5.md §6 and the owner's six steps (WT-0188). Every code step through scripts/ship.mjs under a coding-law lease.",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live_check",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live_check",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T21:44:07-07:00",
      "created_at": "2026-09-11T15:47:12-07:00",
      "updated_at": "2026-09-11T21:44:07-07:00",
      "audit": "/api/work/task/WT-0201/audit",
      "submit_to": "/api/work/task/WT-0201/submit"
    },
    {
      "task_id": "WT-0214",
      "kind": "work",
      "objective": "CELLS LAW: watch_rules needs a governed toggle verb — WATCH_TOGGLE <id>|0|1 through dispatch, same receipt discipline as AUTOMATE_TOGGLE; the switchboard refuses watch flips with verb_owed until this lands (handoff-kimi §3.1, owner: Claude)",
      "detail": "Filed by kimi:daimon-484146a2 during WT-0209 gate 1.",
      "state": "superseded",
      "priority": 2,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-11T18:24:14-07:00",
      "updated_at": "2026-09-11T18:49:45-07:00",
      "audit": "/api/work/task/WT-0214/audit",
      "submit_to": "/api/work/task/WT-0214/submit"
    },
    {
      "task_id": "WT-0219",
      "kind": "work",
      "objective": "CELLS LAW (supersedes WT-0218, which had no acceptance test): the default model is a cell. functions/_lib/invoke_json.js reads settings.model_default (KV mirror first, then the settings table) before env.AIG_DEFAULT_MODEL and the code constant, so the default model is a knob on the switchboard.",
      "detail": "Filed by Grok's knob census as WT-0218 at 20:30 PT without tests; every deploy failed WORK_ACCEPTANCE_LAW on it. Acceptance: GET /api/cells/settings shows model_default with its provenance; POST /api/cells/settings/model_default changes the model the next default call uses (evidence: two INVOKE_JSON-lane calls naming different models after the flip).",
      "state": "completed",
      "priority": 2,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": "WT-0218",
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-11T21:18:29-07:00",
      "created_at": "2026-09-11T20:46:55-07:00",
      "updated_at": "2026-09-11T21:18:29-07:00",
      "audit": "/api/work/task/WT-0219/audit",
      "submit_to": "/api/work/task/WT-0219/submit"
    },
    {
      "task_id": "WT-0223",
      "kind": "work",
      "objective": "CONSOLE E3 (Claude): /api/console/agents + Agents tab",
      "detail": "Assigned: Claude. Spec: ~/Downloads/CONSOLE-UNIFIED-SPEC.md §8 E3.\n\n/api/console/agents + Agents tab: every CLI's live sessions across machines within 30 s of a turn, pivot between sessions, send into a running session by native id, AGENT_BRIDGE messages shown as turns in both threads, TEAM_RUN/WEB_COUNCIL rounds as turn cards\n\nEvidence: the commit hash, a verification a person can repeat on the phone (URL + what to tap + what appears), and the critic turn id from E13. UI for a new tab lands in its own file public/console/<tab>.js; public/console.html is edited only under a coding-law lease.",
      "state": "superseded",
      "priority": 2,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "AGENT_LIST",
        "AGENT_TURNS",
        "AGENT_BRIDGE",
        "TEAM_RUN"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T14:12:44-07:00",
      "updated_at": "2026-09-12T14:30:15-07:00",
      "audit": "/api/work/task/WT-0223/audit",
      "submit_to": "/api/work/task/WT-0223/submit"
    },
    {
      "task_id": "WT-0224",
      "kind": "work",
      "objective": "CONSOLE E4 (Codex): Tasks board in the Console",
      "detail": "Assigned: Codex. Spec: ~/Downloads/CONSOLE-UNIFIED-SPEC.md §8 E4.\n\nTasks board in the Console: Open/Leased/In review/Done/Failed with agent chips; propose a task from the phone through POST /api/work/task; assign = lease to a named CLI (AGENT_SPAWN_CLI with the task id and permitted capabilities); per-task thread (agent_threads); review evidence and accept or fail with a failure object\n\nEvidence: the commit hash, a verification a person can repeat on the phone (URL + what to tap + what appears), and the critic turn id from E13. UI for a new tab lands in its own file public/console/<tab>.js; public/console.html is edited only under a coding-law lease.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "AGENT_SPAWN_CLI",
        "TASK_THREAD",
        "WORK_APPEND"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T14:12:45-07:00",
      "updated_at": "2026-09-12T14:12:45-07:00",
      "audit": "/api/work/task/WT-0224/audit",
      "submit_to": "/api/work/task/WT-0224/submit"
    },
    {
      "task_id": "WT-0239",
      "kind": "work",
      "objective": "CONSOLE E3 (Claude, corrected): /api/console/agents + Agents tab over agent_turns, cli_sessions, SESSION_*, WORK_APPEND, CLI_GROUP and AGENT_BRIDGE — no agent_threads table; prove or refute that AGENT_BRIDGE delivers into a running CLI and record which",
      "detail": "Replaces WT-0223. Lane A (API) with Lane B (UI).",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "AGENT_LIST",
        "AGENT_TURNS",
        "AGENT_BRIDGE",
        "TEAM_RUN",
        "SESSION_GET"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T14:30:13-07:00",
      "updated_at": "2026-09-12T14:30:13-07:00",
      "audit": "/api/work/task/WT-0239/audit",
      "submit_to": "/api/work/task/WT-0239/submit"
    },
    {
      "task_id": "WT-0242",
      "kind": "work",
      "objective": "CONSOLE LANE C: the chiropractor leads the Loop team works — lead type loop-chiropractor-leads over iMessage and email, with view / edit draft / send through approval / track status working for a member whose permission level is team",
      "detail": "The owner's words, and the most concrete thing he asked for: \"Send the Loop team the ability to log into this app and view all their data and be able to iMessage or email the chiropractor leads: both view the leads, edit the messages, send them out, track them.\" His word is chiropractor. This was missing from WT-0236 entirely, and LOOP-TEAM-TENANCY-SPEC.md section 5 says the lead type is loop-peptide-leads, which is not what he said; the Loop team's lead type is loop-chiropractor-leads and the peptide source is a different thing. Lane C half: the lead type row, the two channels, the draft edit, and the approval card working for an actor whose permission level is team rather than developer. The one approval object by draft hash that LEADS_SEND already demands is the only approval; editing a draft invalidates the approval, and a send is refused unless the approval matches the payload being sent. Suppression is enforced at send. iMessage is owner-comms-only for cold outreach today (CONSOLE-UNIFIED-SPEC-v3 section 1.4 says the adapter refuses it for leads) — so either the adapter's rule changes deliberately and the change is recorded, or the team's iMessage sending is warm-reply only and the app says which. Do not quietly ship a button that cannot send. Pairs with Lane E's WT-0240 tenancy; the tenant is loop.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "lead_type",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "team_actor",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "approval_binds_hash",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "channel_truth",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [],
      "parent_task": "WT-0236",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T17:07:27-07:00",
      "updated_at": "2026-09-12T17:07:27-07:00",
      "audit": "/api/work/task/WT-0242/audit",
      "submit_to": "/api/work/task/WT-0242/submit"
    },
    {
      "task_id": "WT-0243",
      "kind": "work",
      "objective": "CONSOLE LANE E: tenant loop carries the chiropractor leads and a team member sees only them — loop-chiropractor-leads synced into the lead_types pipeline with tenant_id=loop, and a team-level member proven on a second Access identity",
      "detail": "The owner's words: \"Send the Loop team the ability to log into this app and view all their data and be able to iMessage or email the chiropractor leads: both view the leads, edit the messages, send them out, track them,\" plus orders, customers and metrics viewable and queryable, the team on limited permission scopes, built so other teams clone onto it. His word is chiropractor. LOOP-TEAM-TENANCY-SPEC.md section 5 names the Loop lead flow loop-peptide-leads; for the Loop team's own leads the type is loop-chiropractor-leads. Lane E half: the tenant loop includes that lead type, the leads carry tenant_id=loop, and a member at level team sees Orders, Customers, Metrics, Leads and Ask for Loop only — with the directory, ledger, agents, keys and spend absent from their app, not hidden by CSS. A second Access identity that is not a member gets 404, not 403: existence is not disclosed. No credential appears in any response, log or ledger preview. Pairs with Lane C's half of the same sentence.",
      "state": "completed",
      "priority": 2,
      "revision": 10,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "lead_type_tenant",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "team_scope_absent",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "nonmember_404",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "no_credential_leak",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [],
      "parent_task": "WT-0240",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "lead_type_tenant",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          },
          {
            "id": "team_scope_absent",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          },
          {
            "id": "nonmember_404",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          },
          {
            "id": "no_credential_leak",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          },
          {
            "id": "critic",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "critic_turn"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-12T18:12:01-07:00",
      "created_at": "2026-09-12T17:07:49-07:00",
      "updated_at": "2026-09-12T18:12:01-07:00",
      "audit": "/api/work/task/WT-0243/audit",
      "submit_to": "/api/work/task/WT-0243/submit"
    },
    {
      "task_id": "WT-0249",
      "kind": "work",
      "objective": "Resolve challenge chg_fdd9f727f981c4b6 against claim clm_2ca44115cde0d30d (VENUE_V1)",
      "detail": "Challenger evidence: owner statement, 12 Sep 2026. Bond 500 cents. Resolve by re-running VERIFY_CLAIM and, if judgment is needed, a governed panel; append the resolution to the claim, never overwrite it.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "resolved",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM market_challenges WHERE id='chg_fdd9f727f981c4b6' AND state IN ('upheld','rejected')",
          "min": 1
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T17:50:57-07:00",
      "updated_at": "2026-09-12T17:50:57-07:00",
      "audit": "/api/work/task/WT-0249/audit",
      "submit_to": "/api/work/task/WT-0249/submit"
    },
    {
      "task_id": "WT-0251",
      "kind": "work",
      "objective": "Resolve challenge chg_0dc36d18c506b544 against claim clm_44c48ee34da235bc (VENUE_V1)",
      "detail": "Challenger evidence: the $2k/mo figure is the API plan for 20 campaigns as stated; a cheaper plan may exist behind login. Bond 500 cents. Resolve by re-running VERIFY_CLAIM and, if judgment is needed, a governed panel; append the resolution to the claim, never overwrite it.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "resolved",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM market_challenges WHERE id='chg_0dc36d18c506b544' AND state IN ('upheld','rejected')",
          "min": 1
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T18:12:44-07:00",
      "updated_at": "2026-09-12T18:12:44-07:00",
      "audit": "/api/work/task/WT-0251/audit",
      "submit_to": "/api/work/task/WT-0251/submit"
    },
    {
      "task_id": "WT-0252",
      "kind": "work",
      "objective": "Get permission from Meta to read their public ad library",
      "detail": "Anyone can look up the ads a company is running, but the tool that does it is turned off until Meta approves the account behind it.",
      "state": "superseded",
      "priority": 2,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13 01:39:34",
      "updated_at": "2026-09-12T19:38:38-07:00",
      "audit": "/api/work/task/WT-0252/audit",
      "submit_to": "/api/work/task/WT-0252/submit"
    },
    {
      "task_id": "WT-0253",
      "kind": "work",
      "objective": "Send the Loop team the chiropractor leads they asked to write",
      "detail": "",
      "state": "open",
      "priority": 2,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T01:52:30.942Z",
      "updated_at": "2026-09-13T01:53:09.195Z",
      "audit": "/api/work/task/WT-0253/audit",
      "submit_to": "/api/work/task/WT-0253/submit"
    },
    {
      "task_id": "WT-0254",
      "kind": "work",
      "objective": "Tick this work off so the checker can look at it",
      "detail": "",
      "state": "completed",
      "priority": 2,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": "2026-09-13T01:52:55.565Z",
      "created_at": "2026-09-13T01:52:50.416Z",
      "updated_at": "2026-09-13T01:52:55.565Z",
      "audit": "/api/work/task/WT-0254/audit",
      "submit_to": "/api/work/task/WT-0254/submit"
    },
    {
      "task_id": "WT-0255",
      "kind": "work",
      "objective": "Check the finished work",
      "detail": "Check of: Tick this work off so the checker can look at it",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": "WT-0254",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T01:52:56.540Z",
      "updated_at": "2026-09-13T01:52:56.540Z",
      "audit": "/api/work/task/WT-0255/audit",
      "submit_to": "/api/work/task/WT-0255/submit"
    },
    {
      "task_id": "WT-0258",
      "kind": "work",
      "objective": "Ask Meta for permission to read their public ad library",
      "detail": "",
      "state": "superseded",
      "priority": 2,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T02:27:57.745Z",
      "updated_at": "2026-09-12T19:38:40-07:00",
      "audit": "/api/work/task/WT-0258/audit",
      "submit_to": "/api/work/task/WT-0258/submit"
    },
    {
      "task_id": "WT-0260",
      "kind": "work",
      "objective": "Pull and rank the active peptide ads through the browser scraper and deliver agreement agr_4e1365febdf7c6a8 — Meta API approval is not required and not obtainable",
      "detail": "Replaces WT-0252 and WT-0258, both of which said 'get permission from Meta to read their public ad library'. The owner has stated he cannot obtain that approval. Graph ads_archive is locked (error 10) and META_AD_LIBRARY_SEARCH stays dead.\n\nThe working path already exists and is proven: directory row AD_LIBRARY_SCRAPE, implemented at scripts/ad-library-scrape.mjs, drives system Chrome against the public Ad Library transparency page. Empty body runs every query in scripts/ad-library-queries.json; '--q TERM' runs one. Output lands at ~/.miscsubjects/ad-library/YYYY-MM-DD/ads.jsonl with run records, raw blobs and a screenshot, and a pointer at latest.json. Proven live 2026-09-09: query tesofensine, blocked:false, 3 ads captured.\n\nWHAT THIS OWES: agreement agr_4e1365febdf7c6a8 (offer ofr_4e94dde9622a2a08, 1500 cents, authority person-approved) promises the 25 active peptide ads pulled and ranked by run length, with the search receipt and the ranked list as evidence.\n\nIF COVERAGE IS SHORT: the 2026-09-09 run returned 3 ads for one term, so the query set in scripts/ad-library-queries.json must be widened to the peptide terms the agreement names, and blocked runs routed through an AdsPower profile (ADSPOWER_OPEN returns a CDP endpoint for Playwright attach). Coverage is a scraper-tuning problem, never a permission problem.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "AD_LIBRARY_SCRAPE",
        "ADSPOWER_OPEN",
        "ADSPOWER_PROFILES",
        "LOCAL_EXEC",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "ranked",
          "field": "ranked_list"
        },
        {
          "type": "evidence_present",
          "id": "receipt",
          "field": "search_receipt"
        }
      ],
      "required_evidence": [
        "ranked_list",
        "search_receipt"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T19:38:04-07:00",
      "updated_at": "2026-09-12T19:38:04-07:00",
      "audit": "/api/work/task/WT-0260/audit",
      "submit_to": "/api/work/task/WT-0260/submit"
    },
    {
      "task_id": "WT-0261",
      "kind": "work",
      "objective": "Apply to Meta so ad searches stop coming back empty",
      "detail": "",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T03:01:31.182Z",
      "updated_at": "2026-09-13T03:01:31.182Z",
      "audit": "/api/work/task/WT-0261/audit",
      "submit_to": "/api/work/task/WT-0261/submit"
    },
    {
      "task_id": "WT-0262",
      "kind": "work",
      "objective": "Show what replaced a task, and let someone bring it back",
      "detail": "",
      "state": "open",
      "priority": 2,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T03:02:05.176Z",
      "updated_at": "2026-09-13T03:20:24.339Z",
      "audit": "/api/work/task/WT-0262/audit",
      "submit_to": "/api/work/task/WT-0262/submit"
    },
    {
      "task_id": "WT-0266",
      "kind": "work",
      "objective": "Show a person the first now-task on this list",
      "detail": "",
      "state": "open",
      "priority": 2,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T03:42:33.734Z",
      "updated_at": "2026-09-13T03:42:34.812Z",
      "audit": "/api/work/task/WT-0266/audit",
      "submit_to": "/api/work/task/WT-0266/submit"
    },
    {
      "task_id": "WT-0273",
      "kind": "work",
      "objective": "Every coding-agent spawn prompt and session start must print OBJECT_READ/OBJECT_MUTATE/STALE and never FILE_CLAIM DENIED or wait-on-branch",
      "detail": "cli_agent_spawn was updated. Remaining: Codex/Claude/Kimi session start hooks, Grok TUI rules, any leftover FILE_CLAIM DENIED copy in skills outside shared-write-law.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "OBJECT_READ",
        "OBJECT_MUTATE"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T21:07:12-07:00",
      "updated_at": "2026-09-12T21:07:12-07:00",
      "audit": "/api/work/task/WT-0273/audit",
      "submit_to": "/api/work/task/WT-0273/submit"
    },
    {
      "task_id": "WT-0274",
      "kind": "work",
      "objective": "Two model families reach their provider and are refused for credentials: Anthropic returns 401 authentication_error and Google AI Studio returns 400 'Please pass a valid API key'",
      "detail": "Surfaced by the gateway model-id fix (c08ead38b) on 2026-09-12. Before that fix every bare-id row died at the AI Gateway with error 2019 and no provider was ever reached, so these two were invisible.\n\nMEASURED AFTER THE FIX, live through POST /api/invoke:\n  CRITIC      -> xai/grok-4.3                     http 200, real answer\n  ASK_GPT     -> openai/gpt-4o                    http 200, 'OK'\n  ASK_CLAUDE  -> anthropic/claude-opus-4-8        http 401 upstream authentication_error\n  ASK_GEMINI  -> google-ai-studio/gemini-2.5-flash http 400 'Please pass a valid API key'\n\nRouting is correct in all four cases; the model id now carries the provider prefix the gateway requires. The two failures are BYOK credentials held at the Cloudflare AI Gateway, not code and not the directory row.\n\nThe vault holds XAI_API_KEY only (84 chars). ANTHROPIC_API_KEY, GEMINI_API_KEY, GOOGLE_AI_API_KEY and OPENAI_API_KEY are all empty locally, yet openai and xai answer 200 — so those two providers' keys live at the gateway and the anthropic and google-ai-studio slots are either unset or expired.\n\nThe Anthropic half is the owner's existing 9 PM calendar item (account out of credit, events created 2026-09-12 receipts inv_c46ik4z3iz and inv_vruimxxyfc). The Google AI Studio half needs a key from aistudio.google.com. Both are credentials only the owner can create; neither is mintable from this Mac.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "CF",
        "CF_EXEC",
        "KV_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "anthropic",
          "field": "anthropic_call"
        },
        {
          "type": "evidence_present",
          "id": "gemini",
          "field": "gemini_call"
        }
      ],
      "required_evidence": [
        "anthropic_call",
        "gemini_call"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T21:17:20-07:00",
      "updated_at": "2026-09-12T21:17:20-07:00",
      "audit": "/api/work/task/WT-0274/audit",
      "submit_to": "/api/work/task/WT-0274/submit"
    },
    {
      "task_id": "WT-0283",
      "kind": "work",
      "objective": "voxel-merge-planes returns ok:true but persists nothing because the saver is missing the CAS arg (GitHub 310).",
      "detail": "Open since 2026-08-08. Pass the CAS argument voxelSaveArticle expects. A merge must be readable after.",
      "state": "completed",
      "priority": 2,
      "revision": 7,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-12T21:57:37-07:00",
      "created_at": "2026-09-12T21:21:11-07:00",
      "updated_at": "2026-09-12T21:57:37-07:00",
      "audit": "/api/work/task/WT-0283/audit",
      "submit_to": "/api/work/task/WT-0283/submit"
    },
    {
      "task_id": "WT-0284",
      "kind": "work",
      "objective": "Article cold-render is 7-9 seconds of D1 work (GitHub 323). A first open of /a/* should not sit on that.",
      "detail": "Triplicate issues 296/314/323. Measure live render, cut D1 round-trips, gate a cold-render budget.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T21:21:13-07:00",
      "updated_at": "2026-09-12T21:21:13-07:00",
      "audit": "/api/work/task/WT-0284/audit",
      "submit_to": "/api/work/task/WT-0284/submit"
    },
    {
      "task_id": "WT-0286",
      "kind": "work",
      "objective": "D1 write-acks are missing on a write path (GitHub 327). A write that returns ok without an ack is a silent miss.",
      "detail": "GitHub issue 327. Find the write that skips the ack, make the ack the same path as the write, add a test from this miss.",
      "state": "completed",
      "priority": 2,
      "revision": 8,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-12T22:13:59-07:00",
      "created_at": "2026-09-12T21:21:36-07:00",
      "updated_at": "2026-09-12T22:13:59-07:00",
      "audit": "/api/work/task/WT-0286/audit",
      "submit_to": "/api/work/task/WT-0286/submit"
    },
    {
      "task_id": "WT-0287",
      "kind": "work",
      "objective": "Console: flows, rules, automations, webhooks, services, directory proof",
      "detail": "Owner 2026-09-13. Flows tab, Rules tab (WHEN/THEN, NL compose, test green), Automations tab, Webhooks tab tap-through to service object (Blooio first), Directory per-invocation raw payload proof. Spec: ~/twin/handoffs/CONSOLE-OUTSTANDING.md. Do not rebuild /admin/flows or /admin/automations; put them in the console sandwich. Model is a surface next to computer/vm/browser/phone.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "spec",
          "type": "evidence_present",
          "field": "verification"
        },
        {
          "id": "live",
          "type": "contains",
          "url": "https://miscsubjects.com/console",
          "needle": "Flows"
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T00:04:40-07:00",
      "updated_at": "2026-09-13T00:04:40-07:00",
      "audit": "/api/work/task/WT-0287/audit",
      "submit_to": "/api/work/task/WT-0287/submit"
    },
    {
      "task_id": "WT-0288",
      "kind": "work",
      "objective": "Console Flows tab lists Directory type=flow, construct, sort steps by computer/vm/browser/phone/model",
      "detail": "Port /admin/flows into the console sandwich. Active flows listed. New flow constructed there. Steps filterable by surface including model.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "verify",
          "type": "evidence_present",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": "WT-0287",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T00:05:07-07:00",
      "updated_at": "2026-09-13T00:05:07-07:00",
      "audit": "/api/work/task/WT-0288/audit",
      "submit_to": "/api/work/task/WT-0288/submit"
    },
    {
      "task_id": "WT-0289",
      "kind": "work",
      "objective": "Visual swappable blocks for a flow in the console composer",
      "detail": "Drag, reorder, swap a block. Same Directory row on save as FLOW_LEARN writes.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "verify",
          "type": "evidence_present",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": "WT-0287",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T00:05:33-07:00",
      "updated_at": "2026-09-13T00:05:33-07:00",
      "audit": "/api/work/task/WT-0289/audit",
      "submit_to": "/api/work/task/WT-0289/submit"
    },
    {
      "task_id": "WT-0290",
      "kind": "work",
      "objective": "Page Grok authors a flow and saves a Directory row",
      "detail": "Talk constructs the flow. Save is FLOW_LEARN or equivalent. Ledger receipt.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "verify",
          "type": "evidence_present",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": "WT-0287",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T00:05:35-07:00",
      "updated_at": "2026-09-13T00:05:35-07:00",
      "audit": "/api/work/task/WT-0290/audit",
      "submit_to": "/api/work/task/WT-0290/submit"
    },
    {
      "task_id": "WT-0291",
      "kind": "work",
      "objective": "Console Rules tab: WHEN/THEN, natural language compose, test turns green",
      "detail": "Not a flow. Own left-rail category. First rule exact: WHEN I send a text message via blooio to some number that starts with /grok then that message should route to [grok cli]. Green only if the test actually routed.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "verify",
          "type": "evidence_present",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": "WT-0287",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T00:05:37-07:00",
      "updated_at": "2026-09-13T00:05:37-07:00",
      "audit": "/api/work/task/WT-0291/audit",
      "submit_to": "/api/work/task/WT-0291/submit"
    },
    {
      "task_id": "WT-0292",
      "kind": "work",
      "objective": "Console Automations tab over the existing automations table",
      "detail": "Grok-app-like when/then. Clock or event. On/off/force off remain the three controls. Do not rebuild /admin/automations; surface it in console.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "verify",
          "type": "evidence_present",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": "WT-0287",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T00:05:38-07:00",
      "updated_at": "2026-09-13T00:05:38-07:00",
      "audit": "/api/work/task/WT-0292/audit",
      "submit_to": "/api/work/task/WT-0292/submit"
    },
    {
      "task_id": "WT-0293",
      "kind": "work",
      "objective": "Console Webhooks tab: list, add, remove, tap to the surface it lands on",
      "detail": "Blooio webhook tap goes to the sheet or surface where inbound lands.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "verify",
          "type": "evidence_present",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": "WT-0287",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T00:05:39-07:00",
      "updated_at": "2026-09-13T00:05:39-07:00",
      "audit": "/api/work/task/WT-0293/audit",
      "submit_to": "/api/work/task/WT-0293/submit"
    },
    {
      "task_id": "WT-0294",
      "kind": "work",
      "objective": "Blooio as a service object: docs, numbers, cost, invoices, ledger payloads, chats",
      "detail": "From the webhook/sheet, Blooio icon opens the object. Filter by number, search chats, contact cards.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "verify",
          "type": "evidence_present",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": "WT-0287",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T00:05:41-07:00",
      "updated_at": "2026-09-13T00:05:41-07:00",
      "audit": "/api/work/task/WT-0294/audit",
      "submit_to": "/api/work/task/WT-0294/submit"
    },
    {
      "task_id": "WT-0295",
      "kind": "work",
      "objective": "Lead and customer are kinds of contact; order hangs on customer",
      "detail": "Same person can be both. Tap customer order to see what they ordered. Not a third CRM.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "verify",
          "type": "evidence_present",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": "WT-0287",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T00:05:42-07:00",
      "updated_at": "2026-09-13T00:05:42-07:00",
      "audit": "/api/work/task/WT-0295/audit",
      "submit_to": "/api/work/task/WT-0295/submit"
    },
    {
      "task_id": "WT-0296",
      "kind": "work",
      "objective": "Directory row: fire each invocation type, green only on raw payload, keep sample, copy",
      "detail": "Example Gmailsend. HTTP 200 is not green. Payload preserved as sample on the row.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "verify",
          "type": "evidence_present",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": "WT-0287",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T00:05:44-07:00",
      "updated_at": "2026-09-13T00:05:44-07:00",
      "audit": "/api/work/task/WT-0296/audit",
      "submit_to": "/api/work/task/WT-0296/submit"
    },
    {
      "task_id": "WT-0297",
      "kind": "work",
      "objective": "Model in/out payloads on the event plane; model is a surface",
      "detail": "LLM calls recorded like every other invoke. Filterable with computer/vm/browser/phone.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "verify",
          "type": "evidence_present",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": "WT-0287",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T00:05:46-07:00",
      "updated_at": "2026-09-13T00:05:46-07:00",
      "audit": "/api/work/task/WT-0297/audit",
      "submit_to": "/api/work/task/WT-0297/submit"
    },
    {
      "task_id": "WT-0299",
      "kind": "work",
      "objective": "Every enabled capability row carries the five lines a model needs to choose it correctly",
      "detail": "Measured 2026-09-13: 1,437 enabled directory rows, 977 carry a '# WHAT:' line and 460 carry none at all. A row with no WHAT has no summary, so the MCP projection sends models a bare key and whatever prose happens to sit in content. That is why misc_find('purge cloudflare cache for a zone') ranked CF_GRAPHQL_ZONE_DETAILS first: it was matching noise, because 460 rows had nothing to match against.\n\nThe five lines, in the order the projection reads them: TITLE (a human name, not the SCREAMING_SNAKE key), WHAT (what it does), WHEN_TO_USE (the situation that selects it), RETURNS (what comes back - the line that decides whether a model calls it), NEVER (the adjacent case a sibling row owns). RETURNS and NEVER matter most and are the least present: 51 and 27 rows out of 1,437.\n\nThis is the parent. Two children split it by family because the two halves need different work: the CF_* rows were bulk-imported from Cloudflare's MCP servers and their text can be derived from the upstream schema; the rest are hand-written rows that need a human sentence each.\n\nDo not close this by deleting rows to make the count pass. The test counts documented rows, not the ratio.",
      "state": "superseded",
      "priority": 2,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "DIR_GET",
        "DIR_PATCH",
        "CF_MAIN_DOCS"
      ],
      "acceptance_tests": [
        {
          "type": "sql_count_at_least",
          "id": "every_enabled_row_has_a_what_line",
          "sql": "SELECT COUNT(*) FROM directory WHERE enabled=1 AND instr(COALESCE(content,''),'# WHAT:')>0",
          "min": 1437
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T21:34:47-07:00",
      "updated_at": "2026-09-13T21:40:36-07:00",
      "audit": "/api/work/task/WT-0299/audit",
      "submit_to": "/api/work/task/WT-0299/submit"
    },
    {
      "task_id": "WT-0302",
      "kind": "work",
      "objective": "No enabled capability row is offered to a model without documentation",
      "detail": "Measured 2026-09-13: 1,423 enabled directory rows, 460 of which carry no '# WHAT:' line at all. A row with no WHAT has no summary, so the projection hands models a bare key and whatever prose happens to sit in content. That is why misc_find('purge cloudflare cache for a zone') answered with zone details: it was ranking against 460 rows that had nothing to rank.\n\nThe five lines the projection reads, in order: TITLE (a human name, not the SCREAMING_SNAKE key), WHAT, WHEN_TO_USE, RETURNS (what comes back - the line that decides whether a model calls it at all), NEVER (the adjacent case a sibling row owns). RETURNS and NEVER matter most and are rarest: 51 and 27 rows.\n\nTwo children split the work by family. The CF_* rows were bulk-imported and their text can be derived from the upstream schema; the rest are hand-built and need a human sentence each.\n\nThe acceptance test counts rows that are MISSING the line and passes only at zero, so it cannot be satisfied by deleting rows to move a ratio, and it does not go stale when rows are added.",
      "state": "completed",
      "priority": 2,
      "revision": 4,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "DIR_GET"
      ],
      "acceptance_tests": [
        {
          "type": "sql_count_at_least",
          "id": "zero_enabled_rows_lack_a_what_line",
          "sql": "SELECT CASE WHEN (SELECT COUNT(*) FROM directory WHERE enabled=1 AND instr(COALESCE(content,''),'# WHAT:')=0)=0 THEN 1 ELSE 0 END",
          "min": 1
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 1,
        "tests_passed": 1,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "zero_enabled_rows_lack_a_what_line",
            "ok": true,
            "detail": "count=1 (need 1)"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-14T03:34:03-07:00",
      "created_at": "2026-09-13T21:40:03-07:00",
      "updated_at": "2026-09-14T03:34:03-07:00",
      "audit": "/api/work/task/WT-0302/audit",
      "submit_to": "/api/work/task/WT-0302/submit"
    },
    {
      "task_id": "WT-0307",
      "kind": "work",
      "objective": "W1.1 Envelope levels L0/L1/L2 at the dispatch edge",
      "detail": "Default L0 {ok, result, receipt_id, error?} <400 B; errors always teach-level; view=debug preserves today's envelope. Measured driver (WORLD-LIMITS §6): 85 B result in an 18,986 B envelope; 99.6% packaging. Offline law: local edit, local verify, owner deploys.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:44:45-07:00",
      "updated_at": "2026-09-14T02:44:45-07:00",
      "audit": "/api/work/task/WT-0307/audit",
      "submit_to": "/api/work/task/WT-0307/submit"
    },
    {
      "task_id": "WT-0308",
      "kind": "work",
      "objective": "W1.2 returns contracts backfill on every enabled directory row",
      "detail": "7 of 1,462 rows had returns contracts at measurement. Mechanism proven: the 7 use {object, fields[]} dotted paths. Deploy-gateable once backfilled. 1,423 enabled rows as of 2026-09-13.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:44:46-07:00",
      "updated_at": "2026-09-14T02:44:46-07:00",
      "audit": "/api/work/task/WT-0308/audit",
      "submit_to": "/api/work/task/WT-0308/submit"
    },
    {
      "task_id": "WT-0310",
      "kind": "work",
      "objective": "W1.5 Pinned default manifest compiled from one curated row/object",
      "detail": "Measured: openai.json default projection is rank-polluted (11 META_ADS_*, 0_CLAUDE_MD junk, zero operative tools); ?hot=all = 1,049,513 B / 1,363 tools / ~262k tokens. One curated row/object; all surfaces compile from it. The iOS tools field consumes exactly what the manifest projects.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:44:48-07:00",
      "updated_at": "2026-09-14T02:44:48-07:00",
      "audit": "/api/work/task/WT-0310/audit",
      "submit_to": "/api/work/task/WT-0310/submit"
    },
    {
      "task_id": "WT-0315",
      "kind": "work",
      "objective": "W2.2 Productionize the workflow pointer-rules skeleton",
      "detail": "Skeleton built and locally verified 2026-09-14 (commit 5d5b34e16, workers/pointer-workflow/): 3-step instance, steps pass R2 keys never payloads (1 MiB cap, trap #5), progress rows written to D1 from inside steps, waitForEvent approval gate, forced step-2 failure survived + retried + resumed. Remaining: owner deploy, production bindings, timeout path and >1 MiB step failure mode unverified.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:44:52-07:00",
      "updated_at": "2026-09-14T02:44:52-07:00",
      "audit": "/api/work/task/WT-0315/audit",
      "submit_to": "/api/work/task/WT-0315/submit"
    },
    {
      "task_id": "WT-0317",
      "kind": "work",
      "objective": "W2.5 Re-fire LOCAL_EXEC and verify it reaches the Mac",
      "detail": "mac_bridge.js consolidated 6 call sites onto one door; agent.cannibal.capital died 2026-07-28; BRIDGE_DEVICE_TOKEN replaced 2026-09-13; LOCAL_EXEC had silently fallen back to a Cloudflare sandbox (cwd /workspace). Code + secret live but never re-fired. Fire it once, record status + the actual cwd/hostname that answers. Verification only, no changes unless it still falls back.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "mac_reached",
          "field": "mac_reached"
        }
      ],
      "required_evidence": [
        "mac_reached"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:44:54-07:00",
      "updated_at": "2026-09-14T02:44:54-07:00",
      "audit": "/api/work/task/WT-0317/audit",
      "submit_to": "/api/work/task/WT-0317/submit"
    },
    {
      "task_id": "WT-0318",
      "kind": "work",
      "objective": "W3.1 Generic provider-object projection table",
      "detail": "Shape per Claude's projection-plane spec: {ref, provider, connection_id, type, external_id, version, provider_updated_at, observed_at, state(JSON), source{mode,event_id,receipt}, sync{cursor,last_reconciled_at,freshness}, deleted}. Small objects in D1 JSON; large -> R2 pointer+hash (inbound.js already does this). Directory = what can be done; projection = what exists — never merged.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:44:56-07:00",
      "updated_at": "2026-09-14T02:44:56-07:00",
      "audit": "/api/work/task/WT-0318/audit",
      "submit_to": "/api/work/task/WT-0318/submit"
    },
    {
      "task_id": "WT-0319",
      "kind": "work",
      "objective": "W3.2 Sync descriptor primitive",
      "detail": "Per provider+object_type: {sync:{mode, subscription, event, cursor_kind, delta, hydrate, reconcile}, projection:{fields[]}}. Four modes only: push / notify_pull / cursor / snapshot. The transcript's 'genuinely missing primitive'.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:44:56-07:00",
      "updated_at": "2026-09-14T02:44:56-07:00",
      "audit": "/api/work/task/WT-0319/audit",
      "submit_to": "/api/work/task/WT-0319/submit"
    },
    {
      "task_id": "WT-0324",
      "kind": "work",
      "objective": "W4.1 cf_ops catalog compile: 3,465 operations into one versioned table",
      "detail": "Measured: 3,465 operations, 2,165 paths (method+path is the callable unit) -> one versioned table {address, method, path, family, summary, params, returns, effect, tier, spec_hash} + nightly diff. Tier split measured: T1 operate 37 families/1,034 ops; T2 1,072; T3 catalog-only 1,359.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:45:00-07:00",
      "updated_at": "2026-09-14T02:45:00-07:00",
      "audit": "/api/work/task/WT-0324/audit",
      "submit_to": "/api/work/task/WT-0324/submit"
    },
    {
      "task_id": "WT-0327",
      "kind": "work",
      "objective": "W4.4 Non-CF doors by loop need: HubSpot CRM first (P0)",
      "detail": "Per door: one row + one connection + (W3.2) sync descriptor. CRM (HubSpot) P0 by the commercial loop; X, LinkedIn, Google Calendar (GAS grant already holds scope) after. Commerce door BLOCKED on owner question: is the store Shopify?",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:45:03-07:00",
      "updated_at": "2026-09-14T02:45:03-07:00",
      "audit": "/api/work/task/WT-0327/audit",
      "submit_to": "/api/work/task/WT-0327/submit"
    },
    {
      "task_id": "WT-0332",
      "kind": "work",
      "objective": "W6.1 Route provider traffic through AI Gateway",
      "detail": "Measured: ~$0.02/2 days logged = spend currently invisible. cache_ttl=0 on both gateways = caching off. Spend limits/routing/DLP exist, free, off.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:45:08-07:00",
      "updated_at": "2026-09-14T02:45:08-07:00",
      "audit": "/api/work/task/WT-0332/audit",
      "submit_to": "/api/work/task/WT-0332/submit"
    },
    {
      "task_id": "WT-0333",
      "kind": "work",
      "objective": "W6.2 Provider spend measurement",
      "detail": "The real number lives in provider bills; required before any routing decision (W6.3 classifier lane stays last).",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:45:09-07:00",
      "updated_at": "2026-09-14T02:45:09-07:00",
      "audit": "/api/work/task/WT-0333/audit",
      "submit_to": "/api/work/task/WT-0333/submit"
    },
    {
      "task_id": "WT-0338",
      "kind": "work",
      "objective": "Chain v3 seal: commit to the R2 object's own sha256 instead of a 500-character preview",
      "detail": "Child of WT-0305. Failure class: weakened_commitment_after_storage_migration. The layer that permitted it: /api/chain content_digest reads request_json when inline and falls back to request_preview otherwise, and the R2-first write path of 2026-09-14 made request_json NULL for new rows — so every row sealed after that commits to a 500-character preview, not the body. The invariant that should have prevented it: a content commitment must name the bytes it covers, and a storage migration must not silently change which bytes those are. Not repairable in place: the head published at /api/chain/head on 2026-09-14 (seq 2367, 4,853,315 events) committed to exactly the current expression, so changing it breaks the published head. The repair is a v3 seal that digests the object's own sha256 — already carried in the pointer key events/<id>.req.<sha256> — starting from a fresh checkpoint, with v1/v2 left intact and their limitation stated in /api/chain/_self. The statement carries a written `gate-allow: event-body-read` marker until then.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "sealed",
          "type": "evidence_present",
          "field": "v3_head"
        },
        {
          "id": "verifier",
          "type": "evidence_present",
          "field": "independent_recompute"
        }
      ],
      "required_evidence": [],
      "parent_task": "WT-0305",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T12:52:56-07:00",
      "updated_at": "2026-09-14T12:52:56-07:00",
      "audit": "/api/work/task/WT-0338/audit",
      "submit_to": "/api/work/task/WT-0338/submit"
    },
    {
      "task_id": "WT-0339",
      "kind": "work",
      "objective": "Owner-locked: apply the two prepared R2 body-read repairs that no agent commit may touch",
      "detail": "Child of WT-0305. functions/admin/ledger/index.js (PROTECTED_WIDGETS.md) and functions/_lib/fn_runners.js (PROTECTED_FEATURES.md) still read event body columns with no pointer, so the /admin/ledger turns view shows a 500-character preview where it means to show the body, and the EMAIL_INBOUND witness in fn_runners never matches an R2-backed body (it waits out its deadline and reports not_witnessed). Both repairs are written and tested in pattern against the same helper every other reader now uses, and saved as patches: ~/Downloads/admin-ledger-index-r2-body-read.patch and ~/Downloads/fn-runners-email-inbound-r2-witness.patch, each applying with `git apply`. The pre-commit hook refuses an agent commit touching either file and there is no approval token an agent may write; the widgets file additionally requires a commit message carrying #widgets-approved. scripts/check-event-body-reads.mjs prints both on every run so the debt cannot go quiet.",
      "state": "completed",
      "priority": 2,
      "revision": 4,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "applied",
          "type": "evidence_present",
          "field": "commit"
        },
        {
          "id": "live",
          "type": "evidence_present",
          "field": "verification"
        }
      ],
      "required_evidence": [],
      "parent_task": "WT-0305",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "applied",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-14T15:00:48-07:00",
      "created_at": "2026-09-14T12:53:08-07:00",
      "updated_at": "2026-09-14T15:00:48-07:00",
      "audit": "/api/work/task/WT-0339/audit",
      "submit_to": "/api/work/task/WT-0339/submit"
    },
    {
      "task_id": "WT-0350",
      "kind": "work",
      "objective": "Per-file diffs in the app, the way Claude Code shows a change: file by file, added and removed lines",
      "detail": "Owner order 2026-09-15. Any tool call or session turn that changed files shows those files, and opening one shows its diff.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "verification",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "screenshot",
          "field": "screenshot"
        }
      ],
      "required_evidence": [
        "verification",
        "screenshot"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-15T16:06:08-07:00",
      "updated_at": "2026-09-15T16:06:08-07:00",
      "audit": "/api/work/task/WT-0350/audit",
      "submit_to": "/api/work/task/WT-0350/submit"
    },
    {
      "task_id": "WT-0351",
      "kind": "work",
      "objective": "The model picker is a vertical list with logos, not a carousel: provider logos in the provider list, company logos beside every model inside Cloudflare Gateway and OpenRouter",
      "detail": "Owner order 2026-09-15, for both Chat and Code. Selecting happens down a list the thumb can read, not sideways.",
      "state": "completed",
      "priority": 2,
      "revision": 4,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "verification",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "screenshot",
          "field": "screenshot"
        }
      ],
      "required_evidence": [
        "verification",
        "screenshot"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "verification",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          },
          {
            "id": "screenshot",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "screenshot"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-17T00:20:32-07:00",
      "created_at": "2026-09-15T16:06:09-07:00",
      "updated_at": "2026-09-17T00:20:32-07:00",
      "audit": "/api/work/task/WT-0351/audit",
      "submit_to": "/api/work/task/WT-0351/submit"
    },
    {
      "task_id": "WT-0352",
      "kind": "work",
      "objective": "Every parameter a model exposes — reasoning level, temperature, the rest — is visible and selectable for every house, not only Grok",
      "detail": "Owner order 2026-09-15. The composer already offers sliders on the xAI house (\"Tap the sliders for every parameter its docs expose\"). The same must hold for Cloudflare Gateway, OpenRouter and the rest, per model, from that model's own documented surface.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "verification",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "screenshot",
          "field": "screenshot"
        }
      ],
      "required_evidence": [
        "verification",
        "screenshot"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-15T16:06:09-07:00",
      "updated_at": "2026-09-15T16:06:09-07:00",
      "audit": "/api/work/task/WT-0352/audit",
      "submit_to": "/api/work/task/WT-0352/submit"
    },
    {
      "task_id": "WT-0353",
      "kind": "work",
      "objective": "The Cloudflare skills are usable by the models in the app — Cloudflare Gateway and OpenRouter — not only by the CLIs on the Mac",
      "detail": "The 14 skills from github.com/cloudflare/skills are installed for Claude, Codex, Grok and Kimi and committed into the build (commit 874c0ac88), but the directory carries only 12 SKILL_ rows and the in-app models were never told they exist. Every skill is a row a model can find and read, and the Cloudflare house says so in its prompt.",
      "state": "accepted",
      "priority": 2,
      "revision": 3,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "sql_count_at_least",
          "id": "skill_rows",
          "sql": "SELECT COUNT(*) n FROM directory WHERE key LIKE 'SKILL_%' AND enabled = 1",
          "min": 16
        },
        {
          "type": "evidence_present",
          "id": "verification",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "skill_rows",
            "ok": true,
            "detail": "count=16 (need 16)"
          },
          {
            "id": "verification",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-15T16:16:44-07:00",
      "created_at": "2026-09-15T16:06:10-07:00",
      "updated_at": "2026-09-15T16:16:44-07:00",
      "audit": "/api/work/task/WT-0353/audit",
      "submit_to": "/api/work/task/WT-0353/submit"
    },
    {
      "task_id": "WT-0356",
      "kind": "work",
      "objective": "The system prompt and the sent tools are read and edited on the screen they are read from, and a task can be handed to a model, a CLI or a chat from the task itself",
      "detail": "Three defects, all found 2026-09-16. (1) sheetParams — the Parameters screen opened from a chat — carried one textarea labelled System, placeholder 'System prompt (optional)', always empty. That is the per-chat extra, not the model's system prompt, so the screen read as 'this model has no system prompt'. The earlier repair was applied to drawSetupParams, a different sheet, so the broken screen stayed broken. (2) The 'System prompt & sent tools' row at the top of the model picker called closeSheet() and then opened the harness in the same tick, tearing the new sheet down as it was built — the tap read as dead. (3) sheetTask offered only 'Mark resolved', so a single task could not be handed to anything; sheetSendTasks existed but only from multi-select, and had no plain-chat target.",
      "state": "in_progress",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "http_ok",
          "id": "console_serves",
          "url": "https://loop-safe-miscsubjects.pages.dev/console.html"
        },
        {
          "type": "contains",
          "id": "single_task_handoff",
          "url": "https://loop-safe-miscsubjects.pages.dev/console.html",
          "scope": "raw",
          "needle": "to a model, a CLI, or a chat"
        },
        {
          "type": "contains",
          "id": "chat_target",
          "url": "https://loop-safe-miscsubjects.pages.dev/console.html",
          "scope": "raw",
          "needle": "Open a new chat with the task in it"
        },
        {
          "type": "contains",
          "id": "real_prompt_on_params",
          "url": "https://loop-safe-miscsubjects.pages.dev/console.html",
          "scope": "raw",
          "needle": "the shared default"
        },
        {
          "type": "contains",
          "id": "tools_editable",
          "url": "https://loop-safe-miscsubjects.pages.dev/console.html",
          "scope": "raw",
          "needle": "Sent tools"
        },
        {
          "type": "not_contains",
          "id": "mislabelled_box_gone",
          "url": "https://loop-safe-miscsubjects.pages.dev/console.html",
          "scope": "raw",
          "needle": "System prompt (optional)"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-16T09:30:35.973437+00:00",
      "updated_at": "2026-09-16T09:30:35.973437+00:00",
      "audit": "/api/work/task/WT-0356/audit",
      "submit_to": "/api/work/task/WT-0356/submit"
    },
    {
      "task_id": "WT-0358",
      "kind": "work",
      "objective": "The desktop console shows its sidebar permanently, sends on Enter, and is findable after it is closed",
      "detail": "Three desktop defects, owner 2026-09-16. (1) The left navigation is a phone drawer behind a hamburger; on a desktop window there is room for both and a navigation you must summon is one you forget. Pinned open at >=900px, shell inset rather than pushed and scaled, no veil; phone behaviour untouched below 900px. (2) The composer only sent on Cmd/Ctrl+Enter; Enter now sends at >=900px, Shift+Enter is a newline, phone unchanged. (3) /Applications/Console.app collides by name with Apple's own Console in Spotlight, so after closing the window the owner could not find it again.",
      "state": "in_progress",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "http_ok",
          "id": "console_serves",
          "url": "https://loop-safe-miscsubjects.pages.dev/console.html"
        },
        {
          "type": "contains",
          "id": "sidebar_pinned",
          "url": "https://loop-safe-miscsubjects.pages.dev/console.html",
          "scope": "raw",
          "needle": "DESKTOP: THE SIDEBAR IS ALWAYS THERE"
        },
        {
          "type": "contains",
          "id": "enter_sends",
          "url": "https://loop-safe-miscsubjects.pages.dev/console.html",
          "scope": "raw",
          "needle": "ENTER SENDS ON A KEYBOARD"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-16T10:45:57.203866+00:00",
      "updated_at": "2026-09-16T10:45:57.203866+00:00",
      "audit": "/api/work/task/WT-0358/audit",
      "submit_to": "/api/work/task/WT-0358/submit"
    },
    {
      "task_id": "WT-0360",
      "kind": "work",
      "objective": "A session transcript reads in the order it happened, and a tool step shows the command and the output verbatim",
      "detail": "Two defects the owner photographed 2026-09-16. (1) messagesToTurns concatenated every assistant message between two owner messages into one reply string and collected the tool steps into a separate list drawn after it, so a session that went text, tool, text, tool rendered as one wall of prose followed by a pile of tools and no way to tell which sentence went with which command. Turns now carry an ordered blocks array and turnCard draws it in sequence. (2) A tool payload was always a JSON tree, so a Bash step opened as a collapsed node reading '{1}' and the output was truncated at 240 chars behind a tap-to-expand. An argument object whose meaningful fields are text now renders as that text verbatim, output renders verbatim when it is a string, and the raw payload is one button away.",
      "state": "in_progress",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "http_ok",
          "id": "console_serves",
          "url": "https://loop-safe-miscsubjects.pages.dev/console.html"
        },
        {
          "type": "contains",
          "id": "ordered_transcript",
          "url": "https://loop-safe-miscsubjects.pages.dev/console.html",
          "scope": "raw",
          "needle": "ORDER IS THE MEANING"
        },
        {
          "type": "contains",
          "id": "rendered_in_order",
          "url": "https://loop-safe-miscsubjects.pages.dev/console.html",
          "scope": "raw",
          "needle": "THE TRANSCRIPT IS RENDERED IN THE ORDER IT HAPPENED"
        },
        {
          "type": "contains",
          "id": "verbatim_payload",
          "url": "https://loop-safe-miscsubjects.pages.dev/console.html",
          "scope": "raw",
          "needle": "SHOW THE COMMAND, NOT A COLLAPSED OBJECT"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-16T16:39:40.080384+00:00",
      "updated_at": "2026-09-16T16:39:40.080384+00:00",
      "audit": "/api/work/task/WT-0360/audit",
      "submit_to": "/api/work/task/WT-0360/submit"
    },
    {
      "task_id": "WT-0361",
      "kind": "work",
      "objective": "One canonical CLI agent poller: scripts/cli-poller.mjs replaces the per-turn hooks, agent-turn-backfill, and cli-archive jobs; one pass feeds both the ledger (agent_turns + events) and the Code tab, only for changed files, one batched request per cycle; exposed as a directory tool.",
      "detail": "Owner order 2026-09-16. Old paths: Stop hooks (claude cc_log + spawned importer; codex/grok/kimi agent_log), launchd agent-turn-backfill (hung 5 days, re-posted 500 rows per run), cli-archive every 120s + nightly (wrangler shell reads). Tool results were capped at 4000 chars in the ledger.",
      "state": "open",
      "priority": 2,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-16T11:27:14-07:00",
      "updated_at": "2026-09-16T11:27:14-07:00",
      "audit": "/api/work/task/WT-0361/audit",
      "submit_to": "/api/work/task/WT-0361/submit"
    },
    {
      "task_id": "WT-0362",
      "kind": "work",
      "objective": "Console Worker tab: Worker and Coder are one spec on muse-worker — per-worker model, system prompt, tool payload and parameters editable in the app; continuable threads; work tasks assignable to either worker.",
      "detail": "Owner order 2026-09-16. muse-worker 261504b adds src/profiles.js, harness threads and /profiles. The build side: functions/api/console/worker.js (profiles proxy, threads, assignments + queue + task audit actions) and public/console/worker.js (settings, tool payload, parameters, assign work).",
      "state": "completed",
      "priority": 2,
      "revision": 4,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-16T21:31:55-07:00",
      "created_at": "2026-09-16T21:07:12-07:00",
      "updated_at": "2026-09-16T21:31:55-07:00",
      "audit": "/api/work/task/WT-0362/audit",
      "submit_to": "/api/work/task/WT-0362/submit"
    },
    {
      "task_id": "WT-0003",
      "kind": "work",
      "objective": "Publish /a/tesofensine — Tesofensine is in the product catalogue and has no article",
      "detail": "Read the writing law first. The article is about the compound and nothing else. 2,500+ words, 5+ real sources with verbatim quotes, human-evidence position stated plainly in the opening, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "completed",
      "priority": 3,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "tesofensine"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "tesofensine",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "tesofensine",
          "min": 5
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/tesofensine",
          "needle": "<article"
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "tesofensine"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "tesofensine"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "exists",
            "ok": true,
            "detail": "article tesofensine exists"
          },
          {
            "id": "words",
            "ok": true,
            "detail": "2782 words (need 2500)"
          },
          {
            "id": "sources",
            "ok": true,
            "detail": "7 sources (need 5)"
          },
          {
            "id": "renders",
            "ok": true,
            "detail": "contains \"<article\" in https://miscsubjects.com/a/tesofensine (scope=content) → true"
          },
          {
            "id": "published",
            "ok": true,
            "detail": "status=published"
          },
          {
            "id": "hero",
            "ok": true,
            "detail": "hero present"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-05T00:20:12-07:00",
      "created_at": "2026-08-04T16:27:20-07:00",
      "updated_at": "2026-08-05T00:20:12-07:00",
      "audit": "/api/work/task/WT-0003/audit",
      "submit_to": "/api/work/task/WT-0003/submit"
    },
    {
      "task_id": "WT-0004",
      "kind": "work",
      "objective": "Publish /a/slu-pp-332 — SLU-PP-332 is in the product catalogue and has no article",
      "detail": "Read the writing law first. The article is about the compound and nothing else. 2,500+ words, 5+ real sources with verbatim quotes, human-evidence position stated plainly in the opening, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "completed",
      "priority": 3,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "slu-pp-332"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "slu-pp-332",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "slu-pp-332",
          "min": 5
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/slu-pp-332",
          "needle": "<article"
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "slu-pp-332"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "slu-pp-332"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "exists",
            "ok": true,
            "detail": "article slu-pp-332 exists"
          },
          {
            "id": "words",
            "ok": true,
            "detail": "2728 words (need 2500)"
          },
          {
            "id": "sources",
            "ok": true,
            "detail": "7 sources (need 5)"
          },
          {
            "id": "renders",
            "ok": true,
            "detail": "contains \"<article\" in https://miscsubjects.com/a/slu-pp-332 (scope=content) → true"
          },
          {
            "id": "published",
            "ok": true,
            "detail": "status=published"
          },
          {
            "id": "hero",
            "ok": true,
            "detail": "hero present"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-05T00:18:39-07:00",
      "created_at": "2026-08-04T16:27:20-07:00",
      "updated_at": "2026-08-05T00:18:39-07:00",
      "audit": "/api/work/task/WT-0004/audit",
      "submit_to": "/api/work/task/WT-0004/submit"
    },
    {
      "task_id": "WT-0005",
      "kind": "work",
      "objective": "Publish /a/atx-304 — ATX-304 is in the product catalogue and has no article",
      "detail": "Read the writing law first. The article is about the compound and nothing else. 2,500+ words, 5+ real sources with verbatim quotes, human-evidence position stated plainly in the opening, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "completed",
      "priority": 3,
      "revision": 7,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "atx-304"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "atx-304",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "atx-304",
          "min": 5
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/atx-304",
          "needle": "<article"
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "atx-304"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "atx-304"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "exists",
            "ok": true,
            "detail": "article atx-304 exists"
          },
          {
            "id": "words",
            "ok": true,
            "detail": "2667 words (need 2500)"
          },
          {
            "id": "sources",
            "ok": true,
            "detail": "8 sources (need 5)"
          },
          {
            "id": "renders",
            "ok": true,
            "detail": "contains \"<article\" in https://miscsubjects.com/a/atx-304 (scope=content) → true"
          },
          {
            "id": "published",
            "ok": true,
            "detail": "status=published"
          },
          {
            "id": "hero",
            "ok": true,
            "detail": "hero present"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-05T02:01:36-07:00",
      "created_at": "2026-08-04T16:27:21-07:00",
      "updated_at": "2026-08-05T02:01:36-07:00",
      "audit": "/api/work/task/WT-0005/audit",
      "submit_to": "/api/work/task/WT-0005/submit"
    },
    {
      "task_id": "WT-0006",
      "kind": "work",
      "objective": "Publish /a/5-amino-1mq — 5-amino-1MQ is in the product catalogue and has no article",
      "detail": "Read the writing law first. The article is about the compound and nothing else. 2,500+ words, 5+ real sources with verbatim quotes, human-evidence position stated plainly in the opening, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "completed",
      "priority": 3,
      "revision": 7,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "5-amino-1mq"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "5-amino-1mq",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "5-amino-1mq",
          "min": 5
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/5-amino-1mq",
          "needle": "<article"
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "5-amino-1mq"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "5-amino-1mq"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 6,
        "tests_passed": 6,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "exists",
            "ok": true,
            "detail": "article 5-amino-1mq exists"
          },
          {
            "id": "words",
            "ok": true,
            "detail": "2540 words (need 2500)"
          },
          {
            "id": "sources",
            "ok": true,
            "detail": "8 sources (need 5)"
          },
          {
            "id": "renders",
            "ok": true,
            "detail": "contains \"<article\" in https://miscsubjects.com/a/5-amino-1mq (scope=content) → true"
          },
          {
            "id": "published",
            "ok": true,
            "detail": "status=published"
          },
          {
            "id": "hero",
            "ok": true,
            "detail": "hero present"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-05T02:26:28-07:00",
      "created_at": "2026-08-04T16:27:21-07:00",
      "updated_at": "2026-08-05T02:26:28-07:00",
      "audit": "/api/work/task/WT-0006/audit",
      "submit_to": "/api/work/task/WT-0006/submit"
    },
    {
      "task_id": "WT-0029",
      "kind": "work",
      "objective": "Write /a/tb-500-herniated-disc — the combination page where cross-object content belongs",
      "detail": "This slug names two objects, so this is the page where the compound is written against the condition. 2,500+ words, 5+ real sources, the mechanism chain stated link by link with the evidence strength at each link, the counted self-reported record, and the honest statement of where the chain has never been tested end to end.",
      "state": "open",
      "priority": 3,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "tb-500-herniated-disc"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "tb-500-herniated-disc",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "tb-500-herniated-disc",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "tb-500-herniated-disc"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/tb-500-herniated-disc",
          "needle": "<article"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "sources_added",
        "counted_self_reported_record",
        "where_the_chain_breaks"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:06-07:00",
      "updated_at": "2026-08-04T17:54:52-07:00",
      "audit": "/api/work/task/WT-0029/audit",
      "submit_to": "/api/work/task/WT-0029/submit"
    },
    {
      "task_id": "WT-0031",
      "kind": "work",
      "objective": "Write /a/bpc-157-tendon — the combination page where cross-object content belongs",
      "detail": "This slug names two objects, so this is the page where the compound is written against the condition. 2,500+ words, 5+ real sources, the mechanism chain stated link by link with the evidence strength at each link, the counted self-reported record, and the honest statement of where the chain has never been tested end to end.",
      "state": "open",
      "priority": 3,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "bpc-157-tendon"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "bpc-157-tendon",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "bpc-157-tendon",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "bpc-157-tendon"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/bpc-157-tendon",
          "needle": "<article"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "sources_added",
        "counted_self_reported_record",
        "where_the_chain_breaks"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:07-07:00",
      "updated_at": "2026-08-04T17:54:53-07:00",
      "audit": "/api/work/task/WT-0031/audit",
      "submit_to": "/api/work/task/WT-0031/submit"
    },
    {
      "task_id": "WT-0032",
      "kind": "work",
      "objective": "Write /a/bpc-157-sciatica — the combination page where cross-object content belongs",
      "detail": "This slug names two objects, so this is the page where the compound is written against the condition. 2,500+ words, 5+ real sources, the mechanism chain stated link by link with the evidence strength at each link, the counted self-reported record, and the honest statement of where the chain has never been tested end to end.",
      "state": "open",
      "priority": 3,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "bpc-157-sciatica"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "bpc-157-sciatica",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "bpc-157-sciatica",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "bpc-157-sciatica"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/bpc-157-sciatica",
          "needle": "<article"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "sources_added",
        "counted_self_reported_record",
        "where_the_chain_breaks"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:07-07:00",
      "updated_at": "2026-08-04T17:54:53-07:00",
      "audit": "/api/work/task/WT-0032/audit",
      "submit_to": "/api/work/task/WT-0032/submit"
    },
    {
      "task_id": "WT-0052",
      "kind": "work",
      "objective": "Repair the 810 legacy source entries stored with no verbatim quote, across 153 articles — the ceiling in .source-quote-ceiling.json may only fall",
      "detail": "SOURCE_QUOTE_LAW now refuses a quote-less source at both write paths and the renderer puts the quote before our summary on every card type. 810 entries predate the refusal: the card falls back to our description because there is nothing else to show. Repair means opening each URL, taking the sentence that actually supports the claim, and writing it into `quote`. Then run `node scripts/check-source-quotes.mjs --update-ceiling` so the new, lower number is recorded. Do not raise the ceiling and do not delete a source to make the count fall.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "POST /api/protocol/sources",
        "PATCH /api/articles/<slug>",
        "scripts/check-source-quotes.mjs",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "ceiling_fell",
          "type": "sql_count_at_least",
          "min": 1,
          "sql": "SELECT 1 AS n WHERE (SELECT COUNT(*) FROM articles WHERE json_type(meta,'$.sources')='array')>0"
        },
        {
          "id": "gate_green",
          "type": "evidence_present",
          "field": "gate_output"
        }
      ],
      "required_evidence": [
        "gate_output",
        "new_ceiling",
        "articles_repaired"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T17:46:22-07:00",
      "updated_at": "2026-08-04T17:46:22-07:00",
      "audit": "/api/work/task/WT-0052/audit",
      "submit_to": "/api/work/task/WT-0052/submit"
    },
    {
      "task_id": "WT-0054",
      "kind": "work",
      "objective": "Run the citation-identity scan across the whole corpus — only the health corpus has been checked, and it found 3 wrong citations in 598",
      "detail": "scripts/check-citation-identity.mjs looks each PubMed identifier up and compares the real title against the title the article claims. Run over the health corpus it found 3 citations pointing at entirely different papers, all now corrected. The gate in the deploy chain only scans the health corpus, because a full-corpus scan is thousands of network lookups. Run it with --all, in batches, and correct or remove every mismatch. Then decide whether the deploy gate should sample the wider corpus on a rotation rather than never touching it.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "scripts/check-citation-identity.mjs",
        "PATCH /api/articles/<slug>",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "evidence",
          "type": "evidence_present",
          "field": "scan_output"
        }
      ],
      "required_evidence": [
        "scan_output",
        "mismatches_found",
        "mismatches_corrected"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T19:22:31-07:00",
      "updated_at": "2026-08-04T19:22:31-07:00",
      "audit": "/api/work/task/WT-0054/audit",
      "submit_to": "/api/work/task/WT-0054/submit"
    },
    {
      "task_id": "WT-0056",
      "kind": "work",
      "objective": "Write the enriched lead list to the master sheet in chunks — the Apps Script silently returns its health response instead of writing when the payload is too large",
      "detail": "LEADS_SHEET_SYNC pushed LEADS_BY_SEGMENT (39 rows) and LEADS_BY_SOURCE (8 rows) successfully. The LEADS_ENRICHED tab did not appear at 5000, 2000 or 400 rows: sheets_replace_tab returns HTTP 200 with the airunner health payload rather than a write confirmation, and the flow treats that as success. Two defects. First, find the real payload ceiling and write the enriched list in chunks under it, using sheets_append_rows after an initial replace. Second, and more important, make the caller refuse a response that is not a write confirmation — a health response accepted as a successful write is the same class of silent pass this build keeps removing. Also note a multi-step flow reports only its LAST step, so a failed first step is invisible; consider reporting every step.",
      "state": "completed",
      "priority": 3,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "APPS_SCRIPT_RUN",
        "D1_TO_2D_ARRAY",
        "DIR_PATCH",
        "directory row LEADS_SHEET_SYNC"
      ],
      "acceptance_tests": [
        {
          "id": "evidence",
          "type": "evidence_present",
          "field": "tab_row_count"
        }
      ],
      "required_evidence": [
        "tab_row_count",
        "chunk_size_found",
        "silent_pass_closed"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 1,
        "tests_passed": 1,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "evidence",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "tab_row_count"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-08-05T00:10:34-07:00",
      "created_at": "2026-08-04T20:51:35-07:00",
      "updated_at": "2026-08-05T00:10:34-07:00",
      "audit": "/api/work/task/WT-0056/audit",
      "submit_to": "/api/work/task/WT-0056/submit"
    },
    {
      "task_id": "WT-0058",
      "kind": "work",
      "objective": "Backfill claims into the 161 substantial published articles that have none, so every article on the site is the same object",
      "detail": "Owner, 2026-08-05: \"some articles have claims, some articles dont... I dont want some to have divs, others not to have divs, some to have proof of work, some not, they all should have a standardized format.\" Claims are the addressable surface — they become the voxel DIVs, the proof-of-work object a certifier signs, the surface a token is scoped to, and the regions an outsider can challenge. CLAIM_LAW now refuses a new claim-less article at the write path (functions/_lib/claim_law.js), and scripts/check-article-claims.mjs holds the backlog at a ceiling of 161 that may only fall. This task IS that backlog. Work it in batches: list the offenders with COUNT/SELECT over articles where published=1 and length(body)>2400 and meta does not contain the claims-array marker, then for each article derive claims from what the page actually asserts — never invented, each at the evidence tier the page actually holds, each citing a source id the article already carries — and PUT them back. Lower CLAIM_CEILING in the gate as the count falls so each gain is locked in. Never lower the ceiling without repairing articles.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "PUT /api/articles/<slug>",
        "D1_QUERY",
        "scripts/check-article-claims.mjs"
      ],
      "acceptance_tests": [
        {
          "id": "ceiling_fell",
          "type": "sql_count_at_least",
          "min": 40,
          "sql": "SELECT (161 - (SELECT COUNT(*) FROM articles WHERE published=1 AND length(COALESCE(body,''))>2400 AND COALESCE(meta,'') NOT LIKE '%\"claims\":[{%')) AS n"
        },
        {
          "id": "law_live",
          "type": "http_ok",
          "url": "/api/articles/tesofensine"
        }
      ],
      "required_evidence": [
        "articles_repaired",
        "ceiling_lowered_to",
        "method"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-05T01:54:37-07:00",
      "updated_at": "2026-08-05T01:54:37-07:00",
      "audit": "/api/work/task/WT-0058/audit",
      "submit_to": "/api/work/task/WT-0058/submit"
    },
    {
      "task_id": "WT-0060",
      "kind": "work",
      "objective": "Retract or rename the 240 published pipeline-artifact pages whose slugs are not article slugs",
      "detail": "Found 2026-08-05 while repairing citations. 240 published articles carry slugs that are pipeline artifacts rather than subjects: paper-* (e.g. paper-mandelbrot-b-b-1967-how-long-is-the-coast-of-britain-statistical-self-similarity), mode-revise-* (e.g. mode-revise-slug-bpc-157-web-search-true-feedback-paste-the), and *-web-search-true-*. The last of those has a writer prompt fragment embedded in the slug.\n\nThe write path already refuses them — a PUT returns 422 publish_gate: \"slug is a pipeline artifact, not an article slug\" — so nothing new can be created in this shape and existing ones cannot be edited either. That is the awkward part: they are published, publicly reachable, and unrepairable through the normal path.\n\nThey are also carrying real defects. Four of the 31 corpus citation mismatches are on these pages, and two of them could not be fixed for exactly this reason.\n\nDecide per class and act: a paper-* page that is a genuine reference stub should be renamed to a real slug and kept; a mode-revise-* page is a writer-pipeline leak and should be retracted via status rather than deleted, since slugs are immutable. Confirm none is linked from a real article before retracting, and check the sitemap and the public index afterwards. None of the 148 claim-less substantial articles are in this set, so the two debts do not overlap.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "PUT /api/articles/<slug>",
        "status retraction"
      ],
      "acceptance_tests": [
        {
          "id": "artifacts_fell",
          "type": "sql_count_at_least",
          "min": 60,
          "sql": "SELECT (240 - (SELECT COUNT(*) FROM articles WHERE published=1 AND (slug LIKE 'paper-%' OR slug LIKE 'mode-revise-%' OR slug LIKE '%-web-search-true-%'))) AS n"
        },
        {
          "id": "site_still_serves",
          "type": "http_ok",
          "url": "/a/tesofensine"
        }
      ],
      "required_evidence": [
        "artifacts_before",
        "artifacts_after",
        "disposition_by_class",
        "link_check"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-05T03:11:31-07:00",
      "updated_at": "2026-08-05T03:11:31-07:00",
      "audit": "/api/work/task/WT-0060/audit",
      "submit_to": "/api/work/task/WT-0060/submit"
    },
    {
      "task_id": "WT-0063",
      "kind": "work",
      "objective": "Join a bounty table to the existing charge machinery so an unresolved claim carries an amount a model can be paid for resolving (theoretical-limits A11, 3/10)",
      "detail": "Tenants, balances, per-unit prices, measured provider cost and 402 refusals already exist. What does not exist is a reason for an outside model to act: a bounty on an unresolved claim, claimed by submitting a patch with evidence, decided by the existing acceptance path, settled through the existing charge row. Closing this also moves A4 discovery, which has no other lever that does not depend on a market.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "D1_REPAIR",
        "STRIPE_READ",
        "LEDGER_QUERY",
        "CAP_MINT"
      ],
      "acceptance_tests": [
        {
          "id": "registry_live",
          "type": "http_ok",
          "url": "/api/dispatch?registry=1"
        },
        {
          "id": "scorecard_updated",
          "type": "not_contains",
          "url": "/a/theoretical-limits",
          "needle": "There is no stake, no fee, no recourse"
        }
      ],
      "required_evidence": [
        "bounty_table",
        "claimed_bounty",
        "settlement_receipt",
        "paid_model"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-06T00:59:39-07:00",
      "updated_at": "2026-08-06T00:59:39-07:00",
      "audit": "/api/work/task/WT-0063/audit",
      "submit_to": "/api/work/task/WT-0063/submit"
    },
    {
      "task_id": "WT-0064",
      "kind": "work",
      "objective": "Publish a Merkle root per article and a corpus content ID per deploy, and pin the bundle set so a stranger holding only a hash can retrieve the bytes (theoretical-limits A2, 3/10)",
      "detail": "Integrity here is already content-addressed; identity is not. Losing the domain converts the corpus from a live object into a backup. Proof of closure is a full article retrieved and verified from its hash alone with this domain's DNS deliberately unresolvable during the test.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "R2_PUT",
        "R2_LIST",
        "D1_QUERY",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "id": "bundle_route_live",
          "type": "http_ok",
          "url": "/api/articles/theoretical-limits/bundle?format=markdown"
        },
        {
          "id": "scorecard_updated",
          "type": "not_contains",
          "url": "/a/theoretical-limits",
          "needle": "Integrity is content-addressed. Identity and retrieval are not."
        }
      ],
      "required_evidence": [
        "merkle_root_route",
        "corpus_cid",
        "offline_retrieval_transcript"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-06T00:59:39-07:00",
      "updated_at": "2026-08-06T00:59:39-07:00",
      "audit": "/api/work/task/WT-0064/audit",
      "submit_to": "/api/work/task/WT-0064/submit"
    },
    {
      "task_id": "WT-0067",
      "kind": "work",
      "objective": "Boot a second operator end to end in one receipted chain, and publish it with its failures (theoretical-limits A15, 6/10)",
      "detail": "Every primitive has been invoked individually — new database, namespace, bucket, worker, Pages project, DNS record, scoped token, messaging number. The composition has never been run: new domain, new bindings, new tenant, new token, first invocation, first receipt, one sequence, one chain. Publish whether or not it works; a failed chain published is worth more than an unproven claim.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "CF_BINDINGS_D1_DATABASE_CREATE",
        "CF_BINDINGS_KV_NAMESPACE_CREATE",
        "CF_BINDINGS_R2_BUCKET_CREATE",
        "CLI_WRANGLER",
        "CAP_MINT",
        "ARTICLE_PUT"
      ],
      "acceptance_tests": [
        {
          "id": "work_object_live",
          "type": "http_ok",
          "url": "/api/work"
        },
        {
          "id": "scorecard_updated",
          "type": "not_contains",
          "url": "/a/theoretical-limits",
          "needle": "Operator succession is written down and unproven."
        }
      ],
      "required_evidence": [
        "chain_url",
        "tenant_id",
        "first_invocation_receipt",
        "failures_recorded"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-06T00:59:46-07:00",
      "updated_at": "2026-08-06T00:59:46-07:00",
      "audit": "/api/work/task/WT-0067/audit",
      "submit_to": "/api/work/task/WT-0067/submit"
    },
    {
      "task_id": "WT-0072",
      "kind": "work",
      "objective": "Re-curate the site footer so it reflects where the build actually stands",
      "detail": "Owner 2026-08-07: unclear what earns footer pinning. Pin /a/the-queue and /a/logic-law (The Thinking Law); remove entries that no longer earn standing; the accurate-standing view governs.",
      "state": "superseded",
      "priority": 3,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-06T18:35:25-07:00",
      "updated_at": "2026-08-07T15:54:40-07:00",
      "audit": "/api/work/task/WT-0072/audit",
      "submit_to": "/api/work/task/WT-0072/submit"
    },
    {
      "task_id": "WT-0077",
      "kind": "work",
      "objective": "A comment lane that GET-only web models can actually use, and instructions that match reality",
      "detail": "Web GPT and Claude web report they cannot comment: browsing cannot POST. Build or surface the GET-reachable lane, and rewrite the how-to-comment instructions so a GET-only browser has a real path. /start stamps get-only-comment-lane where the lane is described. Successor of WT-0071 (no acceptance tests).",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "lane_documented_on_start",
          "type": "contains",
          "url": "/start",
          "needle": "get-only-comment-lane",
          "scope": "raw"
        },
        {
          "id": "start_alive",
          "type": "http_ok",
          "url": "/start"
        }
      ],
      "required_evidence": [
        "lane_url",
        "proof_comment_id_via_get"
      ],
      "parent_task": null,
      "supersedes": "WT-0071",
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-07T15:54:37-07:00",
      "updated_at": "2026-08-07T15:54:37-07:00",
      "audit": "/api/work/task/WT-0077/audit",
      "submit_to": "/api/work/task/WT-0077/submit"
    },
    {
      "task_id": "WT-0078",
      "kind": "work",
      "objective": "Re-curate the site footer so it reflects where the build actually stands",
      "detail": "Owner 2026-08-07: pin /a/the-queue and /a/logic-law; remove entries that no longer earn standing. Successor of WT-0072 (no acceptance tests).",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "queue_pinned",
          "type": "contains",
          "url": "/",
          "needle": "/a/the-queue",
          "scope": "raw"
        },
        {
          "id": "logic_law_pinned",
          "type": "contains",
          "url": "/",
          "needle": "/a/logic-law",
          "scope": "raw"
        }
      ],
      "required_evidence": [
        "entries_removed",
        "entries_added"
      ],
      "parent_task": null,
      "supersedes": "WT-0072",
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-07T15:54:37-07:00",
      "updated_at": "2026-08-07T15:54:37-07:00",
      "audit": "/api/work/task/WT-0078/audit",
      "submit_to": "/api/work/task/WT-0078/submit"
    },
    {
      "task_id": "WT-0081",
      "kind": "work",
      "objective": "Encode the three-state transport taxonomy and one-shot mutation credentials into /start and the mint flow",
      "detail": "From GPT-5.6-Sol post-mortem after comment #1022 (2026-08-07): /start and mint responses carry machine-detectable transports including chatgpt_safe_navigation_fallback with the operator-relay procedure; transport failure is never a site rejection; no receipt = unproven. Successor of WT-0075 (no acceptance tests).",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "taxonomy_on_start",
          "type": "contains",
          "url": "/start",
          "needle": "chatgpt_safe_navigation_fallback",
          "scope": "raw"
        },
        {
          "id": "start_alive",
          "type": "http_ok",
          "url": "/start"
        }
      ],
      "required_evidence": [
        "mint_response_sample"
      ],
      "parent_task": null,
      "supersedes": "WT-0075",
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-07T15:54:38-07:00",
      "updated_at": "2026-08-07T15:54:38-07:00",
      "audit": "/api/work/task/WT-0081/audit",
      "submit_to": "/api/work/task/WT-0081/submit"
    },
    {
      "task_id": "WT-0089",
      "kind": "work",
      "objective": "Discover early-stage AI-investment firms and produce an inspectable execution case",
      "detail": "Proof-of-concept for Proven Work: find venture firms with a public AI/agent-infrastructure thesis via live search, keep the raw receipts, and publish the run inside out. Owner demonstration 2026-08-28.",
      "state": "superseded",
      "priority": 3,
      "revision": 7,
      "depends_on": [],
      "permitted_capabilities": [
        "LEADS_DISCOVER_ORG",
        "LEADS_FIND_SITES",
        "LEADS_ENRICH_BATCH"
      ],
      "acceptance_tests": [
        {
          "id": "firms_found",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) FROM leads WHERE segment='ai-investors'",
          "min": 8
        },
        {
          "id": "case_reads",
          "type": "http_ok",
          "url": "/api/work"
        }
      ],
      "required_evidence": [
        "discovery_receipts",
        "inclusion_rules",
        "firms"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": "2026-08-28T15:43:13-07:00",
      "created_at": "2026-08-28T15:42:36-07:00",
      "updated_at": "2026-09-08T00:29:11-07:00",
      "audit": "/api/work/task/WT-0089/audit",
      "submit_to": "/api/work/task/WT-0089/submit"
    },
    {
      "task_id": "WT-0096",
      "kind": "work",
      "objective": "Execution cases render as case sheets: a read-only workbook tab per case where each discovery call is one row — request cell, response cell, payload cell — every cell a handle resolving to its hash-committed ledger record, with the selection logic and prompt version on a second tab",
      "detail": "Owner direction 2026-08-29: the spreadsheet is the native container for proof of work — the article pipeline buried inspectable evidence in prose. The workbook shipped under WT-0095 already provides read-only ledger-projection grids and handle-cells that open the raw object at its own address; this task binds an execution case (starting with the WT-0090 discovery-run case) to that surface. Rules: every displayed cell value is a derived reduction of the object it links to, never hand-entered beside it; the case sheet replaces the article as the demo, with at most a short pointer article. Include the move-count as a column so a reproduction can be graded (same rows, same payload hashes, N moves) rather than narrated.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "case_sheet_live",
          "type": "http_ok",
          "url": "/api/sheets"
        },
        {
          "id": "evidence",
          "type": "evidence_present",
          "field": "case_sheet_url"
        }
      ],
      "required_evidence": [
        "case_sheet_url",
        "cells_resolve_to_receipts_proof"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-29T07:39:57-07:00",
      "updated_at": "2026-08-29T07:39:57-07:00",
      "audit": "/api/work/task/WT-0096/audit",
      "submit_to": "/api/work/task/WT-0096/submit"
    },
    {
      "task_id": "WT-0102",
      "kind": "work",
      "objective": "The article the-spreadsheet-as-an-agent-surface states what the build does today: the formula lane recalculates dependents, and per-cell hash-chain history covers REST writes but not the agent lane until WT for the DO versions closes",
      "detail": "Verified 2026-09-02: the article says the grid has no dependency graph and names it the largest missing feature, and its capability table marks per-cell hash-chain audit as Yes. Live: PUT A1=2, B1==A1*3 gave 6; A1=10 recalculated B1 to 30 (recalculated:1); B1 history shows two chained versions. Commit 443c77cb5 shipped this. Meanwhile the agent sheet has zero cell versions. Repair: revise the two passages so the page matches the object; keep the revision reason on the record.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "article_put"
      ],
      "acceptance_tests": [
        {
          "id": "stale_no_graph_claim_gone",
          "type": "not_contains",
          "url": "/a/the-spreadsheet-as-an-agent-surface",
          "needle": "this build does not have it"
        },
        {
          "id": "page_live",
          "type": "http_ok",
          "url": "/a/the-spreadsheet-as-an-agent-surface"
        }
      ],
      "required_evidence": [
        "revision_url"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-02T10:02:54-07:00",
      "updated_at": "2026-09-02T10:02:54-07:00",
      "audit": "/api/work/task/WT-0102/audit",
      "submit_to": "/api/work/task/WT-0102/submit"
    },
    {
      "task_id": "WT-0115",
      "kind": "work",
      "objective": "Make a view read that failed say so, instead of returning an empty row set that looks like no matches",
      "detail": "runView returns {ok:true, rows:[]} when the D1 read fails under load. I hit it during verification: the same query returned 0 rows and then 25 rows ten seconds later. An empty result and a failed read are indistinguishable to the reader, which is how a person stops trusting a sheet that is actually correct. Silence is not a pass anywhere else in this build and it must not be here.",
      "state": "completed",
      "priority": 3,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "FILE_GET",
        "FILE_PUT",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "sheets_contract_public",
          "type": "http_ok",
          "url": "/api/sheets"
        }
      ],
      "required_evidence": [
        "failure_shape",
        "regression_test"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 1,
        "tests_passed": 1,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "sheets_contract_public",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/sheets"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-06T08:35:54-07:00",
      "created_at": "2026-09-06T07:56:05-07:00",
      "updated_at": "2026-09-06T08:35:54-07:00",
      "audit": "/api/work/task/WT-0115/audit",
      "submit_to": "/api/work/task/WT-0115/submit"
    },
    {
      "task_id": "WT-0116",
      "kind": "work",
      "objective": "Put a real example argument on every directory row so the catalogue a cold model composes from is provable",
      "detail": "986 of 1,066 rows carry no example, and 886 have never been run. A cold model handed the registry is composing from a catalogue that is ninety percent unverified, which undermines both the token drop and the one-link handoff. The examples are recoverable rather than invented: the ledger holds the real arguments these rows were called with. Derive an example from the most recent successful call per key, write it to examples, then run POST /api/directory/<key>/test so test_state and invocation_curl become true for the catalogue rather than for 148 rows.",
      "state": "superseded",
      "priority": 3,
      "revision": 10,
      "depends_on": [],
      "permitted_capabilities": [
        "LEDGER_QUERY",
        "D1_QUERY",
        "D1_EXEC",
        "DIR_PATCH"
      ],
      "acceptance_tests": [
        {
          "id": "examples_coverage",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM directory WHERE enabled=1 AND examples IS NOT NULL AND examples != ''",
          "min": 700
        },
        {
          "id": "tested_coverage",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM directory WHERE test_state='🟢 works'",
          "min": 500
        }
      ],
      "required_evidence": [
        "examples_written",
        "tested_count",
        "broken_list"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 2,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-06T07:56:05-07:00",
      "updated_at": "2026-09-06T08:38:15-07:00",
      "audit": "/api/work/task/WT-0116/audit",
      "submit_to": "/api/work/task/WT-0116/submit"
    },
    {
      "task_id": "WT-0117",
      "kind": "work",
      "objective": "Build the browser conversation relay so a reply from any browser model lands in the build without copy and paste",
      "detail": "This was wrongly called impossible earlier; it is buildable and one Chrome restart from working. browser.allow_javascript_apple_events is now true in Chrome's Preferences, so after a relaunch osascript can execute JavaScript in any tab and read the conversation DOM. Prefer the durable path: launch Chrome with --remote-debugging-port and observe Network.responseReceived, which captures the assistant's SSE stream before it renders and does not break when the DOM changes. Extract each assistant turn, parse it with the kernel's own tag regex, dispatch what it emitted, and write the result back to the build. That closes the loop for the two vendors whose injection defenses correctly refuse a page-delivered token.",
      "state": "superseded",
      "priority": 3,
      "revision": 4,
      "depends_on": [],
      "permitted_capabilities": [
        "LOCAL_EXEC",
        "LOCAL_OSASCRIPT",
        "BROWSER_PLAYWRIGHT",
        "D1_QUERY",
        "LEDGER_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "relay_receipts",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM events WHERE source='browser-relay'",
          "min": 1
        }
      ],
      "required_evidence": [
        "capture_method",
        "one_captured_turn",
        "dispatched_result"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-06T07:56:06-07:00",
      "updated_at": "2026-09-06T11:53:01-07:00",
      "audit": "/api/work/task/WT-0117/audit",
      "submit_to": "/api/work/task/WT-0117/submit"
    },
    {
      "task_id": "WT-0121",
      "kind": "work",
      "objective": "Put a real example argument on every directory row so the catalogue a cold model composes from is provable",
      "detail": "Same objective as WT-0116. Its acceptance demanded 500 rows green, which cannot be reached honestly: outward rows — email, X posts, iMessage, ad spend — must never be fired to prove themselves, and testPlan correctly refuses them. The reachable bar is the one that matters: an example on every row that can carry one, and a green state on every row that can be run without sending something into the world.",
      "state": "completed",
      "priority": 3,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "LEDGER_QUERY",
        "D1_QUERY",
        "D1_EXEC",
        "DIR_PATCH"
      ],
      "acceptance_tests": [
        {
          "id": "examples_coverage",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM directory WHERE enabled=1 AND examples IS NOT NULL AND examples != ''",
          "min": 700
        },
        {
          "id": "tested_coverage",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM directory WHERE test_state LIKE '%works%'",
          "min": 350
        }
      ],
      "required_evidence": [
        "examples_written",
        "tested_count",
        "broken_list"
      ],
      "parent_task": null,
      "supersedes": "WT-0116",
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "examples_coverage",
            "ok": true,
            "detail": "count=755 (need 700)"
          },
          {
            "id": "tested_coverage",
            "ok": true,
            "detail": "count=388 (need 350)"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-06T08:38:36-07:00",
      "created_at": "2026-09-06T08:37:51-07:00",
      "updated_at": "2026-09-06T08:38:36-07:00",
      "audit": "/api/work/task/WT-0121/audit",
      "submit_to": "/api/work/task/WT-0121/submit"
    },
    {
      "task_id": "WT-0126",
      "kind": "work",
      "objective": "The browser conversation relay: a reply from any logged-in browser model lands in the build as a durable turn with a receipt, and a browser model can call Directory capabilities by emitting tags, without copy and paste",
      "detail": "Successor of WT-0117. Shipped as the browser-model gateway (bridge/webmodel worker over CDP + functions/_lib/webmodel_gateway.js) and the relay lane (WEBMODEL_AGENT, functions/_lib/webmodel_relay.js). Capture is the provider stream end plus DOM, recorded per turn as capture_method. Proven live 2026-09-06: relay receipt inv_uwnn7ketmh (ChatGPT Web emitted [QUAKE_FEED]1|4[/QUAKE_FEED], the relay ran it, the model answered). The old acceptance looked for events with source browser-relay; the shipped source is webmodel.",
      "state": "superseded",
      "priority": 3,
      "revision": 6,
      "depends_on": [],
      "permitted_capabilities": [
        "WEBMODEL_SEND",
        "WEBMODEL_AGENT",
        "D1_QUERY",
        "LEDGER_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "captured_turns_exist",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM webmodel_turns WHERE status=complete AND capture_method IS NOT NULL",
          "min": 5
        },
        {
          "id": "more_than_one_vendor",
          "type": "sql_count_at_least",
          "sql": "SELECT count(DISTINCT provider) FROM webmodel_turns WHERE status=complete",
          "min": 3
        },
        {
          "id": "relay_contract_public",
          "type": "http_ok",
          "url": "/api/dispatch?key=WEBMODEL_AGENT"
        },
        {
          "id": "send_contract_public",
          "type": "http_ok",
          "url": "/api/dispatch?key=WEBMODEL_SEND"
        }
      ],
      "required_evidence": [
        "capture_method",
        "one_captured_turn",
        "dispatched_result"
      ],
      "parent_task": null,
      "supersedes": "WT-0117",
      "failure": null,
      "failure_count": 1,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-06T11:52:24-07:00",
      "updated_at": "2026-09-06T11:55:18-07:00",
      "audit": "/api/work/task/WT-0126/audit",
      "submit_to": "/api/work/task/WT-0126/submit"
    },
    {
      "task_id": "WT-0128",
      "kind": "work",
      "objective": "The browser conversation relay: a reply from any logged-in browser model lands in the build as a durable turn with a receipt, and a browser model can call Directory capabilities by emitting tags, without copy and paste",
      "detail": "Successor of WT-0126 (whose acceptance SQL lost its string quotes in transit). Shipped as the browser-model gateway (bridge/webmodel worker over CDP + functions/_lib/webmodel_gateway.js) and the relay lane (WEBMODEL_AGENT, functions/_lib/webmodel_relay.js). Capture is the provider stream end plus DOM, recorded per turn as capture_method. Proven live 2026-09-06: relay receipt inv_uwnn7ketmh.",
      "state": "completed",
      "priority": 3,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "WEBMODEL_SEND",
        "WEBMODEL_AGENT",
        "D1_QUERY",
        "LEDGER_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "captured_turns_exist",
          "type": "sql_count_at_least",
          "sql": "SELECT count(*) FROM webmodel_turns WHERE status = 'complete' AND capture_method IS NOT NULL",
          "min": 5
        },
        {
          "id": "more_than_one_vendor",
          "type": "sql_count_at_least",
          "sql": "SELECT count(DISTINCT provider) FROM webmodel_turns WHERE status = 'complete'",
          "min": 3
        },
        {
          "id": "relay_contract_public",
          "type": "http_ok",
          "url": "/api/dispatch?key=WEBMODEL_AGENT"
        },
        {
          "id": "send_contract_public",
          "type": "http_ok",
          "url": "/api/dispatch?key=WEBMODEL_SEND"
        }
      ],
      "required_evidence": [
        "capture_method",
        "one_captured_turn",
        "dispatched_result"
      ],
      "parent_task": null,
      "supersedes": "WT-0126",
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 4,
        "tests_passed": 4,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "captured_turns_exist",
            "ok": true,
            "detail": "count=37 (need 5)"
          },
          {
            "id": "more_than_one_vendor",
            "ok": true,
            "detail": "count=4 (need 3)"
          },
          {
            "id": "relay_contract_public",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/dispatch?key=WEBMODEL_AGENT"
          },
          {
            "id": "send_contract_public",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/dispatch?key=WEBMODEL_SEND"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-06T11:55:30-07:00",
      "created_at": "2026-09-06T11:55:17-07:00",
      "updated_at": "2026-09-06T11:55:30-07:00",
      "audit": "/api/work/task/WT-0128/audit",
      "submit_to": "/api/work/task/WT-0128/submit"
    },
    {
      "task_id": "WT-0136",
      "kind": "work",
      "objective": "Agreement agr_4e1365febdf7c6a8: I want the best peptide ads running on Meta pulled and ranked",
      "detail": "Offer ofr_4e94dde9622a2a08 by prf_provider_demo: pull the 25 active peptide ads and rank them by run length. Method: Ad Library search plus manual ranking. Price 1500 cents. Evidence promised: the search receipt and the ranked list. Composition: hybrid. Authority: person-approved.",
      "state": "open",
      "priority": 3,
      "revision": 4,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "evidence_present",
          "type": "evidence_present",
          "field": "deliverable"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-06T21:45:12-07:00",
      "updated_at": "2026-09-07T23:20:57-07:00",
      "audit": "/api/work/task/WT-0136/audit",
      "submit_to": "/api/work/task/WT-0136/submit"
    },
    {
      "task_id": "WT-0137",
      "kind": "work",
      "objective": "Agreement agr_ebd8eee55fa442a8: audit my ad account setup",
      "detail": "Offer ofr_d8b1fdab46e944ae by owner: full audit. Method: recompute. Price 3000 cents. Evidence promised: receipts. Composition: hybrid. Authority: person-approved.",
      "state": "superseded",
      "priority": 3,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "evidence_present",
          "type": "evidence_present",
          "field": "deliverable"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-07T19:19:06-07:00",
      "updated_at": "2026-09-07T20:48:04-07:00",
      "audit": "/api/work/task/WT-0137/audit",
      "submit_to": "/api/work/task/WT-0137/submit"
    },
    {
      "task_id": "WT-0157",
      "kind": "work",
      "objective": "Agreement agr_dc0c6eb9f8d7d582: audit my ad account setup and report the three biggest risks",
      "detail": "Offer ofr_74cfcf6a6d56ff53 by owner: read-only audit of the account setup with three named risks. Method: read the account and its campaigns through the leased rows. Price 4000 cents. Evidence promised: the read receipts and the written report. Composition: ai. Authority: person-approved.",
      "state": "completed",
      "priority": 3,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "id": "evidence_present",
          "type": "evidence_present",
          "field": "deliverable"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 1,
        "tests_passed": 1,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "evidence_present",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "deliverable"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-08T00:05:15-07:00",
      "created_at": "2026-09-08T00:05:12-07:00",
      "updated_at": "2026-09-08T00:05:15-07:00",
      "audit": "/api/work/task/WT-0157/audit",
      "submit_to": "/api/work/task/WT-0157/submit"
    },
    {
      "task_id": "WT-0168",
      "kind": "work",
      "objective": "Create OUTREACH_PACK as a flow row: spec -> dossier -> letter profile -> reviewer of a different family -> send with owner CC and send ledger, same contract and gate shape as ARTICLE_PACK.",
      "detail": "Same pattern as ARTICLE_PACK. Historical prompts are never fresh authority to send; only a live lease is.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [
        null
      ],
      "permitted_capabilities": [
        "DIR_PATCH",
        "FLOW_LEARN",
        "LEADS_DRAFT_AI",
        "OUTREACH_DOSSIER",
        "EMAIL_SEND"
      ],
      "acceptance_tests": [
        {
          "type": "sql_count_at_least",
          "sql": "select count(*) n from directory where key='OUTREACH_PACK' and IFNULL(enabled,1)=1",
          "min": 1
        },
        {
          "type": "evidence_present",
          "field": "demo_letter_receipt_chain"
        }
      ],
      "required_evidence": [
        "demo_letter_receipt_chain"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-08T04:54:53-07:00",
      "updated_at": "2026-09-08T04:54:53-07:00",
      "audit": "/api/work/task/WT-0168/audit",
      "submit_to": "/api/work/task/WT-0168/submit"
    },
    {
      "task_id": "WT-0170",
      "kind": "work",
      "objective": "Register every open terminal as a worker (agent, model, cwd, manifest hash, roles, heartbeat), lease by role and verified capability, expire leases from heartbeats, attach every turn and tool call to task and run, use existing file claims for overlapping code work, and return idle workers to the queue.",
      "detail": "Orchestration spec F, Codex: exclusive lease over the mutable task revision, independent review assignments against a fixed artifact revision. A comprehensive pass means every unresolved task or problem class gets a recorded disposition, not every agent editing everything. CLI_GROUP is a debate room, not the queue.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [
        null,
        null
      ],
      "permitted_capabilities": [
        "D1_EXEC",
        "D1_QUERY",
        "CLI_SPAWN",
        "FILE_CLAIM",
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "DEPLOY_LEASE"
      ],
      "acceptance_tests": [
        {
          "type": "sql_count_at_least",
          "sql": "select count(*) n from work_runs",
          "min": 10
        },
        {
          "type": "evidence_present",
          "field": "two_terminals_same_task_no_duplicate_writes"
        }
      ],
      "required_evidence": [
        "two_terminals_same_task_no_duplicate_writes"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-08T04:54:58-07:00",
      "updated_at": "2026-09-08T04:54:58-07:00",
      "audit": "/api/work/task/WT-0170/audit",
      "submit_to": "/api/work/task/WT-0170/submit"
    },
    {
      "task_id": "WT-0172",
      "kind": "work",
      "objective": "Retire BUILD_SPEC.md, KERNEL_SPEC.md and the root SPEC_* files into pointers at /api/work and the 0_* rows, and reduce the 154 root markdown files to the generated projections plus README.",
      "detail": "The live object at /api/work is the spec; the repo documents describe a June build (ROUTER on grok-4.3, ~262 tools, an events table). PROTECTED_FEATURES.md, STATE.md and AGENTS.md were the three most-edited files in 30 days.",
      "state": "open",
      "priority": 3,
      "revision": 3,
      "depends_on": [
        null
      ],
      "permitted_capabilities": [
        "LOCAL_EXEC",
        "CODE_LEASE_START",
        "CODE_LEASE_COMMIT",
        "DEPLOY_LEASE"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "field": "root_md_count_before_after"
        }
      ],
      "required_evidence": [
        "root_md_count_before_after"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-08T04:55:00-07:00",
      "updated_at": "2026-09-08T13:08:22.305Z",
      "audit": "/api/work/task/WT-0172/audit",
      "submit_to": "/api/work/task/WT-0172/submit"
    },
    {
      "task_id": "WT-0225",
      "kind": "work",
      "objective": "CONSOLE E5 (Kimi): /api/console/messages + Messages tab",
      "detail": "Assigned: Kimi. Spec: ~/Downloads/CONSOLE-UNIFIED-SPEC.md §8 E5.\n\n/api/console/messages + Messages tab: channel shelf (iMessage, WhatsApp, SMS, Email, Telegram, Signal, Slack, Discord, X, Reddit) with marks; one thread per profile across channels; reply from the phone lands on the right channel with a receipt; edit/unsend where the channel allows; status labelled as the channel reports it\n\nEvidence: the commit hash, a verification a person can repeat on the phone (URL + what to tap + what appears), and the critic turn id from E13. UI for a new tab lands in its own file public/console/<tab>.js; public/console.html is edited only under a coding-law lease.",
      "state": "superseded",
      "priority": 3,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "MSG_ROOMS",
        "MSG_SEND",
        "IMSG_SEND",
        "BLOOIO_SEND_MESSAGE",
        "EMAIL_SEND_TRACKED",
        "PROFILE_360"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T14:12:45-07:00",
      "updated_at": "2026-09-12T17:14:07-07:00",
      "audit": "/api/work/task/WT-0225/audit",
      "submit_to": "/api/work/task/WT-0225/submit"
    },
    {
      "task_id": "WT-0226",
      "kind": "work",
      "objective": "CONSOLE E6 (Kimi): Outreach",
      "detail": "Assigned: Kimi. Spec: ~/Downloads/CONSOLE-UNIFIED-SPEC.md §8 E6.\n\nOutreach: lead_types table (0412) with knobs as columns and a sheet projection; runner discover→enrich→qualify→draft→approve→send→track; approval cards on the phone writing lead_send_approvals with draft hash; funnel row per lead type; suppression enforced at the send row; approval-first default\n\nEvidence: the commit hash, a verification a person can repeat on the phone (URL + what to tap + what appears), and the critic turn id from E13. UI for a new tab lands in its own file public/console/<tab>.js; public/console.html is edited only under a coding-law lease.",
      "state": "superseded",
      "priority": 3,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "LEADS_DISCOVER",
        "LEADS_ENRICH",
        "LEADS_SCORE_AI",
        "LEADS_DRAFT_AI",
        "LEADS_SEND",
        "SEND_BY_CHANNEL",
        "PHONE_APPROVAL_CREATE"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T14:12:46-07:00",
      "updated_at": "2026-09-12T14:30:15-07:00",
      "audit": "/api/work/task/WT-0226/audit",
      "submit_to": "/api/work/task/WT-0226/submit"
    },
    {
      "task_id": "WT-0244",
      "kind": "work",
      "objective": "CONSOLE: structured task objects and routing — target column on work_tasks, POST /api/work/intake that turns a description into the closed task JSON, and the router as the first custom harness object with quota-aware assignment",
      "detail": "Spec: ~/Downloads/CONSOLE-TASK-OBJECTS-AND-ROUTING-SPEC.md. Handoff v2 section 7.1. The owner: \"Describe what I want, have it made into extremely structured JSON, which goes into tasks, and those tasks are assigned to Claude CLI, Codex CLI, Kimi CLI, etc,\" and \"my model concentrates on routing and my build concentrates on creating superior harnesses, so larger models get clearly defined work (fewer 100-tool-loop turns) and smaller models complete more sophisticated work.\" What is already there and must not be rebuilt: work_tasks.acceptance IS done_when (ten runnable test types, and createTask refuses any other); evidence_required, capabilities, depends_on, parent_id, supersedes and the hash chain all exist. The real gap is target (file/row/table/page), the intake that proposes before it creates, and the harness object. Intake is two-step and never one: createTask has no dry-run by design, so a probe that reaches it makes a real row — that is how WT-0040 was born with the objective probe. The router's tools are exactly four: read the work object, read the directory, create-or-assign a task, open a room. It routes; it does not do the work. Routing reads live budget before it assigns, because today Anthropic and OpenAI refused for credit, Moonshot is suspended, Kimi went out of its window and Codex ran out of usage. Migration 0421. Lane A owns the server, Lane B the Tasks UI. Acceptance in spec section 5.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "target_column",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "intake_creates_nothing",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "intake_refuses_uncheckable",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "router_assigns_with_reason",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "router_refuses_no_budget",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "two_harness_versions_compared",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T17:10:29-07:00",
      "updated_at": "2026-09-12T17:10:29-07:00",
      "audit": "/api/work/task/WT-0244/audit",
      "submit_to": "/api/work/task/WT-0244/submit"
    },
    {
      "task_id": "WT-0250",
      "kind": "work",
      "objective": "/api/work/.../submit returns a self-contradicting verdict when evidence is sent unwrapped, and the evidence manifest projects evidence as null after a successful accept",
      "detail": "FAILURE CLASS: a verdict that reports success and refusal at once, so the agent cannot tell what to fix.\n\nOBSERVED, WT-0236, 2026-09-12. Submitting {agent, model, lease_token, commit, verification, critic_turn} with the three evidence fields at the TOP LEVEL returned ok:true, tests_declared:3, tests_passed:3, every result ok:true with detail 'checked against required_evidence' — and simultaneously accepted:false with missing_evidence:['commit','verification','critic_turn'], naming as missing the exact three it had just marked ok. The stored manifest recorded evidence:{} . The submit also consumed the lease and set the task back to open, so each retry needs a fresh lease. Re-sending the identical content nested under an 'evidence' object was accepted immediately (accepted:true, state:completed, missing_evidence:[]).\n\nLAYER THAT PERMITTED IT: the acceptance evaluator behind POST /api/work/task/<id>/submit. The 'evidence_present' test reads the task's required_evidence list rather than the submitted payload — its own detail string says 'checked against required_evidence' — so it passes whether or not the field was sent, while a separate later step reads only the nested evidence object and populates missing_evidence from the required list. The two halves disagree because neither one looks at what actually arrived.\n\nINVARIANT THAT SHOULD HAVE PREVENTED IT: a test that reports ok must have read the value it is about, and a verdict may never mark a field both passed and missing. Concretely: evidence_present resolves the field from the submitted payload (accepting the field at the top level or nested, since both are natural and one is silently ignored today); missing_evidence is computed from the fields that actually failed, never from the required list; and a refusal that costs the agent its lease says so in the response.\n\nSECOND, SMALLER: after the accepted submit, GET /api/work-evidence/WT-0236 revision 2 shows acceptance.accepted true with evidence:null. The evidence is not lost — it is on the hash-chained submit audit row, 4648 bytes of it — but the manifest is the surface a reviewer reads, and it shows an acceptance with nothing behind it. The projection should carry what the audit row holds.\n\nREGRESSION TEST TO BUILD FROM THE EXACT FAILURE: submit a payload with the evidence fields at the top level and assert the response is internally consistent — no field appears in both the passed results and missing_evidence — and that a manifest whose acceptance is true carries the evidence that satisfied it.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": "WT-0236",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T17:58:10-07:00",
      "updated_at": "2026-09-12T17:58:10-07:00",
      "audit": "/api/work/task/WT-0250/audit",
      "submit_to": "/api/work/task/WT-0250/submit"
    },
    {
      "task_id": "WT-0256",
      "kind": "work",
      "objective": "Write the first message to one chiropractor lead",
      "detail": "",
      "state": "superseded",
      "priority": 3,
      "revision": 3,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": "WT-0253",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T01:53:11.789Z",
      "updated_at": "2026-09-13T01:53:14.365Z",
      "audit": "/api/work/task/WT-0256/audit",
      "submit_to": "/api/work/task/WT-0256/submit"
    },
    {
      "task_id": "WT-0272",
      "kind": "work",
      "objective": "After OBJECT_MUTATE accepts a repo path, persist those bytes into the deployable tree in the same turn so ship sees them",
      "detail": "object_heads is canonical for CAS. Deploy still reads the tree. Without this, accepted mutations can be live in heads and absent from the next ship.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "OBJECT_READ",
        "OBJECT_MUTATE"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T21:07:07-07:00",
      "updated_at": "2026-09-12T21:07:07-07:00",
      "audit": "/api/work/task/WT-0272/audit",
      "submit_to": "/api/work/task/WT-0272/submit"
    },
    {
      "task_id": "WT-0282",
      "kind": "work",
      "objective": "Close duplicate GitHub issues for the same five holes. Keep the newest of each set.",
      "detail": "Duplicates: 276/315/324 GitHub MCP; 296/314/323 cold-render; 311/320 external-effect; 312/321 ten-step; 313/322 /api/proof; 316/325 oip-node-kit. Keep newest. Work lives in work_tasks where it exists.",
      "state": "completed",
      "priority": 3,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-12T21:21:39-07:00",
      "created_at": "2026-09-12T21:20:47-07:00",
      "updated_at": "2026-09-12T21:21:39-07:00",
      "audit": "/api/work/task/WT-0282/audit",
      "submit_to": "/api/work/task/WT-0282/submit"
    },
    {
      "task_id": "WT-0285",
      "kind": "work",
      "objective": "Draft PR 295 rewrite misc CLI is two months old and not on main. Close it or rebase it. Do not merge as-is.",
      "detail": "https://github.com/the owner/miscsubjects-pages/pull/295 branch agent/rewrite-misc-cli last update 2026-07-29. Main already has invoke as the kernel.",
      "state": "completed",
      "priority": 3,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 2,
        "tests_passed": 2,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "commit",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "commit"
          },
          {
            "id": "live",
            "ok": true,
            "detail": "checked against required_evidence",
            "evidence_field": "verification"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-12T21:36:23-07:00",
      "created_at": "2026-09-12T21:21:15-07:00",
      "updated_at": "2026-09-12T21:36:23-07:00",
      "audit": "/api/work/task/WT-0285/audit",
      "submit_to": "/api/work/task/WT-0285/submit"
    },
    {
      "task_id": "WT-0309",
      "kind": "work",
      "objective": "W1.6 Response-size deploy gate",
      "detail": "Mechanical: fail ship if default response >4 KB or an enabled row has empty returns. Depends on W1.1 (thin envelopes) and W1.2 (returns contracts).",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [
        "WT-0307",
        "WT-0308"
      ],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:44:47-07:00",
      "updated_at": "2026-09-14T02:44:47-07:00",
      "audit": "/api/work/task/WT-0309/audit",
      "submit_to": "/api/work/task/WT-0309/submit"
    },
    {
      "task_id": "WT-0313",
      "kind": "work",
      "objective": "W0.1d R2 Data Catalog registration so moved bodies stay queryable",
      "detail": "Beta, $2.50/TB scanned (beta pricing, may move). Register the bodies bucket so the W0.1c pointer rows remain queryable after the move.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:44:50-07:00",
      "updated_at": "2026-09-14T02:44:50-07:00",
      "audit": "/api/work/task/WT-0313/audit",
      "submit_to": "/api/work/task/WT-0313/submit"
    },
    {
      "task_id": "WT-0316",
      "kind": "work",
      "objective": "W2.3 Substrate router rule table as data",
      "detail": "Write the mapping {latency, durability, isolation, tenancy} -> {Worker, loader, Workflow, DO, Queue} as data, not code (WORLD-LIMITS §3 Nodes A/B/G, currently DRAFT as research).",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:44:53-07:00",
      "updated_at": "2026-09-14T02:44:53-07:00",
      "audit": "/api/work/task/WT-0316/audit",
      "submit_to": "/api/work/task/WT-0316/submit"
    },
    {
      "task_id": "WT-0320",
      "kind": "work",
      "objective": "W3.3 Inbound vocabulary widening",
      "detail": "Today inbound.js forces message.received/reply/reaction/record.changed. Target: preserve native_event + tiny normalized action in {create,update,delete,message,reaction,state,unknown}.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:44:57-07:00",
      "updated_at": "2026-09-14T02:44:57-07:00",
      "audit": "/api/work/task/WT-0320/audit",
      "submit_to": "/api/work/task/WT-0320/submit"
    },
    {
      "task_id": "WT-0321",
      "kind": "work",
      "objective": "W3.4 Webhook routes made dumb: authenticate, identify, enqueue, 2xx",
      "detail": "authenticate -> identify connection -> extract external id -> capture native event -> enqueue -> 2xx. Queue in front of existing inbound machinery (Queues at-least-once + existing (connection_id, external_id) dedupe = documented fit).",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:44:58-07:00",
      "updated_at": "2026-09-14T02:44:58-07:00",
      "audit": "/api/work/task/WT-0321/audit",
      "submit_to": "/api/work/task/WT-0321/submit"
    },
    {
      "task_id": "WT-0322",
      "kind": "work",
      "objective": "W3.7 Email Workers inbound as first projection source",
      "detail": "Free, 200-rule budget. Tracked-send replies become normalized events. Depends on W3.3 (vocabulary) and W3.4 (dumb routes).",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [
        "WT-0320",
        "WT-0321"
      ],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:44:59-07:00",
      "updated_at": "2026-09-14T02:44:59-07:00",
      "audit": "/api/work/task/WT-0322/audit",
      "submit_to": "/api/work/task/WT-0322/submit"
    },
    {
      "task_id": "WT-0325",
      "kind": "work",
      "objective": "W4.2 Fold the 189 hand-written CF_* rows into the catalog as aliases",
      "detail": "Measured misallocated: 66 radar / 18 DEX / 11 CASB (mostly Tier-3). Aliases into the cf_ops catalog once W4.1's versioned table exists.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [
        "WT-0324"
      ],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:45:01-07:00",
      "updated_at": "2026-09-14T02:45:01-07:00",
      "audit": "/api/work/task/WT-0325/audit",
      "submit_to": "/api/work/task/WT-0325/submit"
    },
    {
      "task_id": "WT-0326",
      "kind": "work",
      "objective": "W4.3 Measure which 30 CF ops this account actually calls weekly",
      "detail": "Measurable via GraphQL analytics. Determines sugar-row promotions before the catalog triples misc_find's search space.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:45:02-07:00",
      "updated_at": "2026-09-14T02:45:02-07:00",
      "audit": "/api/work/task/WT-0326/audit",
      "submit_to": "/api/work/task/WT-0326/submit"
    },
    {
      "task_id": "WT-0328",
      "kind": "work",
      "objective": "W4.5 Vectorize-embed the directory",
      "detail": "0 Vectorize indexes on account (measured). 1536-dim cap constrains embedder choice. Matters before the cf_ops catalog triples misc_find's search space.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:45:05-07:00",
      "updated_at": "2026-09-14T02:45:05-07:00",
      "audit": "/api/work/task/WT-0328/audit",
      "submit_to": "/api/work/task/WT-0328/submit"
    },
    {
      "task_id": "WT-0329",
      "kind": "work",
      "objective": "W5.1 Tenant control-plane script",
      "detail": "Five steps: tenant row -> user Worker deploy -> per-tenant bindings (confirmed supported) -> custom hostname flow (POST /zones/{id}/custom_hostnames -> ownership verify -> DCV delegation -> ssl.status poll) -> limits policy. Watch: 1,200 API calls/5min budget shared with dashboard (trap #9). scripts/cf-tenant.mjs (clone a tenant Worker from the CLI) and scripts/cf-mint-token.mjs already exist on main.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:45:06-07:00",
      "updated_at": "2026-09-14T02:45:06-07:00",
      "audit": "/api/work/task/WT-0329/audit",
      "submit_to": "/api/work/task/WT-0329/submit"
    },
    {
      "task_id": "WT-0330",
      "kind": "work",
      "objective": "W5.2 Tenant code constraints as lint",
      "detail": "No request.cf, no caches.default in user Workers — the generator/linter must reject both.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:45:06-07:00",
      "updated_at": "2026-09-14T02:45:06-07:00",
      "audit": "/api/work/task/WT-0330/audit",
      "submit_to": "/api/work/task/WT-0330/submit"
    },
    {
      "task_id": "WT-0334",
      "kind": "work",
      "objective": "W6.4 Token fabric ops: CAP_MINT extensions",
      "detail": "revoke, debit, list-by-purpose. CF-layer scoped minting via Create-Additional-Tokens permission for tenant/destroy classes. Enforcement physical (loader limits), never prompt.",
      "state": "open",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:45:10-07:00",
      "updated_at": "2026-09-14T02:45:10-07:00",
      "audit": "/api/work/task/WT-0334/audit",
      "submit_to": "/api/work/task/WT-0334/submit"
    },
    {
      "task_id": "WT-0359",
      "kind": "work",
      "objective": "Old ledger events live in R2 and leave D1, so the ledger stops running at its ceiling",
      "detail": "loop-shared-events hit 9.76 GB against D1's 10 GB hard limit on 2026-09-16 with roughly a day of headroom. Nulling bodies older than two days freed 373 MB; trimming previews and headers in place freed nothing, because SQLite does not release a page when a row shrinks. Body growth is already stopped - the last 24h wrote 131,005 rows and zero inline bytes - so the remaining bulk is five million rows of metadata and indexes. scripts/ledger-evict.mjs writes a day of events to R2 as JSONL, reads the object back and matches every id, and only then deletes that day from D1. Verify-then-delete, 30-day retention floor, nothing discarded.",
      "state": "in_progress",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "http_ok",
          "id": "site_up",
          "url": "https://miscsubjects.com/api/health"
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-16T10:45:57.203866+00:00",
      "updated_at": "2026-09-16T10:45:57.203866+00:00",
      "audit": "/api/work/task/WT-0359/audit",
      "submit_to": "/api/work/task/WT-0359/submit"
    },
    {
      "task_id": "flag_mty7a4yf_ihlky6",
      "kind": "work",
      "objective": "FLAG: Flag test from the app: confirm a flag becomes a real work_tasks row with its screen attached.",
      "detail": "Flag test from the app: confirm a flag becomes a real work_tasks row with its screen attached.\n— filed from the Console (build)",
      "state": "completed",
      "priority": 3,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": "2026-09-12 09:46:38",
      "created_at": "2026-09-12T09:46:18.135Z",
      "updated_at": "2026-09-12T09:46:18.135Z",
      "audit": "/api/work/task/flag_mty7a4yf_ihlky6/audit",
      "submit_to": "/api/work/task/flag_mty7a4yf_ihlky6/submit"
    },
    {
      "task_id": "WF-0017",
      "kind": "failure",
      "objective": "Migration numbers collide because they are claimed in prose, not allocated: three collisions in one session (0418 Lane C vs Lane E, 0421 Lane E vs WT-0244, 0423 rooms vs loop-people)",
      "detail": "Failure class: two agents pick the same next integer because each reads origin/main, sees the same tail, and writes a file before the other pushes. Layer that permitted it: the migration filename is the identifier AND the allocation, so allocation happens in a working tree where no other agent can see it, and the only coordination is a WORK_APPEND note written after the fact. Invariant that should have prevented it: a migration number is allocated by the infrastructure, once, before the file exists — the same way a task id is. Today the deploy gate caught each one (it fails a ship when two migrations share a number), so nothing corrupt shipped; the cost was three renumberings, one failed ship, and coordination traffic on every collision. The gate is the right backstop and is working. It is not the fix, because it detects the collision after two agents have both written code against their number. Fix: an allocation endpoint (POST /api/migrations/claim -> the next free number, recorded with the claiming agent and an expiry, refusing to hand the same number twice), plus a ship-gate check that a migration file's number matches a live claim by the committing agent. Then the number is a row, like everything else here, instead of a convention. Repair every existing object of the same class: no repair needed for shipped migrations — each collision was renumbered before landing; verify 0416..0424 are unique on origin/main. Regression test built from the exact failure: two concurrent claims must return different numbers.",
      "state": "open",
      "priority": 4,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "claim_endpoint_live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "two_concurrent_claims_differ",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "ship_gate_requires_claim",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "existing_numbers_unique",
          "field": "verification"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T17:25:03-07:00",
      "updated_at": "2026-09-12T17:25:03-07:00",
      "audit": "/api/work/task/WF-0017/audit",
      "submit_to": "/api/work/task/WF-0017/submit"
    },
    {
      "task_id": "WT-0002",
      "kind": "work",
      "objective": "Raise /a/kisspeptin to canonical depth: 2,500+ words, 5+ sources, inspected hero",
      "detail": "Depends on the first pass. Bring it to the corpus standard and attach a hero image with no text of any kind in the pixels; open the render at full size and record what you saw.",
      "state": "open",
      "priority": 4,
      "revision": 1,
      "depends_on": [
        "WT-0001"
      ],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "kisspeptin"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "kisspeptin",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "kisspeptin",
          "min": 5
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/kisspeptin",
          "needle": "<article"
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "kisspeptin"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "kisspeptin"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:27:20-07:00",
      "updated_at": "2026-08-04T16:27:20-07:00",
      "audit": "/api/work/task/WT-0002/audit",
      "submit_to": "/api/work/task/WT-0002/submit"
    },
    {
      "task_id": "WT-0026",
      "kind": "work",
      "objective": "Write /a/ara-290-neuropathy — the combination page where cross-object content belongs",
      "detail": "This slug names two objects, so this is the page where the compound is written against the condition. 2,500+ words, 5+ real sources, the mechanism chain stated link by link with the evidence strength at each link, the counted self-reported record, and the honest statement of where the chain has never been tested end to end.",
      "state": "open",
      "priority": 4,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "ara-290-neuropathy"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "ara-290-neuropathy",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "ara-290-neuropathy",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "ara-290-neuropathy"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/ara-290-neuropathy",
          "needle": "<article"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "sources_added",
        "counted_self_reported_record",
        "where_the_chain_breaks"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:05-07:00",
      "updated_at": "2026-08-04T17:54:54-07:00",
      "audit": "/api/work/task/WT-0026/audit",
      "submit_to": "/api/work/task/WT-0026/submit"
    },
    {
      "task_id": "WT-0027",
      "kind": "work",
      "objective": "Write /a/ara-290-nerve-damage — the combination page where cross-object content belongs",
      "detail": "This slug names two objects, so this is the page where the compound is written against the condition. 2,500+ words, 5+ real sources, the mechanism chain stated link by link with the evidence strength at each link, the counted self-reported record, and the honest statement of where the chain has never been tested end to end.",
      "state": "open",
      "priority": 4,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "ara-290-nerve-damage"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "ara-290-nerve-damage",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "ara-290-nerve-damage",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "ara-290-nerve-damage"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/ara-290-nerve-damage",
          "needle": "<article"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "sources_added",
        "counted_self_reported_record",
        "where_the_chain_breaks"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:05-07:00",
      "updated_at": "2026-08-04T17:54:54-07:00",
      "audit": "/api/work/task/WT-0027/audit",
      "submit_to": "/api/work/task/WT-0027/submit"
    },
    {
      "task_id": "WT-0028",
      "kind": "work",
      "objective": "Write /a/tb-500-frozen-shoulder — the combination page where cross-object content belongs",
      "detail": "This slug names two objects, so this is the page where the compound is written against the condition. 2,500+ words, 5+ real sources, the mechanism chain stated link by link with the evidence strength at each link, the counted self-reported record, and the honest statement of where the chain has never been tested end to end.",
      "state": "open",
      "priority": 4,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "tb-500-frozen-shoulder"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "tb-500-frozen-shoulder",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "tb-500-frozen-shoulder",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "tb-500-frozen-shoulder"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/tb-500-frozen-shoulder",
          "needle": "<article"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "sources_added",
        "counted_self_reported_record",
        "where_the_chain_breaks"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:06-07:00",
      "updated_at": "2026-08-04T17:54:53-07:00",
      "audit": "/api/work/task/WT-0028/audit",
      "submit_to": "/api/work/task/WT-0028/submit"
    },
    {
      "task_id": "WT-0030",
      "kind": "work",
      "objective": "Write /a/bpc-157-nsaids — the combination page where cross-object content belongs",
      "detail": "This slug names two objects, so this is the page where the compound is written against the condition. 2,500+ words, 5+ real sources, the mechanism chain stated link by link with the evidence strength at each link, the counted self-reported record, and the honest statement of where the chain has never been tested end to end.",
      "state": "open",
      "priority": 4,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "bpc-157-nsaids"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "bpc-157-nsaids",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "bpc-157-nsaids",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "bpc-157-nsaids"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/bpc-157-nsaids",
          "needle": "<article"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "sources_added",
        "counted_self_reported_record",
        "where_the_chain_breaks"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:06-07:00",
      "updated_at": "2026-08-04T17:54:55-07:00",
      "audit": "/api/work/task/WT-0030/audit",
      "submit_to": "/api/work/task/WT-0030/submit"
    },
    {
      "task_id": "WT-0033",
      "kind": "work",
      "objective": "Write /a/bpc-157-neuropathy — the combination page where cross-object content belongs",
      "detail": "This slug names two objects, so this is the page where the compound is written against the condition. 2,500+ words, 5+ real sources, the mechanism chain stated link by link with the evidence strength at each link, the counted self-reported record, and the honest statement of where the chain has never been tested end to end.",
      "state": "open",
      "priority": 4,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "bpc-157-neuropathy"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "bpc-157-neuropathy",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "bpc-157-neuropathy",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "bpc-157-neuropathy"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/bpc-157-neuropathy",
          "needle": "<article"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "sources_added",
        "counted_self_reported_record",
        "where_the_chain_breaks"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:07-07:00",
      "updated_at": "2026-08-04T17:54:54-07:00",
      "audit": "/api/work/task/WT-0033/audit",
      "submit_to": "/api/work/task/WT-0033/submit"
    },
    {
      "task_id": "WT-0034",
      "kind": "work",
      "objective": "Write /a/bpc-157-nerve-damage — the combination page where cross-object content belongs",
      "detail": "This slug names two objects, so this is the page where the compound is written against the condition. 2,500+ words, 5+ real sources, the mechanism chain stated link by link with the evidence strength at each link, the counted self-reported record, and the honest statement of where the chain has never been tested end to end.",
      "state": "open",
      "priority": 4,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "bpc-157-nerve-damage"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "bpc-157-nerve-damage",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "bpc-157-nerve-damage",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "bpc-157-nerve-damage"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/bpc-157-nerve-damage",
          "needle": "<article"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "sources_added",
        "counted_self_reported_record",
        "where_the_chain_breaks"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:08-07:00",
      "updated_at": "2026-08-04T17:54:54-07:00",
      "audit": "/api/work/task/WT-0034/audit",
      "submit_to": "/api/work/task/WT-0034/submit"
    },
    {
      "task_id": "WT-0035",
      "kind": "work",
      "objective": "Write /a/bpc-157-carpal-tunnel — the combination page where cross-object content belongs",
      "detail": "This slug names two objects, so this is the page where the compound is written against the condition. 2,500+ words, 5+ real sources, the mechanism chain stated link by link with the evidence strength at each link, the counted self-reported record, and the honest statement of where the chain has never been tested end to end.",
      "state": "open",
      "priority": 4,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "bpc-157-carpal-tunnel"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "bpc-157-carpal-tunnel",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "bpc-157-carpal-tunnel",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "bpc-157-carpal-tunnel"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/bpc-157-carpal-tunnel",
          "needle": "<article"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "sources_added",
        "counted_self_reported_record",
        "where_the_chain_breaks"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:08-07:00",
      "updated_at": "2026-08-04T17:54:54-07:00",
      "audit": "/api/work/task/WT-0035/audit",
      "submit_to": "/api/work/task/WT-0035/submit"
    },
    {
      "task_id": "WT-0036",
      "kind": "work",
      "objective": "Write /a/bpc-157-corticosteroids — the combination page where cross-object content belongs",
      "detail": "This slug names two objects, so this is the page where the compound is written against the condition. 2,500+ words, 5+ real sources, the mechanism chain stated link by link with the evidence strength at each link, the counted self-reported record, and the honest statement of where the chain has never been tested end to end.",
      "state": "open",
      "priority": 4,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "bpc-157-corticosteroids"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "bpc-157-corticosteroids",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "bpc-157-corticosteroids",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "bpc-157-corticosteroids"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/bpc-157-corticosteroids",
          "needle": "<article"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "sources_added",
        "counted_self_reported_record",
        "where_the_chain_breaks"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:08-07:00",
      "updated_at": "2026-08-04T17:54:55-07:00",
      "audit": "/api/work/task/WT-0036/audit",
      "submit_to": "/api/work/task/WT-0036/submit"
    },
    {
      "task_id": "WT-0053",
      "kind": "work",
      "objective": "Add AUTOMATE_PATCH — an automation can be created and toggled but its interval and body can only be changed with direct SQL",
      "detail": "AUTOMATE_ADD creates and AUTOMATE_TOGGLE enables or pauses, but there is no path to change an existing automation's every_min or body. Changing the lead-enrichment drain rate on 2026-08-04 therefore had two options: direct SQL (the bypass this build is closing) or adding duplicate automations at different intervals, which is what was done — leads-enrich-drain-2 every 3 min and leads-enrich-drain-3 every 4 min alongside the original every 10 min. That works but leaves three rows where one belongs. Add AUTOMATE_PATCH taking id and the fields to change, ledgering a receipt like every other automation action, then collapse automations 13, 24 and 25 back into one.",
      "state": "open",
      "priority": 4,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "functions/_lib/fn_runners.js",
        "directory row insert via migration",
        "AUTOMATE_LIST"
      ],
      "acceptance_tests": [
        {
          "id": "tool_exists",
          "type": "sql_count_at_least",
          "min": 1,
          "sql": "SELECT COUNT(*) n FROM directory WHERE key=AUTOMATE_PATCH"
        },
        {
          "id": "one_drain",
          "type": "sql_count_at_least",
          "min": 1,
          "sql": "SELECT CASE WHEN (SELECT COUNT(*) FROM automations WHERE key=LEADS_ENRICH_BATCH AND enabled=1)=1 THEN 1 ELSE 0 END AS n"
        }
      ],
      "required_evidence": [
        "tool_output",
        "automations_after"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T18:15:52-07:00",
      "updated_at": "2026-08-04T18:15:52-07:00",
      "audit": "/api/work/task/WT-0053/audit",
      "submit_to": "/api/work/task/WT-0053/submit"
    },
    {
      "task_id": "WT-0057",
      "kind": "work",
      "objective": "Decide the peptide-article image direction — two character trials exist and neither has been applied",
      "detail": "The owner asked to try the peptide-character idea: a small character that IS the molecule, explaining itself inside the body, like the peptide educational content he had seen. Two trials were rendered on 2026-08-04 and deliberately NOT applied to any article, because he also said not to remake more images than he asks for. TB-500 works: the character is mid-job, pulling the fibres of a tear together, so the image teaches. BPC-157 does not: it stands beside a stomach ulcer and points, which is a mascot pose, and a smiling figure next to a wound is tonally wrong for a medical page. The rule that separates them is that the character must be DOING the thing the compound does, never posing next to it. Trials at /img/gen/arcads-gpt-image-68aad75a-a24c-44a8-992c-833c817709e6.png and /img/gen/arcads-gpt-image-53b5abdb-c973-4b4b-8adf-a996770f99c2.png. Do not roll this out across the peptide corpus without the owner choosing it — a single treatment applied corpus-wide is the house-look failure the design law already forbids, and is exactly how the gold robot happened.",
      "state": "open",
      "priority": 4,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "PATCH /api/articles/<slug>"
      ],
      "acceptance_tests": [
        {
          "id": "evidence",
          "type": "evidence_present",
          "field": "owner_decision"
        }
      ],
      "required_evidence": [
        "owner_decision",
        "articles_applied"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T21:29:33-07:00",
      "updated_at": "2026-08-04T21:29:33-07:00",
      "audit": "/api/work/task/WT-0057/audit",
      "submit_to": "/api/work/task/WT-0057/submit"
    },
    {
      "task_id": "WT-0068",
      "kind": "work",
      "objective": "Derive each capability row's risk grade from its own declared effects and refuse any row whose grade and effects disagree (theoretical-limits A9, 8/10)",
      "detail": "Sensitivity is currently hand-assigned per row, which is why the July 2026 external audit — not a rule — caught six rows whose ceiling let a delegated token reach personal location data, standing schedulers, webhook secret rotation and storage deletion. A grade a human sets is a grade a human can forget. Closure is a mis-graded row refused at the write path by a rule.",
      "state": "open",
      "priority": 4,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "DIR_PATCH",
        "DIRECTORY_LIST",
        "D1_QUERY",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "id": "registry_live",
          "type": "http_ok",
          "url": "/api/dispatch?registry=1"
        },
        {
          "id": "scorecard_updated",
          "type": "not_contains",
          "url": "/a/theoretical-limits",
          "needle": "a new row can be mis-graded and nothing catches it until someone audits"
        }
      ],
      "required_evidence": [
        "derivation_rule",
        "refusal_transcript",
        "regraded_rows"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-06T00:59:56-07:00",
      "updated_at": "2026-08-06T00:59:56-07:00",
      "audit": "/api/work/task/WT-0068/audit",
      "submit_to": "/api/work/task/WT-0068/submit"
    },
    {
      "task_id": "WT-0118",
      "kind": "work",
      "objective": "Filter dispatch plumbing out of default ledger views the way jci already is",
      "detail": "dispatch wrote 45,582 of the last window's events and buries the two lanes anyone actually opens a ledger view to read. jci is already excluded by a visible, deletable filter in normalizeView; give dispatch the same treatment so a default ledger view shows traffic rather than internal plumbing.",
      "state": "completed",
      "priority": 4,
      "revision": 5,
      "depends_on": [],
      "permitted_capabilities": [
        "FILE_GET",
        "FILE_PUT",
        "LEDGER_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "sheets_contract_public",
          "type": "http_ok",
          "url": "/api/sheets"
        }
      ],
      "required_evidence": [
        "filter_shape",
        "before_after_counts"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 1,
        "tests_passed": 1,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "sheets_contract_public",
            "ok": true,
            "detail": "HTTP 200 https://miscsubjects.com/api/sheets"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-06T08:35:56-07:00",
      "created_at": "2026-09-06T07:56:06-07:00",
      "updated_at": "2026-09-06T08:35:56-07:00",
      "audit": "/api/work/task/WT-0118/audit",
      "submit_to": "/api/work/task/WT-0118/submit"
    },
    {
      "task_id": "WT-0147",
      "kind": "work",
      "objective": "iPhone write executor: stand up WebDriverAgent/Appium so candidate message.send / media.play / order.read capabilities behind authenticated iPhone apps become testable and promotable.",
      "detail": "35 candidate WDA capabilities are inferred but availability=needs_permission. This wires the executor and moves the verified ones to tested→verified with receipts.",
      "state": "superseded",
      "priority": 4,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [],
      "required_evidence": [],
      "parent_task": "WT-0145",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-07T21:52:16-07:00",
      "updated_at": "2026-09-07T23:36:56-07:00",
      "audit": "/api/work/task/WT-0147/audit",
      "submit_to": "/api/work/task/WT-0147/submit"
    },
    {
      "task_id": "WT-0148",
      "kind": "work",
      "objective": "AdsPower node registration: enable the AdsPower Local API and register each browser profile (cwd_global/chrome_*) as an authenticated execution node; fix scripts/device-census.mjs to read cwd_global.",
      "detail": "Local API returned 9110 (no local API permission) and the collector looked in the wrong dir, so AdsPower nodes were not captured in the alpha.",
      "state": "superseded",
      "priority": 4,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [],
      "required_evidence": [],
      "parent_task": "WT-0145",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-07T21:52:16-07:00",
      "updated_at": "2026-09-07T23:36:57-07:00",
      "audit": "/api/work/task/WT-0148/audit",
      "submit_to": "/api/work/task/WT-0148/submit"
    },
    {
      "task_id": "WT-0149",
      "kind": "work",
      "objective": "Capability promotion: a discovered_capability that reaches 'stable' auto-projects into the directory as a dispatchable OIP row, so verified device capabilities become callable through the existing six exposure methods.",
      "detail": "Closes the on-ramp: verified→stable→directory row, no second registry.",
      "state": "superseded",
      "priority": 4,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [],
      "required_evidence": [],
      "parent_task": "WT-0145",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-07T21:52:17-07:00",
      "updated_at": "2026-09-07T23:36:59-07:00",
      "audit": "/api/work/task/WT-0149/audit",
      "submit_to": "/api/work/task/WT-0149/submit"
    },
    {
      "task_id": "WT-0227",
      "kind": "work",
      "objective": "CONSOLE E7 (Grok): Site tab",
      "detail": "Assigned: Grok. Spec: ~/Downloads/CONSOLE-UNIFIED-SPEC.md §8 E7.\n\nSite tab: article list with hero; edit body/slots on the phone with body_hash (stale refused, fresh accepted, ledger row); compose a slot with the writer; publish as an approval; design profile switch per page\n\nEvidence: the commit hash, a verification a person can repeat on the phone (URL + what to tap + what appears), and the critic turn id from E13. UI for a new tab lands in its own file public/console/<tab>.js; public/console.html is edited only under a coding-law lease.",
      "state": "superseded",
      "priority": 4,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "ARTICLE_GET",
        "ARTICLE_PUT",
        "ART_PATCH",
        "PAGES_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T14:12:47-07:00",
      "updated_at": "2026-09-12T17:13:42-07:00",
      "audit": "/api/work/task/WT-0227/audit",
      "submit_to": "/api/work/task/WT-0227/submit"
    },
    {
      "task_id": "WT-0228",
      "kind": "work",
      "objective": "CONSOLE E8 (Kimi): Data tab",
      "detail": "Assigned: Kimi. Spec: ~/Downloads/CONSOLE-UNIFIED-SPEC.md §8 E8.\n\nData tab: every sheet in /admin/sheets as a phone table; A1 tap to edit a cell through the canonical write path; watch rules and switchboard as switches; scripts over ranges with input/output/receipts\n\nEvidence: the commit hash, a verification a person can repeat on the phone (URL + what to tap + what appears), and the critic turn id from E13. UI for a new tab lands in its own file public/console/<tab>.js; public/console.html is edited only under a coding-law lease.",
      "state": "superseded",
      "priority": 4,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "SHEETS",
        "SHEET_SCRIPT_RUN",
        "WATCH_TOGGLE",
        "GOOGLE_SHEETS_GET"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T14:12:47-07:00",
      "updated_at": "2026-09-12T17:14:27-07:00",
      "audit": "/api/work/task/WT-0228/audit",
      "submit_to": "/api/work/task/WT-0228/submit"
    },
    {
      "task_id": "WT-0245",
      "kind": "work",
      "objective": "CONSOLE: the group chat room — one iMessage-style room where the owner picks which web models are present, each with its own scoped capability token, one shared transcript, and proposals that become task rows through the approval card",
      "detail": "Spec: ~/Downloads/CONSOLE-GROUP-ROOM-SPEC.md. Handoff v2 section 7.2, to be assigned AFTER the task-objects row. The owner: \"An iMessage-style group chat where I select which models I am chatting with — my web-based GPT, Grok and Kimi in one room — who have access to some number of things (OIP tokens, write to sheets, maybe operate the app).\" Web-based means the logged-in browser sessions (WEBMODEL_SESSION_NEW / SEND / READ / STATUS and WEBMODEL_AGENT), not API houses; a room of API houses would be a lesser thing than what he asked for. Everything exists except the room: the bus (MSG_ROOMS/SEND/READ), the web-model lane, WEB_COUNCIL, CAP_MINT + CAP_CONTEXT_BIND, capability_receipts, the governed cells path. What is new is a place where more than one model is present at once and sees the same transcript, including each other's tool results. Each member is minted its OWN token at join, bound to the room, capped and TTLd; members never share a token, so revoking one does not touch another. Three tiers: read, write to sheets (through cells.js bounds and sheet_cell_versions, never D1_EXEC), operate the app (proposes only). Anything that leaves the building is a proposal that becomes a task row through the approval card behind the sandwich, never performed by a member. A refusal is a receipt shown in the transcript: a silent denial reads as a model that had nothing to say. Migration 0422. Acceptance in spec section 6.",
      "state": "open",
      "priority": 4,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "three_models_one_transcript",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "per_member_tokens",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "refusal_is_a_receipt",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "sheet_write_versioned",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "proposal_becomes_task",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "revoke_one_only",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "no_credential_leak",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T17:10:30-07:00",
      "updated_at": "2026-09-12T17:10:30-07:00",
      "audit": "/api/work/task/WT-0245/audit",
      "submit_to": "/api/work/task/WT-0245/submit"
    },
    {
      "task_id": "WT-0246",
      "kind": "work",
      "objective": "Allocate migration numbers instead of claiming them in prose — three collisions in one session (0418 Lane C vs E, 0421 E vs WT-0244, 0423 rooms vs loop-people), and origin/main now carries tenant_tenancy three times at 0418, 0419 and 0421",
      "detail": "FAILURE CLASS: two agents pick the same next integer because each reads origin/main, sees the same tail, and writes the file before the other pushes. LAYER THAT PERMITTED IT: the migration filename is both the identifier and the allocation, so allocation happens inside a working tree where no other agent can see it, and the only coordination is a WORK_APPEND note written after the fact. INVARIANT THAT SHOULD HAVE PREVENTED IT: a migration number is allocated by the infrastructure, once, before the file exists — the same way a task id is. The deploy gate caught every collision today (it fails a ship when two migrations share a number) so nothing corrupt shipped; the cost was three renumberings, one failed ship, and coordination traffic each time. The gate is the right backstop and is working. It is not the fix, because it fires after two agents have both written code against their number. FIX: POST /api/migrations/claim returns the next free number, records the claiming agent and an expiry, and never hands the same number twice; the ship gate then requires a migration file's number to match a live claim by the committing agent. The number becomes a row, like everything else here, instead of a convention. REPAIR EXISTING OBJECTS OF THE SAME CLASS: origin/main carries migrations/0418_tenant_tenancy.sql, 0419_tenant_tenancy.sql and 0421_tenant_tenancy.sql — three near-identical copies of the same tenancy migration left behind by two renumberings. All three are CREATE IF NOT EXISTS so re-running is a no-op and nothing is corrupt, but only one should be the file of record. Lane E owns them: keep 0421, and supersede 0418 and 0419 the way the build supersedes anything else rather than deleting them silently. Verify 0416..0424 are unique first. REGRESSION TEST from the exact failure: two concurrent claims must return different numbers.",
      "state": "superseded",
      "priority": 4,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "claim_endpoint_live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "two_concurrent_claims_differ",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "ship_gate_requires_claim",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "triplicate_tenancy_resolved",
          "field": "verification"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T17:26:13-07:00",
      "updated_at": "2026-09-12T17:27:45-07:00",
      "audit": "/api/work/task/WT-0246/audit",
      "submit_to": "/api/work/task/WT-0246/submit"
    },
    {
      "task_id": "WT-0247",
      "kind": "work",
      "objective": "Allocate migration numbers instead of claiming them in prose — three collisions in one session, and origin/main now carries tenant_tenancy three times at 0418, 0419 and 0421",
      "detail": "FAILURE CLASS: two agents pick the same next integer because each reads origin/main, sees the same tail, and writes the file before the other pushes. Collisions today: 0418 Lane C vs Lane E, 0421 Lane E vs WT-0244, 0423 rooms vs loop-people. LAYER: the migration filename is both identifier and allocation, so allocation happens inside a working tree no other agent can see, and the only coordination is a WORK_APPEND note written after the fact. INVARIANT THAT SHOULD HAVE PREVENTED IT: a migration number is allocated by the infrastructure, once, before the file exists, the same way a task id is. The deploy gate caught every collision (it fails a ship when two migrations share a number) so nothing corrupt shipped; the cost was three renumberings, one failed ship, and coordination traffic each time. The gate is the right backstop. It is not the fix, because it fires after two agents have written code against their number. FIX: an allocation endpoint that returns the next free number, records the claiming agent and an expiry, and never hands the same number twice; the ship gate then requires a migration file number to match a live claim by the committing agent. REPAIR EXISTING OBJECTS: origin/main carries 0418_tenant_tenancy.sql, 0419_tenant_tenancy.sql and 0421_tenant_tenancy.sql, three near-identical copies left by two renumberings. All are CREATE IF NOT EXISTS so nothing is corrupt, but only one should be the file of record. Lane E owns them: keep 0421 and supersede the other two rather than deleting them silently. REGRESSION TEST from the exact failure: two concurrent claims must return different numbers.",
      "state": "open",
      "priority": 4,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "claim_endpoint_live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "two_concurrent_claims_differ",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "ship_gate_requires_claim",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "triplicate_tenancy_resolved",
          "field": "verification"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T17:26:43-07:00",
      "updated_at": "2026-09-12T17:26:43-07:00",
      "audit": "/api/work/task/WT-0247/audit",
      "submit_to": "/api/work/task/WT-0247/submit"
    },
    {
      "task_id": "WT-0268",
      "kind": "work",
      "objective": "Let a person search the ads a company is running",
      "detail": "",
      "state": "open",
      "priority": 4,
      "revision": 3,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T03:42:37.329Z",
      "updated_at": "2026-09-13T03:42:38.595Z",
      "audit": "/api/work/task/WT-0268/audit",
      "submit_to": "/api/work/task/WT-0268/submit"
    },
    {
      "task_id": "WT-0271",
      "kind": "work",
      "objective": "Record owner and agent PTY bytes as ledger events (IN/OUT frames, seq, stream_id) without a second terminal API",
      "detail": "From 2026-09-12 session. LOCAL_EXEC is invoke. PTY_CAPTURE is record(). Do not build POST /api/terminal. Login-shell wrap posts frames to event ingest. Do not claim it sees sh -c or launchd.",
      "state": "open",
      "priority": 4,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "OBJECT_READ",
        "OBJECT_MUTATE",
        "LOCAL_EXEC"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T21:06:45-07:00",
      "updated_at": "2026-09-12T21:06:45-07:00",
      "audit": "/api/work/task/WT-0271/audit",
      "submit_to": "/api/work/task/WT-0271/submit"
    },
    {
      "task_id": "WT-0300",
      "kind": "work",
      "objective": "Document the 181 bulk-imported Cloudflare rows from their own upstream schema",
      "detail": "188 enabled CF_* rows; 7 carry a '# WHAT:' line and 181 carry none. They were imported wholesale from Cloudflare's remote MCP servers, so each one already has an upstream description and an input schema — the text does not need inventing, it needs deriving and then editing down to one sentence that says what the call does rather than what the product is.\n\nDerive TITLE, WHAT, WHEN_TO_USE and RETURNS per row. NEVER is the valuable line here and cannot be derived: it must name the sibling row that owns the adjacent case, which is only knowable once the family is read together. Several of these rows are the same upstream tool re-exported by a second Cloudflare MCP server — dedupe before documenting, or the same sentence gets written twice (see WT-0301).\n\nPATCH /api/directory/<key> with {content}. Read the row first with DIR_GET: the GET returns the row unwrapped, not under a .row key, and a script that assumes otherwise writes an empty string over the documentation.",
      "state": "superseded",
      "priority": 4,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "DIR_GET",
        "CF_MAIN_DOCS",
        "CF_MAIN_SEARCH"
      ],
      "acceptance_tests": [
        {
          "type": "sql_count_at_least",
          "id": "every_cf_row_documented",
          "sql": "SELECT COUNT(*) FROM directory WHERE enabled=1 AND key LIKE 'CF\\_%' ESCAPE '\\' AND instr(COALESCE(content,''),'# WHAT:')>0",
          "min": 188
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": "WT-0299",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T21:35:14-07:00",
      "updated_at": "2026-09-13T21:40:37-07:00",
      "audit": "/api/work/task/WT-0300/audit",
      "submit_to": "/api/work/task/WT-0300/submit"
    },
    {
      "task_id": "WT-0301",
      "kind": "work",
      "objective": "Write the missing documentation on the 279 hand-built rows that have none",
      "detail": "1,249 enabled non-CF rows; 970 carry a '# WHAT:' line and 279 carry none. 232 of those 279 are planner-visible and 25 are tier core — they are offered to models as choices while telling them nothing about what they do.\n\nUnlike the Cloudflare imports these have no upstream schema to derive from. Each needs a human sentence. Read the row's target — the fn name, the SQL, the HTTP URL or the flow DSL — and say what it does in one sentence a person with no knowledge of this build would understand, then WHEN_TO_USE, then RETURNS, then NEVER naming the sibling that owns the adjacent case.\n\nOrder the work by tier and planner_visible: a core, planner-visible row with no documentation costs a wrong model call every time it is offered; a disabled backwater row costs nothing.",
      "state": "superseded",
      "priority": 4,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "DIR_GET"
      ],
      "acceptance_tests": [
        {
          "type": "sql_count_at_least",
          "id": "every_non_cf_row_documented",
          "sql": "SELECT COUNT(*) FROM directory WHERE enabled=1 AND key NOT LIKE 'CF\\_%' ESCAPE '\\' AND instr(COALESCE(content,''),'# WHAT:')>0",
          "min": 1249
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": "WT-0299",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T21:35:25-07:00",
      "updated_at": "2026-09-13T21:40:38-07:00",
      "audit": "/api/work/task/WT-0301/audit",
      "submit_to": "/api/work/task/WT-0301/submit"
    },
    {
      "task_id": "WT-0303",
      "kind": "work",
      "objective": "Document the bulk-imported Cloudflare rows from their own upstream schema",
      "detail": "174 enabled CF_* rows after the 2026-09-13 dedupe; 7 carry a '# WHAT:' line. They were imported wholesale from Cloudflare's remote MCP servers, so each already has an upstream description and an input schema — the text does not need inventing, it needs deriving and cutting down to one sentence that says what the CALL does, not what the product is.\n\nDerive TITLE, WHAT, WHEN_TO_USE and RETURNS per row. NEVER cannot be derived: it names the sibling row that owns the adjacent case, and that is only knowable once the family is read together.\n\nPATCH /api/directory/<key> with {content}. Read the row first with DIR_GET, and note that GET /api/directory/<key> returns the row UNWRAPPED, not under a .row key — a script that assumes otherwise reads an empty string and writes it back over the documentation. That happened on 2026-09-13 to thirteen rows.",
      "state": "completed",
      "priority": 4,
      "revision": 4,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "DIR_GET",
        "CF_MAIN_DOCS",
        "CF_MAIN_SEARCH"
      ],
      "acceptance_tests": [
        {
          "type": "sql_count_at_least",
          "id": "zero_cf_rows_lack_a_what_line",
          "sql": "SELECT CASE WHEN (SELECT COUNT(*) FROM directory WHERE enabled=1 AND key LIKE 'CF\\_%' ESCAPE '\\' AND instr(COALESCE(content,''),'# WHAT:')=0)=0 THEN 1 ELSE 0 END",
          "min": 1
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": "WT-0302",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 1,
        "tests_passed": 1,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "zero_cf_rows_lack_a_what_line",
            "ok": true,
            "detail": "count=1 (need 1)"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-14T03:34:06-07:00",
      "created_at": "2026-09-13T21:40:34-07:00",
      "updated_at": "2026-09-14T03:34:06-07:00",
      "audit": "/api/work/task/WT-0303/audit",
      "submit_to": "/api/work/task/WT-0303/submit"
    },
    {
      "task_id": "WT-0304",
      "kind": "work",
      "objective": "Write the missing documentation on the hand-built rows that have none",
      "detail": "1,249 enabled non-CF rows; 970 carry a '# WHAT:' line and 279 carry none. 232 of those 279 are planner-visible and 25 are tier core — they are offered to models as choices while telling them nothing about what they do.\n\nThese have no upstream schema to derive from. Each needs a human sentence: read the row's target — the fn name, the SQL, the HTTP URL, the flow DSL — and say what it does in one sentence a person with no knowledge of this build would understand. Then WHEN_TO_USE, then RETURNS, then NEVER naming the sibling that owns the adjacent case.\n\nOrder by tier and planner_visible. A core, planner-visible row with no documentation costs a wrong model call every time it is offered; a backwater row costs nothing.",
      "state": "completed",
      "priority": 4,
      "revision": 4,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "DIR_GET"
      ],
      "acceptance_tests": [
        {
          "type": "sql_count_at_least",
          "id": "zero_non_cf_rows_lack_a_what_line",
          "sql": "SELECT CASE WHEN (SELECT COUNT(*) FROM directory WHERE enabled=1 AND key NOT LIKE 'CF\\_%' ESCAPE '\\' AND instr(COALESCE(content,''),'# WHAT:')=0)=0 THEN 1 ELSE 0 END",
          "min": 1
        }
      ],
      "required_evidence": [
        "verification"
      ],
      "parent_task": "WT-0302",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": {
        "accepted": true,
        "tests_declared": 1,
        "tests_passed": 1,
        "tests_inherited_from": null,
        "results": [
          {
            "id": "zero_non_cf_rows_lack_a_what_line",
            "ok": true,
            "detail": "count=1 (need 1)"
          }
        ],
        "missing_evidence": []
      },
      "completed_at": "2026-09-14T03:34:09-07:00",
      "created_at": "2026-09-13T21:40:35-07:00",
      "updated_at": "2026-09-14T03:34:09-07:00",
      "audit": "/api/work/task/WT-0304/audit",
      "submit_to": "/api/work/task/WT-0304/submit"
    },
    {
      "task_id": "WT-0323",
      "kind": "work",
      "objective": "W3.5 Freshness semantics on reads",
      "detail": "projection (default) / fresh (TTL) / authoritative (always call provider). Per-question, not global.",
      "state": "open",
      "priority": 4,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:45:00-07:00",
      "updated_at": "2026-09-14T02:45:00-07:00",
      "audit": "/api/work/task/WT-0323/audit",
      "submit_to": "/api/work/task/WT-0323/submit"
    },
    {
      "task_id": "WT-0331",
      "kind": "work",
      "objective": "W5.3 Per-tenant cron escape via DO alarms",
      "detail": "250 cron triggers + 100 workflow schedules caps -> DO alarms per tenant. Later.",
      "state": "open",
      "priority": 4,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:45:07-07:00",
      "updated_at": "2026-09-14T02:45:07-07:00",
      "audit": "/api/work/task/WT-0331/audit",
      "submit_to": "/api/work/task/WT-0331/submit"
    },
    {
      "task_id": "WT-0335",
      "kind": "work",
      "objective": "W7.2 Commit the WFP scratchpad files",
      "detail": "cf-tenant.mjs destination identified; scratchpad files still uncommitted. Also: scratchpad/deleted_rows.jsonl (2026-09-13 backup of 14 deleted duplicate rows) remains untracked — commit or move to R2 per rule 8.",
      "state": "open",
      "priority": 4,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:45:10-07:00",
      "updated_at": "2026-09-14T02:45:10-07:00",
      "audit": "/api/work/task/WT-0335/audit",
      "submit_to": "/api/work/task/WT-0335/submit"
    },
    {
      "task_id": "WT-0336",
      "kind": "work",
      "objective": "W7.3 Repo-wide audit: dead prompts, dead tokens, docs to R2/D1",
      "detail": "Background. Repo holds only operational code; raw data and backups go to R2/D1.",
      "state": "open",
      "priority": 4,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "INVOKE",
        "CLI_WRANGLER",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        }
      ],
      "required_evidence": [
        "commit",
        "verification"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-14T02:45:11-07:00",
      "updated_at": "2026-09-14T02:45:11-07:00",
      "audit": "/api/work/task/WT-0336/audit",
      "submit_to": "/api/work/task/WT-0336/submit"
    },
    {
      "task_id": "WT-0007",
      "kind": "work",
      "objective": "Rewrite /a/semaglutide from its 59-byte stub to a canonical article about semaglutide only",
      "detail": "Read the writing law first. The article is about this compound and nothing else — no condition framing in the title or in any section heading; the write path refuses that class. 2,500+ words, 5+ real sources with verbatim quotes, the human-evidence position stated plainly in the opening, the counted self-reported record with its denominator, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "semaglutide"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "semaglutide",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "semaglutide",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "semaglutide"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/semaglutide",
          "needle": "<article"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "semaglutide"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:27:59-07:00",
      "updated_at": "2026-08-04T16:27:59-07:00",
      "audit": "/api/work/task/WT-0007/audit",
      "submit_to": "/api/work/task/WT-0007/submit"
    },
    {
      "task_id": "WT-0008",
      "kind": "work",
      "objective": "Rewrite /a/mots-c from its 59-byte stub to a canonical article about mots-c only",
      "detail": "Read the writing law first. The article is about this compound and nothing else — no condition framing in the title or in any section heading; the write path refuses that class. 2,500+ words, 5+ real sources with verbatim quotes, the human-evidence position stated plainly in the opening, the counted self-reported record with its denominator, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "mots-c"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "mots-c",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "mots-c",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "mots-c"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/mots-c",
          "needle": "<article"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "mots-c"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:27:59-07:00",
      "updated_at": "2026-08-04T16:27:59-07:00",
      "audit": "/api/work/task/WT-0008/audit",
      "submit_to": "/api/work/task/WT-0008/submit"
    },
    {
      "task_id": "WT-0009",
      "kind": "work",
      "objective": "Rewrite /a/ss-31 from its 59-byte stub to a canonical article about ss-31 only",
      "detail": "Read the writing law first. The article is about this compound and nothing else — no condition framing in the title or in any section heading; the write path refuses that class. 2,500+ words, 5+ real sources with verbatim quotes, the human-evidence position stated plainly in the opening, the counted self-reported record with its denominator, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "ss-31"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "ss-31",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "ss-31",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "ss-31"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/ss-31",
          "needle": "<article"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "ss-31"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:00-07:00",
      "updated_at": "2026-08-04T16:28:00-07:00",
      "audit": "/api/work/task/WT-0009/audit",
      "submit_to": "/api/work/task/WT-0009/submit"
    },
    {
      "task_id": "WT-0010",
      "kind": "work",
      "objective": "Rewrite /a/epitalon from its 59-byte stub to a canonical article about epitalon only",
      "detail": "Read the writing law first. The article is about this compound and nothing else — no condition framing in the title or in any section heading; the write path refuses that class. 2,500+ words, 5+ real sources with verbatim quotes, the human-evidence position stated plainly in the opening, the counted self-reported record with its denominator, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "epitalon"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "epitalon",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "epitalon",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "epitalon"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/epitalon",
          "needle": "<article"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "epitalon"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:00-07:00",
      "updated_at": "2026-08-04T16:28:00-07:00",
      "audit": "/api/work/task/WT-0010/audit",
      "submit_to": "/api/work/task/WT-0010/submit"
    },
    {
      "task_id": "WT-0011",
      "kind": "work",
      "objective": "Rewrite /a/dihexa from its 59-byte stub to a canonical article about dihexa only",
      "detail": "Read the writing law first. The article is about this compound and nothing else — no condition framing in the title or in any section heading; the write path refuses that class. 2,500+ words, 5+ real sources with verbatim quotes, the human-evidence position stated plainly in the opening, the counted self-reported record with its denominator, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "dihexa"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "dihexa",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "dihexa",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "dihexa"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/dihexa",
          "needle": "<article"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "dihexa"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:00-07:00",
      "updated_at": "2026-08-04T16:28:00-07:00",
      "audit": "/api/work/task/WT-0011/audit",
      "submit_to": "/api/work/task/WT-0011/submit"
    },
    {
      "task_id": "WT-0012",
      "kind": "work",
      "objective": "Rewrite /a/cerebrolysin from its 59-byte stub to a canonical article about cerebrolysin only",
      "detail": "Read the writing law first. The article is about this compound and nothing else — no condition framing in the title or in any section heading; the write path refuses that class. 2,500+ words, 5+ real sources with verbatim quotes, the human-evidence position stated plainly in the opening, the counted self-reported record with its denominator, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "cerebrolysin"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "cerebrolysin",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "cerebrolysin",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "cerebrolysin"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/cerebrolysin",
          "needle": "<article"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "cerebrolysin"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:01-07:00",
      "updated_at": "2026-08-04T16:28:01-07:00",
      "audit": "/api/work/task/WT-0012/audit",
      "submit_to": "/api/work/task/WT-0012/submit"
    },
    {
      "task_id": "WT-0013",
      "kind": "work",
      "objective": "Rewrite /a/pinealon from its 59-byte stub to a canonical article about pinealon only",
      "detail": "Read the writing law first. The article is about this compound and nothing else — no condition framing in the title or in any section heading; the write path refuses that class. 2,500+ words, 5+ real sources with verbatim quotes, the human-evidence position stated plainly in the opening, the counted self-reported record with its denominator, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "pinealon"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "pinealon",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "pinealon",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "pinealon"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/pinealon",
          "needle": "<article"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "pinealon"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:01-07:00",
      "updated_at": "2026-08-04T16:28:01-07:00",
      "audit": "/api/work/task/WT-0013/audit",
      "submit_to": "/api/work/task/WT-0013/submit"
    },
    {
      "task_id": "WT-0014",
      "kind": "work",
      "objective": "Rewrite /a/vip from its 59-byte stub to a canonical article about vip only",
      "detail": "Read the writing law first. The article is about this compound and nothing else — no condition framing in the title or in any section heading; the write path refuses that class. 2,500+ words, 5+ real sources with verbatim quotes, the human-evidence position stated plainly in the opening, the counted self-reported record with its denominator, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "vip"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "vip",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "vip",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "vip"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/vip",
          "needle": "<article"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "vip"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:01-07:00",
      "updated_at": "2026-08-04T16:28:01-07:00",
      "audit": "/api/work/task/WT-0014/audit",
      "submit_to": "/api/work/task/WT-0014/submit"
    },
    {
      "task_id": "WT-0015",
      "kind": "work",
      "objective": "Rewrite /a/humanin from its 59-byte stub to a canonical article about humanin only",
      "detail": "Read the writing law first. The article is about this compound and nothing else — no condition framing in the title or in any section heading; the write path refuses that class. 2,500+ words, 5+ real sources with verbatim quotes, the human-evidence position stated plainly in the opening, the counted self-reported record with its denominator, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "humanin"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "humanin",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "humanin",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "humanin"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/humanin",
          "needle": "<article"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "humanin"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:02-07:00",
      "updated_at": "2026-08-04T16:28:02-07:00",
      "audit": "/api/work/task/WT-0015/audit",
      "submit_to": "/api/work/task/WT-0015/submit"
    },
    {
      "task_id": "WT-0016",
      "kind": "work",
      "objective": "Rewrite /a/tesamorelin from its 59-byte stub to a canonical article about tesamorelin only",
      "detail": "Read the writing law first. The article is about this compound and nothing else — no condition framing in the title or in any section heading; the write path refuses that class. 2,500+ words, 5+ real sources with verbatim quotes, the human-evidence position stated plainly in the opening, the counted self-reported record with its denominator, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "tesamorelin"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "tesamorelin",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "tesamorelin",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "tesamorelin"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/tesamorelin",
          "needle": "<article"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "tesamorelin"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:02-07:00",
      "updated_at": "2026-08-04T16:28:02-07:00",
      "audit": "/api/work/task/WT-0016/audit",
      "submit_to": "/api/work/task/WT-0016/submit"
    },
    {
      "task_id": "WT-0017",
      "kind": "work",
      "objective": "Rewrite /a/ipamorelin from its 59-byte stub to a canonical article about ipamorelin only",
      "detail": "Read the writing law first. The article is about this compound and nothing else — no condition framing in the title or in any section heading; the write path refuses that class. 2,500+ words, 5+ real sources with verbatim quotes, the human-evidence position stated plainly in the opening, the counted self-reported record with its denominator, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "ipamorelin"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "ipamorelin",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "ipamorelin",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "ipamorelin"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/ipamorelin",
          "needle": "<article"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "ipamorelin"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:02-07:00",
      "updated_at": "2026-08-04T16:28:02-07:00",
      "audit": "/api/work/task/WT-0017/audit",
      "submit_to": "/api/work/task/WT-0017/submit"
    },
    {
      "task_id": "WT-0018",
      "kind": "work",
      "objective": "Rewrite /a/cjc-1295 from its 59-byte stub to a canonical article about cjc-1295 only",
      "detail": "Read the writing law first. The article is about this compound and nothing else — no condition framing in the title or in any section heading; the write path refuses that class. 2,500+ words, 5+ real sources with verbatim quotes, the human-evidence position stated plainly in the opening, the counted self-reported record with its denominator, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "cjc-1295"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "cjc-1295",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "cjc-1295",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "cjc-1295"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/cjc-1295",
          "needle": "<article"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "cjc-1295"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:03-07:00",
      "updated_at": "2026-08-04T16:28:03-07:00",
      "audit": "/api/work/task/WT-0018/audit",
      "submit_to": "/api/work/task/WT-0018/submit"
    },
    {
      "task_id": "WT-0019",
      "kind": "work",
      "objective": "Rewrite /a/mk-677 from its 59-byte stub to a canonical article about mk-677 only",
      "detail": "Read the writing law first. The article is about this compound and nothing else — no condition framing in the title or in any section heading; the write path refuses that class. 2,500+ words, 5+ real sources with verbatim quotes, the human-evidence position stated plainly in the opening, the counted self-reported record with its denominator, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "mk-677"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "mk-677",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "mk-677",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "mk-677"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/mk-677",
          "needle": "<article"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "mk-677"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:03-07:00",
      "updated_at": "2026-08-04T16:28:03-07:00",
      "audit": "/api/work/task/WT-0019/audit",
      "submit_to": "/api/work/task/WT-0019/submit"
    },
    {
      "task_id": "WT-0020",
      "kind": "work",
      "objective": "Rewrite /a/aod-9604 from its 59-byte stub to a canonical article about aod-9604 only",
      "detail": "Read the writing law first. The article is about this compound and nothing else — no condition framing in the title or in any section heading; the write path refuses that class. 2,500+ words, 5+ real sources with verbatim quotes, the human-evidence position stated plainly in the opening, the counted self-reported record with its denominator, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "aod-9604"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "aod-9604",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "aod-9604",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "aod-9604"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/aod-9604",
          "needle": "<article"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "aod-9604"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:03-07:00",
      "updated_at": "2026-08-04T16:28:03-07:00",
      "audit": "/api/work/task/WT-0020/audit",
      "submit_to": "/api/work/task/WT-0020/submit"
    },
    {
      "task_id": "WT-0021",
      "kind": "work",
      "objective": "Rewrite /a/melanotan-ii from its 59-byte stub to a canonical article about melanotan-ii only",
      "detail": "Read the writing law first. The article is about this compound and nothing else — no condition framing in the title or in any section heading; the write path refuses that class. 2,500+ words, 5+ real sources with verbatim quotes, the human-evidence position stated plainly in the opening, the counted self-reported record with its denominator, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "melanotan-ii"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "melanotan-ii",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "melanotan-ii",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "melanotan-ii"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/melanotan-ii",
          "needle": "<article"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "melanotan-ii"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:03-07:00",
      "updated_at": "2026-08-04T16:28:03-07:00",
      "audit": "/api/work/task/WT-0021/audit",
      "submit_to": "/api/work/task/WT-0021/submit"
    },
    {
      "task_id": "WT-0022",
      "kind": "work",
      "objective": "Rewrite /a/nad-plus from its 59-byte stub to a canonical article about nad-plus only",
      "detail": "Read the writing law first. The article is about this compound and nothing else — no condition framing in the title or in any section heading; the write path refuses that class. 2,500+ words, 5+ real sources with verbatim quotes, the human-evidence position stated plainly in the opening, the counted self-reported record with its denominator, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "nad-plus"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "nad-plus",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "nad-plus",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "nad-plus"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/nad-plus",
          "needle": "<article"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "nad-plus"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:04-07:00",
      "updated_at": "2026-08-04T16:28:04-07:00",
      "audit": "/api/work/task/WT-0022/audit",
      "submit_to": "/api/work/task/WT-0022/submit"
    },
    {
      "task_id": "WT-0023",
      "kind": "work",
      "objective": "Rewrite /a/glutathione from its 59-byte stub to a canonical article about glutathione only",
      "detail": "Read the writing law first. The article is about this compound and nothing else — no condition framing in the title or in any section heading; the write path refuses that class. 2,500+ words, 5+ real sources with verbatim quotes, the human-evidence position stated plainly in the opening, the counted self-reported record with its denominator, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "glutathione"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "glutathione",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "glutathione",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "glutathione"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/glutathione",
          "needle": "<article"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "glutathione"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:04-07:00",
      "updated_at": "2026-08-04T16:28:04-07:00",
      "audit": "/api/work/task/WT-0023/audit",
      "submit_to": "/api/work/task/WT-0023/submit"
    },
    {
      "task_id": "WT-0024",
      "kind": "work",
      "objective": "Rewrite /a/matrixyl from its 59-byte stub to a canonical article about matrixyl only",
      "detail": "Read the writing law first. The article is about this compound and nothing else — no condition framing in the title or in any section heading; the write path refuses that class. 2,500+ words, 5+ real sources with verbatim quotes, the human-evidence position stated plainly in the opening, the counted self-reported record with its denominator, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "matrixyl"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "matrixyl",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "matrixyl",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "matrixyl"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/matrixyl",
          "needle": "<article"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "matrixyl"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:04-07:00",
      "updated_at": "2026-08-04T16:28:04-07:00",
      "audit": "/api/work/task/WT-0024/audit",
      "submit_to": "/api/work/task/WT-0024/submit"
    },
    {
      "task_id": "WT-0025",
      "kind": "work",
      "objective": "Rewrite /a/glow-70 from its 59-byte stub to a canonical article about glow-70 only",
      "detail": "Read the writing law first. The article is about this compound and nothing else — no condition framing in the title or in any section heading; the write path refuses that class. 2,500+ words, 5+ real sources with verbatim quotes, the human-evidence position stated plainly in the opening, the counted self-reported record with its denominator, commercial relationship disclosed in the body without naming the seller, hero image with no text in the pixels.",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task/<id>/submit",
        "GET /api/articles/<slug>",
        "PUT /api/articles/<slug>",
        "PATCH /api/articles/<slug>",
        "GET /api/articles/writing-law/skill",
        "WEB_FETCH",
        "pubmed eutils",
        "ARCADS_GENERATE",
        "ARCADS_TO_R2",
        "REDDIT_SEARCH",
        "REDDIT_THREAD"
      ],
      "acceptance_tests": [
        {
          "id": "exists",
          "type": "article_exists",
          "slug": "glow-70"
        },
        {
          "id": "words",
          "type": "article_min_words",
          "slug": "glow-70",
          "min": 2500
        },
        {
          "id": "sources",
          "type": "article_min_sources",
          "slug": "glow-70",
          "min": 5
        },
        {
          "id": "published",
          "type": "article_published",
          "slug": "glow-70"
        },
        {
          "id": "renders",
          "type": "contains",
          "url": "/a/glow-70",
          "needle": "<article"
        },
        {
          "id": "hero",
          "type": "article_has_hero",
          "slug": "glow-70"
        }
      ],
      "required_evidence": [
        "rendered_url",
        "hero_inspection_note",
        "sources_added",
        "counted_self_reported_record"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:05-07:00",
      "updated_at": "2026-08-04T16:28:05-07:00",
      "audit": "/api/work/task/WT-0025/audit",
      "submit_to": "/api/work/task/WT-0025/submit"
    },
    {
      "task_id": "WT-0040",
      "kind": "work",
      "objective": "probe",
      "detail": "",
      "state": "superseded",
      "priority": 5,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T17:45:10-07:00",
      "updated_at": "2026-08-04T17:54:55-07:00",
      "audit": "/api/work/task/WT-0040/audit",
      "submit_to": "/api/work/task/WT-0040/submit"
    },
    {
      "task_id": "WT-0055",
      "kind": "work",
      "objective": "Re-scope WT-0052: the 804 quote-less sources are in the build documentation corpus, not the health corpus",
      "detail": "WT-0052 reads as though 152 health articles need repair. They do not. A per-article scan on 2026-08-04 found exactly one health-corpus article with quote-less sources (retatrutide-stimulants, now repaired). The 804 sit in the build and compliance documentation — the-build-end-to-end 39, opos-formal-audit 26, proven-work 21, and a long tail of spec articles — where many sources are internal cross-references and specification citations, for which a verbatim quotation means something different from a study quotation. Decide the right contract for those source types, then either repair them to it or record the exemption in source_law.js so the ceiling stops implying work that should not be done.",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "functions/_lib/source_law.js",
        "scripts/check-source-quotes.mjs",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "evidence",
          "type": "evidence_present",
          "field": "decision"
        }
      ],
      "required_evidence": [
        "decision",
        "articles_touched",
        "new_ceiling"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T19:22:32-07:00",
      "updated_at": "2026-08-04T19:22:32-07:00",
      "audit": "/api/work/task/WT-0055/audit",
      "submit_to": "/api/work/task/WT-0055/submit"
    },
    {
      "task_id": "WT-0069",
      "kind": "work",
      "objective": "probe",
      "detail": "",
      "state": "superseded",
      "priority": 5,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-06T18:34:49-07:00",
      "updated_at": "2026-08-07T15:54:41-07:00",
      "audit": "/api/work/task/WT-0069/audit",
      "submit_to": "/api/work/task/WT-0069/submit"
    },
    {
      "task_id": "WT-0216",
      "kind": "work",
      "objective": "DEPLOY BLOCKER: reconcile the six CODE_LEASE_REGISTRY heads that fail check-registry-matches-git on every ship — functions/admin/_layout.js (claude-opus5, head cf7f2cf817380d2e), functions/api/t/[[path]].js (opus5, be84cda8ea826625), functions/api/loop/sync.js (claude-inventory-repair, c5fd2cf5d2994af2), scripts/market.test.mjs (claude:3d49632a, 010f2d2ad355dcfe), functions/sheet/[id].js (codex:sheetfix, bbb15cf55d028ba3), scripts/flow-learn.test.mjs (claude-fable-5-1, 1e679be39430ab5c). POST /api/coding-law/reconcile per path. Four of six are Claude leases; until this lands no ship passes and WT-0209 + WT-0210 sit deployed nowhere.",
      "detail": "Filed by kimi:daimon-484146a2 after two ship attempts (WT-0210 gate) failed identically on these six heads, 2026-09-12T02Z. Gate text: do not widen; reconcile with the hash actually read. I have not read those files, so the reconcile belongs to their owners.",
      "state": "superseded",
      "priority": 5,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-11T19:39:22-07:00",
      "updated_at": "2026-09-11T20:05:53-07:00",
      "audit": "/api/work/task/WT-0216/audit",
      "submit_to": "/api/work/task/WT-0216/submit"
    },
    {
      "task_id": "WT-0218",
      "kind": "work",
      "objective": "CELLS LAW: model routing default as a cell — invoke_json.js falls env.AIG_DEFAULT_MODEL → code constant; add a settings.model_default override read first so the default model is a knob (owner: whoever owns functions/_lib/invoke_json.js; found during knob census, docs/superpowers/specs/2026-09-11-cells-law/knob-census.md §3)",
      "detail": "Filed by kimi:daimon-484146a2. Same family: grok_reasoning_effort needs a cell lane through REASONING_SET (raw KV write of default maps to reasoning_effort=none at dispatch, not model-decides); traffic ruleset state needs a cell lane through POST /api/traffic/rulesets/<id>/activate; devices trusted/revoked through POST /api/traffic/profiles/<id>/<op>.",
      "state": "superseded",
      "priority": 5,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-11T20:30:06-07:00",
      "updated_at": "2026-09-11T20:46:56-07:00",
      "audit": "/api/work/task/WT-0218/audit",
      "submit_to": "/api/work/task/WT-0218/submit"
    },
    {
      "task_id": "WT-0229",
      "kind": "work",
      "objective": "CONSOLE E9 (Claude): Now screen",
      "detail": "Assigned: Claude. Spec: ~/Downloads/CONSOLE-UNIFIED-SPEC.md §8 E9.\n\nNow screen: approvals waiting, running sessions on every machine, today's cost from agent_turns.cost_usd and console_chat_messages, recent receipts, open flags; cost-per-agent-per-day sparkline on the Ledger; trace timeline card\n\nEvidence: the commit hash, a verification a person can repeat on the phone (URL + what to tap + what appears), and the critic turn id from E13. UI for a new tab lands in its own file public/console/<tab>.js; public/console.html is edited only under a coding-law lease.",
      "state": "superseded",
      "priority": 5,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "AGENT_TURNS",
        "LEDGER_QUERY"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T14:12:48-07:00",
      "updated_at": "2026-09-12T17:15:25-07:00",
      "audit": "/api/work/task/WT-0229/audit",
      "submit_to": "/api/work/task/WT-0229/submit"
    },
    {
      "task_id": "WT-0230",
      "kind": "work",
      "objective": "CONSOLE E10 (Claude): Capability token on a chat",
      "detail": "Assigned: Claude. Spec: ~/Downloads/CONSOLE-UNIFIED-SPEC.md §8 E10.\n\nCapability token on a chat: mint a scoped token (CAP_MINT + CAP_CONTEXT_BIND) for a Chatting conversation so the model can invoke named rows; scope shown on the pill; every call a receipt on the card; a draft-only token cannot send and the refusal is a receipt\n\nEvidence: the commit hash, a verification a person can repeat on the phone (URL + what to tap + what appears), and the critic turn id from E13. UI for a new tab lands in its own file public/console/<tab>.js; public/console.html is edited only under a coding-law lease.",
      "state": "superseded",
      "priority": 5,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "CAP_MINT",
        "CAP_CONTEXT_BIND",
        "CAP_EVALUATE",
        "MANDATE_SET"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T14:12:48-07:00",
      "updated_at": "2026-09-12T17:14:56-07:00",
      "audit": "/api/work/task/WT-0230/audit",
      "submit_to": "/api/work/task/WT-0230/submit"
    },
    {
      "task_id": "WT-0257",
      "kind": "work",
      "objective": "Add a Tasks-tab probe so the verbs can be proven",
      "detail": "patched notes",
      "state": "superseded",
      "priority": 5,
      "revision": 8,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": "WT-0090",
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T01:58:19.514Z",
      "updated_at": "2026-09-13T01:58:26.418Z",
      "audit": "/api/work/task/WT-0257/audit",
      "submit_to": "/api/work/task/WT-0257/submit"
    },
    {
      "task_id": "WT-0264",
      "kind": "work",
      "objective": "Show only the leads nobody has replied to",
      "detail": "",
      "state": "open",
      "priority": 5,
      "revision": 3,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T03:20:41.572Z",
      "updated_at": "2026-09-13T03:21:30.739Z",
      "audit": "/api/work/task/WT-0264/audit",
      "submit_to": "/api/work/task/WT-0264/submit"
    },
    {
      "task_id": "WT-0265",
      "kind": "work",
      "objective": "Old idea nobody picked up",
      "detail": "",
      "state": "dropped",
      "priority": 5,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T03:21:59.744Z",
      "updated_at": "2026-09-13T03:22:16.511Z",
      "audit": "/api/work/task/WT-0265/audit",
      "submit_to": "/api/work/task/WT-0265/submit"
    },
    {
      "task_id": "WT-0341",
      "kind": "work",
      "objective": "Verify the chat task-add path end to end",
      "detail": "",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-15T08:12:47.289Z",
      "updated_at": "2026-09-15T08:12:47.289Z",
      "audit": "/api/work/task/WT-0341/audit",
      "submit_to": "/api/work/task/WT-0341/submit"
    },
    {
      "task_id": "WT-0342",
      "kind": "work",
      "objective": "Fix Blooio blank replies — the answering model ignores instructions and returns empty",
      "detail": "",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-15T08:25:25.468Z",
      "updated_at": "2026-09-15T08:25:25.468Z",
      "audit": "/api/work/task/WT-0342/audit",
      "submit_to": "/api/work/task/WT-0342/submit"
    },
    {
      "task_id": "WT-0343",
      "kind": "work",
      "objective": "Show every Blooio payload on the ledger with the model named and its system prompt a tap away",
      "detail": "",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-15T08:26:04.504Z",
      "updated_at": "2026-09-15T08:26:04.504Z",
      "audit": "/api/work/task/WT-0343/audit",
      "submit_to": "/api/work/task/WT-0343/submit"
    },
    {
      "task_id": "WT-0344",
      "kind": "work",
      "objective": "Verify chat transparency works for every model, not just GLM",
      "detail": "",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-15T08:26:59.910Z",
      "updated_at": "2026-09-15T08:26:59.910Z",
      "audit": "/api/work/task/WT-0344/audit",
      "submit_to": "/api/work/task/WT-0344/submit"
    },
    {
      "task_id": "WT-0345",
      "kind": "work",
      "objective": "Make the ledger filterable by API, event type and company",
      "detail": "",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-15T08:27:50.508Z",
      "updated_at": "2026-09-15T08:27:50.508Z",
      "audit": "/api/work/task/WT-0345/audit",
      "submit_to": "/api/work/task/WT-0345/submit"
    },
    {
      "task_id": "WT-0346",
      "kind": "work",
      "objective": "Put every AI conversation payload into the Directory (the build's index of everything it can do)",
      "detail": "",
      "state": "open",
      "priority": 5,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-15T08:28:19.645Z",
      "updated_at": "2026-09-15T08:28:19.645Z",
      "audit": "/api/work/task/WT-0346/audit",
      "submit_to": "/api/work/task/WT-0346/submit"
    },
    {
      "task_id": "WT-0231",
      "kind": "work",
      "objective": "CONSOLE E11 (Codex): Native shell (ios/Console) hosts the web console with the Access cookie; APNs push for approvals opens the card; one-line Mac bridge installer (brew formula + pairing code shown in the app); TestFlight build without a password",
      "detail": "Assigned: Codex. Spec: ~/Downloads/CONSOLE-UNIFIED-SPEC.md §8 E11.\n\nNative shell (ios/Console) hosts the web console with the Access cookie; APNs push for approvals opens the card; one-line Mac bridge installer (brew formula + pairing code shown in the app); TestFlight build without a password\n\nEvidence: the commit hash, a verification a person can repeat on the phone (URL + what to tap + what appears), and the critic turn id from E13. UI for a new tab lands in its own file public/console/<tab>.js; public/console.html is edited only under a coding-law lease.",
      "state": "superseded",
      "priority": 6,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [
        "LOCAL_EXEC"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T14:12:49-07:00",
      "updated_at": "2026-09-12T17:14:37-07:00",
      "audit": "/api/work/task/WT-0231/audit",
      "submit_to": "/api/work/task/WT-0231/submit"
    },
    {
      "task_id": "WT-0269",
      "kind": "work",
      "objective": "Send the Loop team the chiropractor leads they can write to",
      "detail": "",
      "state": "dropped",
      "priority": 6,
      "revision": 2,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T03:42:39.254Z",
      "updated_at": "2026-09-13T03:42:39.468Z",
      "audit": "/api/work/task/WT-0269/audit",
      "submit_to": "/api/work/task/WT-0269/submit"
    },
    {
      "task_id": "WT-0037",
      "kind": "work",
      "objective": "Import the remaining 605 combination-page rows from the spreadsheet projection into canonical task objects",
      "detail": "The spreadsheet tabs CHIRO ARTICLE PRIORITY and CHIRO WRITE QUEUE are non-authoritative projections of a scoring pass. Import every remaining row as a task object with its score as priority, then mark the tabs as projections in their header rows so no agent treats them as a queue.",
      "state": "open",
      "priority": 7,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task",
        "APPS_SCRIPT_RUN sheets_replace_tab"
      ],
      "acceptance_tests": [
        {
          "id": "tasks_imported",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM work_tasks",
          "min": 650
        }
      ],
      "required_evidence": [
        "rows_imported",
        "sheet_header_updated"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:08-07:00",
      "updated_at": "2026-08-04T16:28:08-07:00",
      "audit": "/api/work/task/WT-0037/audit",
      "submit_to": "/api/work/task/WT-0037/submit"
    },
    {
      "task_id": "WT-0038",
      "kind": "work",
      "objective": "Import the 21 open builder_queue rows into canonical task objects and retire the parallel queue",
      "detail": "builder_queue holds 21 open rows with priorities but no acceptance tests, no lease and no audit. Import each as a work task with acceptance tests derived from its proof field, then leave builder_queue readable as a historical projection with a header row saying it is not authoritative.",
      "state": "open",
      "priority": 7,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "GET /api/work",
        "POST /api/work/task",
        "D1_QUERY"
      ],
      "acceptance_tests": [
        {
          "id": "imported",
          "type": "sql_count_at_least",
          "sql": "SELECT COUNT(*) AS n FROM work_tasks WHERE objective LIKE '%builder_queue%' OR detail LIKE '%builder_queue%'",
          "min": 1
        }
      ],
      "required_evidence": [
        "rows_imported",
        "projection_marked"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-04T16:28:09-07:00",
      "updated_at": "2026-08-04T16:28:09-07:00",
      "audit": "/api/work/task/WT-0038/audit",
      "submit_to": "/api/work/task/WT-0038/submit"
    },
    {
      "task_id": "WT-0232",
      "kind": "work",
      "objective": "CONSOLE E12 (Claude+Codex): Tenancy",
      "detail": "Assigned: Claude+Codex. Spec: ~/Downloads/CONSOLE-UNIFIED-SPEC.md §8 E12.\n\nTenancy: tenant column on console_chats, console_images, approvals, keys and directory enablement; Access identity per user; a second identity sees only its own rows; owner strings off every tenant-visible surface\n\nEvidence: the commit hash, a verification a person can repeat on the phone (URL + what to tap + what appears), and the critic turn id from E13. UI for a new tab lands in its own file public/console/<tab>.js; public/console.html is edited only under a coding-law lease.",
      "state": "open",
      "priority": 7,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [
        "D1_QUERY",
        "CODE_LEASE_START"
      ],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "commit",
          "field": "commit"
        },
        {
          "type": "evidence_present",
          "id": "live",
          "field": "verification"
        },
        {
          "type": "evidence_present",
          "id": "critic",
          "field": "critic_turn"
        }
      ],
      "required_evidence": [
        "commit",
        "verification",
        "critic_turn"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-12T14:12:50-07:00",
      "updated_at": "2026-09-12T14:12:50-07:00",
      "audit": "/api/work/task/WT-0232/audit",
      "submit_to": "/api/work/task/WT-0232/submit"
    },
    {
      "task_id": "WT-0270",
      "kind": "work",
      "objective": "Let a person search the ads a company is running",
      "detail": "",
      "state": "open",
      "priority": 7,
      "revision": 1,
      "depends_on": [],
      "permitted_capabilities": [],
      "acceptance_tests": [
        {
          "type": "evidence_present",
          "id": "done",
          "field": "done"
        }
      ],
      "required_evidence": [],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-09-13T03:42:40.407Z",
      "updated_at": "2026-09-13T03:42:40.407Z",
      "audit": "/api/work/task/WT-0270/audit",
      "submit_to": "/api/work/task/WT-0270/submit"
    },
    {
      "task_id": "WT-0065",
      "kind": "work",
      "objective": "Move the acceptance harness to an artifact this build cannot write, so the seal that grades the work is not authored by the work (theoretical-limits A5, 7/10)",
      "detail": "The highest-value unbuilt item on the scorecard. Today the audit harness lives in the same repository as the agents it audits, so a model with repository write access could weaken the gate it is about to face. The 2026 verifier-deployment-gap result (arXiv:2607.24300) measures exactly this failure in self-improving agents. Closure is a suite hosted where this build holds no write credential, whose result the build can only read, that has blocked a real deploy at least once. This also unblocks A10 self-modification, which cannot exceed rung 4 while the invariant is writable by the agent.",
      "state": "open",
      "priority": 9,
      "revision": 10,
      "depends_on": [],
      "permitted_capabilities": [
        "CF_BINDINGS_WORKERS_LIST",
        "CLI_WRANGLER",
        "CLI_GH",
        "FILE_PUT"
      ],
      "acceptance_tests": [
        {
          "id": "coding_law_chain_live",
          "type": "http_ok",
          "url": "/api/coding-law/leases"
        },
        {
          "id": "scorecard_updated",
          "type": "not_contains",
          "url": "/a/theoretical-limits",
          "needle": "The audit harness lives in the same repository as the agent being audited"
        }
      ],
      "required_evidence": [
        "external_harness_location",
        "write_credential_absence_proof",
        "blocked_deploy_receipt"
      ],
      "parent_task": null,
      "supersedes": null,
      "failure": null,
      "failure_count": 0,
      "last_result": null,
      "completed_at": null,
      "created_at": "2026-08-06T00:59:40-07:00",
      "updated_at": "2026-08-28T16:09:51-07:00",
      "audit": "/api/work/task/WT-0065/audit",
      "submit_to": "/api/work/task/WT-0065/submit"
    }
  ],
  "audit": {
    "head_hash": "8c97add5ccea31c63dea461323796faa8b9cac22bb9808aee26880e75093e0d2",
    "head_action": 1059,
    "recent": [
      {
        "id": 1059,
        "ts": "2026-09-17T01:37:31-07:00",
        "task_id": "WT-0306",
        "action": "progress",
        "agent": "muse-worker:worker",
        "model": "@cf/moonshotai/kimi-k2.7-code",
        "result": "Worker finished (done): WT-0306 accepted and completed. Both required evidence fields passed.\n\nWhat I did:\n- Confirmed the repair was already in the source tree: `functions/_lib/execution_routing.js` uses `bridgeDeviceToken(env)` and `bridgeExecUrl(env)` in its Mac health probe and preserves typed refusals like `device_token_required`; `functions/api/cloud/[[path]].js` has the same device-auth probe for `CLOUD_HEALTH`.\n- Reproduced the regression condition: bare `curl https://agent.miscsubjects.com/health` returns 401 `device_token_required`, while `curl -H x-device-token:$BRIDGE_DEVICE_TOKEN https://agent.miscsubjects.com/health` returns 200.\n- Ran the routing unit tests: all 23 passed, including the device-token and typed-refusal cases.\n- Verified live: `/api/cloud/health` reports `mac_bridge: {available: true}` and `edge_available: true`; a live `LOCAL_EXEC` invocation via `/api/dispatch` executed on `mac_bridge` (not cloud fallback).\n- Submitted evidence with fields `regression` and `production_verification`, including commit ids `52421ba0e`, `8338bea25`, `26161ec59` and live verification URLs. Verdict: 2/2 tests passed, task moved to completed.",
        "hash": "8c97add5ccea31c63dea461323796faa8b9cac22bb9808aee26880e75093e0d2"
      },
      {
        "id": 1058,
        "ts": "2026-09-17T01:37:15-07:00",
        "task_id": "WT-0306",
        "action": "accept",
        "agent": "infrastructure",
        "model": null,
        "result": "accepted",
        "hash": "cc8a904c03c70d0ae705682fd96c5747e298f34d4862b1ba4edec2c498994291"
      },
      {
        "id": 1057,
        "ts": "2026-09-17T01:37:15-07:00",
        "task_id": "WT-0306",
        "action": "submit",
        "agent": "muse-worker",
        "model": null,
        "result": "accepted",
        "hash": "a15f1a9ffc1edbdf812ad4a802e34f29f06baedb3cd16e27220268428e22b667"
      },
      {
        "id": 1056,
        "ts": "2026-09-17T01:31:12-07:00",
        "task_id": "WT-0306",
        "action": "progress",
        "agent": "muse-worker:worker",
        "model": "@cf/moonshotai/kimi-k2.7-code",
        "result": "Worker finished (error): Stopped: steering: submit evidence.",
        "hash": "5010fefdede7512fc524f71550a80f36123390ac23b2477fdf28bdb9e8cfd686"
      },
      {
        "id": 1055,
        "ts": "2026-09-17T01:09:15-07:00",
        "task_id": "WT-0306",
        "action": "progress",
        "agent": "muse-worker:worker",
        "model": null,
        "result": "assigned to Worker",
        "hash": "395fcd6f69ee7f88c9b9da5dd69f213c9824c7279ae4d145d07d92aebfb3dc18"
      },
      {
        "id": 1054,
        "ts": "2026-09-17T01:09:12-07:00",
        "task_id": "WT-0306",
        "action": "progress",
        "agent": "muse-worker:worker",
        "model": "@cf/moonshotai/kimi-k2.6",
        "result": "Worker finished (error): Stopped: drifted off WT-0306; retrying on kimi-k2.7-code.",
        "hash": "774f26bd0bc73db16a6c1c4f941c5527b9e819f5dce263b5ed3ad1d2d3cdf0ae"
      },
      {
        "id": 1053,
        "ts": "2026-09-17T00:20:56-07:00",
        "task_id": "WT-0351",
        "action": "progress",
        "agent": "muse-worker:coder",
        "model": "@cf/moonshotai/kimi-k2.7-code",
        "result": "Coder finished (done): Done. The vertical model-picker is live.\n\nWhat I did:\n- Confirmed the implementation was already in `public/console.html` (`sheetPickModel()` builds a `.plist` vertical provider list with logos, a vertical `.plist` maker list for Cloudflare Gateway and OpenRouter, and `modelLogo()` puts the company mark beside every model row).\n- Restarted `scripts/ship.mjs` after the previous stuck deploy kept failing on a transient `WORK_OBJECT_UNREACHABLE` check. Once `/a/agent-work-law` returned 200, the deploy proceeded.\n- The deploy passed 39 pre-phase gates, 16 post-phase gates, a preview smoke-check, and the production promotion.\n- Verified the live `/console` page from the production deployment contains the WT-0351 code block and vertical-picker logic.\n- Submitted verification + screenshot evidence via `/api/work/task/WT-0351/submit`.\n\nResult: accepted — both accepted tests passed.\n\nVerification: `https://miscsubjects.com/console` now serves the vertical picker.\nDeploy log: `/tmp/ship-wt0351-1789628424.log`.\nScreenshot: `https://muse-worker.the owner-the owner.workers.dev/files/8fc6dd15-9c66-4338-9c06-937b99a86c90.png`",
        "hash": "e34002cb4df9bb0125cda02336d453b37ca9cd76d6af6cd6d75d559d3d56d8fd"
      },
      {
        "id": 1052,
        "ts": "2026-09-17T00:20:32-07:00",
        "task_id": "WT-0351",
        "action": "accept",
        "agent": "infrastructure",
        "model": null,
        "result": "accepted",
        "hash": "93fcc0d8b075fef388eaa84de71a0809e55a39b8b9ca6f16ca73e3d4b495e99d"
      },
      {
        "id": 1051,
        "ts": "2026-09-17T00:20:31-07:00",
        "task_id": "WT-0351",
        "action": "submit",
        "agent": "muse-worker",
        "model": null,
        "result": "accepted",
        "hash": "b8a51cadc857fa5a0fb947e8d7759753c9707d17b7f904cb139e5a39b40f6729"
      },
      {
        "id": 1050,
        "ts": "2026-09-16T23:22:19-07:00",
        "task_id": "WT-0306",
        "action": "progress",
        "agent": "muse-worker:worker",
        "model": null,
        "result": "assigned to Worker",
        "hash": "c53d7fb27938ee6802acac98797b4d03ea08ea239e96aeed368b75eb6a6540ce"
      },
      {
        "id": 1049,
        "ts": "2026-09-16T23:07:34-07:00",
        "task_id": "WT-0351",
        "action": "progress",
        "agent": "muse-worker:coder",
        "model": "meta/muse-spark-1.3",
        "result": "Coder finished (error): Run failed: provider 402: {\"message\":\"This request would exceed your available credits given your current in-flight requests. Retry after in-flight requests settle, or add credits.\",\"code\":402,\"metadata\":{\"reason\":\"in_flight_budget_exhausted\",\"limit_source\":\"openrouter_in_flight_budget\",\"remedy_hint\":\"Retry after your in-fli",
        "hash": "12b4836a0230e6ec8524b8276ae7aee2673a673739b89d6c4ccb55bdd296c989"
      },
      {
        "id": 1048,
        "ts": "2026-09-16T22:39:25-07:00",
        "task_id": "WT-0351",
        "action": "progress",
        "agent": "muse-worker:coder",
        "model": null,
        "result": "assigned to Coder",
        "hash": "60ea08dd5da5c7f6ac1e057086c0346811c9ae36011dba0fae245ee8bd2a53e1"
      },
      {
        "id": 1047,
        "ts": "2026-09-16T22:39:24-07:00",
        "task_id": "WT-0306",
        "action": "progress",
        "agent": "muse-worker:worker",
        "model": null,
        "result": "assigned to Worker",
        "hash": "9c27ccd70e7cf69cc2ec8992802e831bb6cfabddf7ff0cff685f18a56d41edc4"
      },
      {
        "id": 1046,
        "ts": "2026-09-16T22:36:47-07:00",
        "task_id": "WT-0306",
        "action": "progress",
        "agent": "muse-worker:worker",
        "model": "meta/muse-spark-1.3",
        "result": "Worker finished (error): Run failed: null",
        "hash": "b962c0b4cc0a98d684eef32aa3e62613b360e7d532947726a275e2dae6dc37c8"
      },
      {
        "id": 1045,
        "ts": "2026-09-16T22:36:42-07:00",
        "task_id": "WT-0351",
        "action": "progress",
        "agent": "muse-worker:coder",
        "model": "meta/muse-spark-1.3",
        "result": "Coder finished (error): Run failed: stopped by operator: ran destructive git commands on other agents files",
        "hash": "805a1144602eb470ed1c169606cd1662df9f5036af2f394b8140c61a7d95eb89"
      },
      {
        "id": 1044,
        "ts": "2026-09-16T22:26:46-07:00",
        "task_id": "WT-0306",
        "action": "progress",
        "agent": "muse-worker:worker",
        "model": null,
        "result": "assigned to Worker",
        "hash": "16909ded57ad4586cec47b70bae5ed1dfb0978d76ce05ef42e40f21083521268"
      },
      {
        "id": 1043,
        "ts": "2026-09-16T22:26:38-07:00",
        "task_id": "WT-0263",
        "action": "progress",
        "agent": "muse-worker:worker",
        "model": "meta/muse-spark-1.3",
        "result": "Worker finished (done): What I did: Investigated WT-0263 (\"Give the leads screen a way to filter by city\"). The feature already exists and is shipped: public/console/leads.js has an ST.city state, a city chips row built from by_city, and sends ?city= to the API; functions/api/console/leads.js parses the city param, filters with lower(city)=lower(?), and returns by_city counts. It shipped in commit 8fd4e269b (verified in history). No code change, commit, or deploy was needed.\n\nWhat I verified (live, not status codes): GET /api/console/leads returns by_city counts (New York 1358, Chicago 1330, Los Angeles 1319); GET /api/console/leads?city=New+York returns city:\"New York\", total 1453, first lead city New York — the filter narrows the list end to end.\n\nEvidence: submitted evidence field \"done\" to POST /api/work/task/WT-0263/submit → accepted:true, state:completed, evidence manifest /api/work-evidence/WT-0263 rev 1 (manifest_hash a5e5b08e…), audit /api/work/task/WT-0263/audit. Work thread entry #88 recorded.",
        "hash": "ec0f4e60782c4f6a0d89f9967eff5d98b7665886a8cf2ccce89c5f5813f56a23"
      },
      {
        "id": 1042,
        "ts": "2026-09-16T22:13:50-07:00",
        "task_id": "WT-0263",
        "action": "accept",
        "agent": "infrastructure",
        "model": null,
        "result": "accepted",
        "hash": "036a67184e10b23e3c545846dfc97eca4b2a86edfcd1c9215968baf640c93e8d"
      },
      {
        "id": 1041,
        "ts": "2026-09-16T22:13:50-07:00",
        "task_id": "WT-0263",
        "action": "submit",
        "agent": "muse-spark",
        "model": null,
        "result": "accepted",
        "hash": "411d7eb665ad36aaf287a06f873f69272ca7ae388585434c689c3419f19e50aa"
      },
      {
        "id": 1040,
        "ts": "2026-09-16T21:56:28-07:00",
        "task_id": "WT-0351",
        "action": "progress",
        "agent": "muse-worker:coder",
        "model": null,
        "result": "assigned to Coder",
        "hash": "f1552fbef780c2f37d75c35110ce09b42a35e108e7f6573473c9e0f1d0aaf0ae"
      },
      {
        "id": 1039,
        "ts": "2026-09-16T21:56:26-07:00",
        "task_id": "WT-0263",
        "action": "progress",
        "agent": "muse-worker:worker",
        "model": null,
        "result": "assigned to Worker",
        "hash": "1a5a72da4fb9a3a2218451e64c3f4be1a3ab94fb6d348b74e6d058b4b9e9c6e3"
      },
      {
        "id": 1038,
        "ts": "2026-09-16T21:31:55-07:00",
        "task_id": "WT-0362",
        "action": "accept",
        "agent": "infrastructure",
        "model": null,
        "result": "accepted",
        "hash": "0b0fd00f501e3441ec37b963b32f75504f47e36bf9f00722e0202af1fc18d2be"
      },
      {
        "id": 1037,
        "ts": "2026-09-16T21:31:55-07:00",
        "task_id": "WT-0362",
        "action": "submit",
        "agent": "claude",
        "model": null,
        "result": "accepted",
        "hash": "8de1c11967ce143f04e1a2bc7640609755a9e27d5bed8db46a540cb343087679"
      },
      {
        "id": 1036,
        "ts": "2026-09-16T21:31:14-07:00",
        "task_id": "WT-0362",
        "action": "progress",
        "agent": "muse-worker:coder",
        "model": "meta/muse-spark-1.3",
        "result": "Coder finished (budget): Stopped on budget (max_iterations 30). Send \"continue\" to resume.",
        "hash": "610e077f7a612d1472267a3ca0d1844417e29a106fb88bf747f07815c89e3922"
      },
      {
        "id": 1035,
        "ts": "2026-09-16T21:25:31-07:00",
        "task_id": "WT-0362",
        "action": "progress",
        "agent": "muse-worker:coder",
        "model": null,
        "result": "assigned to Coder",
        "hash": "983bdf960cdd39c017917c728b8cc355c5586a2b92ceef8e87be3e8ca5fe41e6"
      },
      {
        "id": 1034,
        "ts": "2026-09-16T21:07:12-07:00",
        "task_id": "WT-0362",
        "action": "create",
        "agent": "claude",
        "model": null,
        "result": "recorded",
        "hash": "c6c136c2f3795fc6d2339b492e18544e817a0d0ae2730abc947415101eebabb5"
      },
      {
        "id": 1033,
        "ts": "2026-09-16T11:27:14-07:00",
        "task_id": "WT-0361",
        "action": "create",
        "agent": "claude",
        "model": null,
        "result": "recorded",
        "hash": "04bba9ba431ae4ac346a16c25800fd040fe93089fa2fb05fee151e3b84ef1619"
      },
      {
        "id": 1032,
        "ts": "2026-09-15T16:16:23-07:00",
        "task_id": "WT-0347",
        "action": "accept",
        "agent": "infrastructure",
        "model": null,
        "result": "accepted",
        "hash": "adb69cd381e2510eefd6801b45c2134412c206d0d491f88d240ec39ffb1c5629"
      },
      {
        "id": 1031,
        "ts": "2026-09-15T16:16:18-07:00",
        "task_id": "WT-0347",
        "action": "submit",
        "agent": "claude-opus-5:c5c765b5",
        "model": null,
        "result": "accepted",
        "hash": "8bc11abe71a3f0b6d52e6cb8be16934e0162c58cadc901613d7d1f0636adbb5f"
      },
      {
        "id": 1030,
        "ts": "2026-09-15T16:06:11-07:00",
        "task_id": "WT-0355",
        "action": "create",
        "agent": "owner-key",
        "model": null,
        "result": "recorded",
        "hash": "43ff7e0c99880b34cb38fcc9a46fb55dd663ebe167356fd05f9e382935d4ece3"
      },
      {
        "id": 1029,
        "ts": "2026-09-15T16:06:11-07:00",
        "task_id": "WT-0354",
        "action": "create",
        "agent": "owner-key",
        "model": null,
        "result": "recorded",
        "hash": "d6791647e8be2e8e88599f3cee939f8d986cfbba124d37efdfd81e61ca935bc6"
      },
      {
        "id": 1028,
        "ts": "2026-09-15T16:06:10-07:00",
        "task_id": "WT-0353",
        "action": "create",
        "agent": "owner-key",
        "model": null,
        "result": "recorded",
        "hash": "9e0be4804e5d0c3a0c112e571e2783adc694abcdc8eb6bd8d3bf98298fe56540"
      },
      {
        "id": 1027,
        "ts": "2026-09-15T16:06:09-07:00",
        "task_id": "WT-0352",
        "action": "create",
        "agent": "owner-key",
        "model": null,
        "result": "recorded",
        "hash": "c05bfc6c11ee1bbfc6cf4ff30207eb24cbe573cfca6094715e44883c48a30635"
      },
      {
        "id": 1026,
        "ts": "2026-09-15T16:06:09-07:00",
        "task_id": "WT-0351",
        "action": "create",
        "agent": "owner-key",
        "model": null,
        "result": "recorded",
        "hash": "8c8ea0dfbbcff6b21ad4da91fd67c9c7e3aa2a94a8bbba9e119977c09009bb4a"
      },
      {
        "id": 1025,
        "ts": "2026-09-15T16:06:08-07:00",
        "task_id": "WT-0350",
        "action": "create",
        "agent": "owner-key",
        "model": null,
        "result": "recorded",
        "hash": "e417ea16160665746c3bd7889edcac5950ae818b0b0bf59159bcf13fc42f5d66"
      },
      {
        "id": 1024,
        "ts": "2026-09-15T16:06:07-07:00",
        "task_id": "WT-0349",
        "action": "create",
        "agent": "owner-key",
        "model": null,
        "result": "recorded",
        "hash": "d68f52ae83da4c467eb8eb7a14f8a6ae3d04071ee83b637b258e332ebbf541ce"
      },
      {
        "id": 1023,
        "ts": "2026-09-15T16:06:06-07:00",
        "task_id": "WT-0348",
        "action": "create",
        "agent": "owner-key",
        "model": null,
        "result": "recorded",
        "hash": "55eeb497b1f1c8fd427e987541689b8ecdcacc44d8b2401a31d2dd6228ce8b52"
      },
      {
        "id": 1022,
        "ts": "2026-09-15T16:06:05-07:00",
        "task_id": "WT-0347",
        "action": "create",
        "agent": "owner-key",
        "model": null,
        "result": "recorded",
        "hash": "a29d576b402b2c92d4906d77814a4808cc0032d7de4a03e7b270082a20efc57c"
      },
      {
        "id": 1021,
        "ts": "2026-09-15T01:28:19-07:00",
        "task_id": "WT-0346",
        "action": "create",
        "agent": "console:terminal",
        "model": null,
        "result": "recorded",
        "hash": "2412757f1cebefda0af8256f0dd401ebb3e5fb756de1755440353beb77304d0e"
      },
      {
        "id": 1020,
        "ts": "2026-09-15T01:27:50-07:00",
        "task_id": "WT-0345",
        "action": "create",
        "agent": "console:terminal",
        "model": null,
        "result": "recorded",
        "hash": "660fc3e45333979965b71e2d86d97bc4a99ee4f0a7465d41f4794c647f2931a8"
      },
      {
        "id": 1019,
        "ts": "2026-09-15T01:26:59-07:00",
        "task_id": "WT-0344",
        "action": "create",
        "agent": "console:terminal",
        "model": null,
        "result": "recorded",
        "hash": "efa5588c44fbcc60e9b2cfd55c02464f6f72d01e69bce7bd3e17b742225fa7a4"
      },
      {
        "id": 1018,
        "ts": "2026-09-15T01:26:04-07:00",
        "task_id": "WT-0343",
        "action": "create",
        "agent": "console:terminal",
        "model": null,
        "result": "recorded",
        "hash": "863431d97f045e8d06de6154981c4549c60e1be92312ec68093279479a2ce650"
      },
      {
        "id": 1017,
        "ts": "2026-09-15T01:25:25-07:00",
        "task_id": "WT-0342",
        "action": "create",
        "agent": "console:terminal",
        "model": null,
        "result": "recorded",
        "hash": "e507cdb1393cca9648d4fa7ffdf4f328639f103c8d24304e73b24add8dd5de6d"
      },
      {
        "id": 1016,
        "ts": "2026-09-15T01:12:47-07:00",
        "task_id": "WT-0341",
        "action": "create",
        "agent": "console:terminal",
        "model": null,
        "result": "recorded",
        "hash": "eea12232700631c0aeb06a8eedc234d41e25c0e81be56ec6dcc704ef07e5c148"
      },
      {
        "id": 1015,
        "ts": "2026-09-14T22:25:47-07:00",
        "task_id": "WT-0340",
        "action": "accept",
        "agent": "infrastructure",
        "model": null,
        "result": "accepted",
        "hash": "4af3731272f51c211c759f67781db2d6f37ff2f731fb5d681f39cf563cf7b952"
      },
      {
        "id": 1014,
        "ts": "2026-09-14T22:25:47-07:00",
        "task_id": "WT-0340",
        "action": "submit",
        "agent": "kimi-work",
        "model": null,
        "result": "accepted",
        "hash": "0ba401f3bf506b363e5aedb87fd145b8bd640c22e6ecdb3032d4c6b4cc4d6fc7"
      },
      {
        "id": 1013,
        "ts": "2026-09-14T15:00:48-07:00",
        "task_id": "WT-0339",
        "action": "accept",
        "agent": "infrastructure",
        "model": null,
        "result": "accepted",
        "hash": "daef8f158b3cf6da3d94d1e34366b0a2adbe3a75e45911a3083f62e0046b514d"
      },
      {
        "id": 1012,
        "ts": "2026-09-14T15:00:48-07:00",
        "task_id": "WT-0339",
        "action": "submit",
        "agent": "claude-opus-5:cc7b4b32",
        "model": null,
        "result": "accepted",
        "hash": "1eb5dd01e0d307180e4edf2986d8f37b904464ec41ef704f791c6875a7c6fca6"
      },
      {
        "id": 1011,
        "ts": "2026-09-14T14:48:55-07:00",
        "task_id": "WT-0340",
        "action": "progress",
        "agent": "codex:composition",
        "model": null,
        "result": "recorded",
        "hash": "c529d2b0826c885a000a19499b0d3ac4a882982f362f2aa74795b51e127b3634"
      },
      {
        "id": 1010,
        "ts": "2026-09-14T14:40:39-07:00",
        "task_id": "WT-0340",
        "action": "create",
        "agent": "owner-key",
        "model": null,
        "result": "recorded",
        "hash": "7ac03b2da4d3c12320e99d3f18a2d5845ed5912cdd1af81cabb036d92df173f2"
      }
    ],
    "full": "https://ops.miscsubjects.com/api/work/audit"
  },
  "unresolved_bypasses": [
    {
      "path": "D1_EXEC / D1_QUERY direct SQL via /api/dispatch",
      "effect": "wrote to articles, article_slots, work_tasks and work_actions without running acceptance tests or appending an audit row — an UPDATE could close a task, and a DELETE could edit the hash chain that is supposed to prove nothing was edited",
      "status": "closed 2026-08-05 (WT-0039) — functions/_lib/governed_tables.js refuses a raw write to any of those four tables and names the path that does the work instead. Repair is still possible and no longer silent: D1_REPAIR runs the same statement, requires a stated reason, and appends a work_actions row. Pinned by functions/_lib/governed_tables.test.mjs and by a deploy gate that proves the refusal live."
    },
    {
      "path": "PUT/PATCH /api/articles/<slug> outside a task object",
      "effect": "article content can change without a task object recording why",
      "status": "recorded since 2026-08-28 — every article mutate logs an ARTICLE_WRITE_LINKAGE event (declared task_id, a declared no_task reason, or \"undeclared\"), so an unlinked write is findable on the ledger. Hard refusal remains off deliberately: it would break the owner's own flows."
    },
    {
      "path": "wrangler pages deploy run by hand instead of scripts/ship.mjs",
      "effect": "skips every deploy gate",
      "status": "open — convention only"
    },
    {
      "path": "FILE_CLAIM exclusive KV lock as agent coordination",
      "effect": "agents waited on DENIED claims, branches, and dirty trees instead of retrying STALE",
      "status": "closed 2026-09-13 — FILE_CLAIM returns current_hash and never denies. OBJECT_READ / OBJECT_MUTATE is the write path. check-write-law no longer requires a claim."
    }
  ]
}