You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(v1) — contain /v1 inside /v1 and add a persisted review list (#374)
feat(auth) — grant admin at sign-in from the ADMIN_EMAILS allowlist (#382)
feat(shell) — pin control collapses the expanded sidebar; sign-out lands on marketing (#381)
feat(v1) — the onboarding panel becomes a stepped wizard (no assistant) (#378)
feat(v1) — persona bar becomes a notice banner with environment context (#377)
feat(v1) — answer sheet — inline errors, top summary, pinned submit on mobile (#373)
feat(v1) — report verdict, relationship types + demo, and the session timeline (three sets, one branch) (#370)
feat(ui) — a component template ancestor is a checked header, not a convention (#336) (#345)
feat(brand) — the book is the mark, and the icon set is generated from it (#363)
feat(coach) — a coach is a role on the relationship, with a hard read-only boundary (#358)
feat(db) — a relationship holds sessions — the split, the backfill and the instance rename (#340) (#352)
feat(v1) — the template editor — a variation of the quiz editor, store-backed (#343)
feat(marketing) — the public top menu, the shell footer and header identity (#335)
feat(auth) — name Google-only accounts on the password form (#281) (#333)
feat(auth) — a Google button beside the password form (#281) (#330)
feat(deploy) — codify the preview rule and add a freshness check that never guesses (#329)
Fixed
fix(auth) — /login and the 404 draw the brand's marks, not the quiz product's (#417)
fix(auth) — the sign-up screen draws the brand's marks, not the quiz product's (#413)
fix(v1) — the acceptance status line says what the blind rule actually hides (#403)
fix(v1) — one review control, in the footer, deep-linking to its own review row (#399)
fix(shell) — remove the sidebar pin — the rail is always expanded (#394)
fix(auth) — measure the flow cookie's age and the verifier's fingerprint at the finish (#351 follow-up) (#362)
fix(auth) — capture the Google finish failure before fixing it (#351 follow-up) (#359)
fix(auth) — exchange the Neon verifier at our own callback, so Google sign-in ends signed in (#351) (#357)
fix(404) — render the brand's heading and drop the empty suggestion band (#351) (#355)
fix(auth) — land the post-sign-in destination per brand (#351) (#354)
fix(auth) — start the Google handshake on the Neon origin, not the proxy (#350)
fix(demo) — the Admin button lands on the console, not the gate proof (#334)
Maintenance
R1-E: create, answer and accept as in-progress UI (#409) (#416)
DRAFT — V1 create entry, metadata CRUD by Setting, and the Steps primitive (one per Aspect, rewordable, closed status) — for discussion, do not merge (#406)
test(v1) — a deterministic demo seeder over every catalogue type, and the test factories that pin the shape (#407)
auth — password reset, and a set-password path for Google-only accounts (#395)
docs — the UI/UX audit — every surface scored against its template ancestor (#364)
docs(deploying) — §1 quotes the widened ignoreCommand and names its one exception (#361)
chore(deploy) — one branch builds besides production, and it is named in the file (#360)
docs(deploy) — §1 states the production-only rule, not the [preview] opt-in (#353)
deploy(vercel) — build production only — previews are local (#348)
refactor(css) — one token layer — the second stylesheet's chart and sidebar sets fold into app/globals.css (#347)
refactor(marketing) — the landing page's eleven boxes, two CTAs and three chips (#346)
refactor(console) — the gap table, the failure panels and the title bands compose the primitives (#344)
docs(prototype) — correct the one claim in the wiring plan the board does not support (#342)
docs(prototype) — the wiring plan — one screen exists, four cohorts never did (#341)
docs(quiz) — the capability map — every quiz surface, what it is made of, what full-stack costs (#338)
docs(ui) — the quiz-surface map — every ancestor, its AlignSynch variation, and the mobile mechanics (#337)
docs(ui) — the divergence table — every bespoke surface, one verdict per file (#332)
docs(deploy) — record that preview creation, not just the build, is disabled upstream (#331)
Known limits
Five read surfaces are live: your relationships (/assessment/instances), a relationship (/assessment/instances/[instanceId]), the template catalogue (/assessment/templates), a template (/assessment/templates/[templateId]) and the relationship report (/assessment/instances/[instanceId]/report). They are server-rendered from Postgres and gated at the session: a signed-out request is redirected to /login (the report answers 404 for a relationship id that is not a row). They have not yet been exercised with a signed-in session — nobody has opened the list, the catalogue or a report with real rows on screen. They are wired and gated, and that is the whole of what has been verified.
Every write surface is not wired yet. Creating a relationship, answering, accepting, chat, notifications and the admin console cannot record anything. They are not missing pages: create (/assessment/templates/[templateId]/create), answer (/assessment/instances/[instanceId]/answer) and accept (/assessment/instances/[instanceId]/accept) render their real layouts and every write control is visibly disabled, labelled "Not wired yet — … Nothing was saved." Chat, notifications, the admin console, profile, settings and the shop are declared in data/surface-registry.ts and are greyed in the navigation with the reason on the row. The registry declares 14 surfaces: 5 live, 3 shipped-but-unwired (preview), 6 declared and not built (pending).
The report is read-only. It renders the two opinions and the gap between them; it has no control that changes the relationship, records an acceptance or edits an answer. It is also blind until both parties have submitted: with the other party unanswered it renders the locked page and nothing about their answers.
No deploy follows this tag. The tag fixes the artefact; whether and when it is deployed is a separate decision, so a tag in this repository is not a claim that the site is serving it.