Skip to Content
EngineeringDecisions (ADRs)Decision log

Decision log

Thirty-four architecture decision records, numbered in writing order: twelve accepted on 2026-09-13 (ten with phase 1, two with the first release), eight accepted on 2026-09-14 for phase 2 (the agentic console), six accepted on 2026-09-15 for phase 3 (the public site and persona twins) and eight accepted on 2026-09-16 for phase 4 (workbench roles, the evidence panel, skills, harnesses, memory tiers and inline interaction). Each has the five headings Context, Decision, Consequences, Alternatives considered and Follow-ups, and an <AdrMeta> block with status, date and deciders. A record is never edited into a different decision: a new record supersedes it, the old one is marked Superseded and its body stays. The canonical Markdown lives in decisions/ at the workspace root; these pages mirror it. A few passages are reworded here because a docs gate rejects the wording: the three that spell the kit’s internal direction name (0001 Context, 0002 Context and Decision, the 0007 title, check-brand), and the sentences in 0001 and 0011 Alternatives and in 0021 and 0025 Context that used a word from words.speedClaims (the timing-word gate), and, since that list grew with phase 4, the 0025 title and the timing-word phrases in 0025, 0026 and this log; everything else is verbatim.

ADRTitleStatusDate
0001Adopt the product-forge method and the reference profileAccepted2026-09-13
0002Single brand, product taxonomy, pillars, stages and prefix ruleAccepted2026-09-13
0003Program as the tenant scope and the 72-permission catalogAccepted2026-09-13
0004Assertion kinds and origin on every finding, hypothesis and proposed stepAccepted2026-09-13
0005Identity model with a local development identity modeAccepted2026-09-13
0006Enumerations as text columns with named CHECK constraintsAccepted2026-09-13
0007Theme tokens from the brand kit, monochrome product accents, 4/8 px geometryAccepted2026-09-13
0008Research-agent action protocol (no git actions)Accepted2026-09-13
0009Documentation structureAccepted2026-09-13
0010Repository layout, local repositories without remotes, release deferredAccepted2026-09-13
0011Git hosting on Bitbucket, project TROV, one repository per surfaceAccepted2026-09-13
0012Public host names: apex for the site, console for the platformAccepted2026-09-13
0013Console protocol: streaming turns, a stateless tool server and per-role run tokensAccepted2026-09-14
0014ALCOA++ audit envelope, database-computed hashes and an append-only application roleAccepted2026-09-14
0015Read-only connectors, agent service identity and ELN content canonicalisationAccepted2026-09-14
0016SOP version binding, QMS authority and impact runsAccepted2026-09-14
0017Pilot scope, light validation package and status transitionsAccepted2026-09-14
0018Program-scoped connections with pinned vendor API versionsAccepted2026-09-14
0019Model configuration as data with run-start verificationAccepted2026-09-14
0020Thread visibility, oversight reads, owner-only sharing and conversation retentionAccepted2026-09-14
0021Persona twins: bound agent configurations that propose, never decideAccepted2026-09-15
0022Decisions waiting for you: inbox items, escalation and delegation limitsAccepted2026-09-15
0023Hand-offs as records; event triggers from the audit streamAccepted2026-09-15
0024Stage gates: the only writer of the current stage, closed by two signersAccepted2026-09-15
0025Timing is measured, never claimed: event-anchored metrics and baselinesAccepted2026-09-15
0026The public site: preview posture, first-party inquiries and cookieless analyticsAccepted2026-09-15
0027Workbench roles: a UX and harness layer over the personas, never a permissionAccepted2026-09-16
0028cc_by_nc, abstract excerpts and author manuscripts: the rules stand until counsel accepts a changeAccepted2026-09-16
0029Licence mapping for new sources, attribution lines, chip classes and the third-party flag on uploadsAccepted2026-09-16
0030Skills run on the server as ToolSpecs and worker jobs, recorded in tool_calls, gated by verified referencesAccepted2026-09-16
0031One master agent, one harness per run, enforced from the run row; lens reviews read-only; no external MCP serversAccepted2026-09-16
0032Release renumbering: 0006 is the workbench migration; stage gates move to R5 as 0008Accepted2026-09-16
0033Three memory tiers on our own table: promotable kinds, two-party curation, purpose limitation, never training dataAccepted2026-09-16
0034Inline interaction: forms in place, docked panels, no popupsAccepted2026-09-16

The phase-2 records at a glance

ADRDecides
0013streaming console_turn as a second invocation mode, a stateless tool server in the API, six per-role run tokens with a worker-only key
0014the audit envelope, database-computed entry_seq and row_hash, NO ACTION foreign keys, the append-only application role, signatures with a record hash
0015read-only connectors, the agent service identity agent:<agent_key>@<org_id>, ELN entry content canonicalisation, one-time launch ids
0016SOP versions mirrored from the QMS, explicit and auditable check binding, requirement sets accepted by QA, impact runs
0017the pilot positioning “non-GxP decision support with a light validation package”, the light validation package, designed -> preview -> available transitions
0018program-scoped connections with a pinned vendor API version and rate budgets as rows
0019model configuration as data (MC-n), agent versions gated by evaluation, run-start verification with config_mismatch
0020private threads with an oversight read, owner-only sharing, the run-rail rule, conversation retention

The phase-3 records at a glance

Everything these six records describe is designed; the twins reference pins the names and counts per release and About personas and twins explains them.

ADRDecides
0021a twin as a twin_definitions row bound to one person, persona and program; the allowlist as an intersection with live permissions; standing plans under program.twins.use; file-and-finish detached filing; the bound-user rule; the scientist’s two approve keys leave at persona version 3; no dormant key
0022inbox items as transactional pointers; POST /me/inbox/{item_id}/resolve for the bound person and delegates; escalation and names only under program.twins.read; one-hop, 30-day delegation that never routes signatures or stage items
0023hand-offs as records created sent on approval; the closed TRIGGERABLE_ACTIONS tuple and the savepoint hook on write_audit; mentions never start a twin
0024stage gates as the only writer of current_stage_id; frozen checklists reopened on change; two signatures from different people, the quality one attesting the checklist and not the brief
0025event-anchored metrics computed identically for baseline and twin cohorts; baseline before enable; no aggregate from fewer than three programs; the timing-word lint
0026the site’s private-preview posture with status words from data; first-party inquiries and aggregate-only analytics through two public API routes; new pages, metadata and security headers

The phase-4 records at a glance

Everything these eight records describe is designed until the R4 gates pass; the reference pages for workbench roles, the evidence panel, skills, harnesses and memory pin the names and counts.

ADRDecides
0027fifteen workbench roles as a UX and harness layer over the personas, written in full and never a permission; stored per person and program; five coverage tests; two harness prompts in R4
0028no licence rendering rule changes: no-derivatives stays quote-only, non-commercial, publisher-copyright and unknown stay metadata and link, abstracts follow their own code, author manuscripts stay excluded; three options recorded for counsel
0029every new source mapped onto the eight codes; attribution and share-alike lines; the closed chip classes; the third-party flag on uploads with a weekly terms probe
0030skills as server-side read tools and worker jobs recorded in tool_calls; a vocabulary layer; a reference gate that refuses unverified guidance constants; fixed honest headers
0031one master agent, one harness per run, agent_runs.harness_key as the authority with a harness token claim and harness_denied; lens reviews read-only on request; no external MCP server proxied
00320006_workbench as the R4 migration (60 -> 63 tables, 189 -> 206 routes); stage gates move to R5 as 0008_stage_gates; the R4 lines of contract 11.4 superseded by 12.7
0033three memory tiers on one table; tier 2 admits three kinds; “Remember this?” before any save; audited, shown, purpose-limited oversight; two-party curation; the no-training statement
0034inline forms, docked panels and two-step controls everywhere; modal dialogs, overlays and browser prompts forbidden with the identity re-authentication hop as the single exception; a web lint and a docs rule

What earns a record

One significant decision: a hosting or identity choice, a data-model rule, a taxonomy change, a navigation model, a positioning change, or a change to the build method itself (a new gate, a new release rule). Not a bug fix and not a feature. New records take the next number, are added to _meta.ts in numeric order, and get a row in this table with the count in the intro bumped.

Last updated on