autocode

← Slotbook experiment

Milestone 2 — host accounts & event type management

Process

Acceptance tests higher is better
CC-Opus4.8-i1 12/12 CC-Opus4.8-i2 12/12 CX-5.6-i1 12/12 11/12 before one fix-it CX-5.6-i2 12/12
Wall-clock (minutes) lower is better
CC-Opus4.8-i1 16.4 CLI crash ~6 min in, resumed — operator incident CC-Opus4.8-i2 14.7 active time; sleep-interrupted, resumed CX-5.6-i1 14.0 CX-5.6-i2 11.8 active time; sleep-interrupted, resumed
Turns context
CC-Opus4.8-i1 107 CC-Opus4.8-i2 83 resumed segment only CX-5.6-i1 n/a CX-5.6-i2 n/a
Output tokens lower is better
CC-Opus4.8-i1 58.6K CC-Opus4.8-i2 31.6K resumed segment only CX-5.6-i1 52.0K CX-5.6-i2 27.9K resumed segment only
Input tokens context
CC-Opus4.8-i1 15.28M includes crash-resume replay CC-Opus4.8-i2 8.22M resumed segment only CX-5.6-i1 4.87M includes fix-it replay CX-5.6-i2 2.42M resumed segment only
Actions context
CC-Opus4.8-i1 163 CC-Opus4.8-i2 148 CX-5.6-i1 44 CX-5.6-i2 41
Diff size (lines added) context
CC-Opus4.8-i1 +1,907 CC-Opus4.8-i2 +1,430 CX-5.6-i1 +981 CX-5.6-i2 +1,480
Self-verification
CC-Opus4.8-i1 browser click-testing, API probes, typecheck, build CC-Opus4.8-i2 browser click-testing, typecheck, build CX-5.6-i1 API probes, ad-hoc self-test suite, typecheck, build CX-5.6-i2 API probes, browser checks (MCP), typecheck, build
Committed work
CC-Opus4.8-i1 no (did at m1) CC-Opus4.8-i2 no (did at m1) CX-5.6-i1 no CX-5.6-i2 no
Code at this milestone
CC-Opus4.8-i1 m2 · diff CC-Opus4.8-i2 m2 · diff CX-5.6-i1 m2 · diff CX-5.6-i2 m2 · diff

Task checks

Login form at /login with contract fields
CC-Opus4.8-i1 CC-Opus4.8-i2 CX-5.6-i1 CX-5.6-i2
/dashboard requires login; no booking data leaks to anonymous visitors
CC-Opus4.8-i1 CC-Opus4.8-i2 CX-5.6-i1 CX-5.6-i2
Wrong password rejected
CC-Opus4.8-i1 CC-Opus4.8-i2 CX-5.6-i1 CX-5.6-i2
Session persists across reload
CC-Opus4.8-i1 CC-Opus4.8-i2 CX-5.6-i1 CX-5.6-i2
Dashboard lists upcoming bookings soonest-first, in the host's timezone
CC-Opus4.8-i1 CC-Opus4.8-i2 CX-5.6-i1 CX-5.6-i2
All milestone-1 behavior still passing (regression check)
CC-Opus4.8-i1 CC-Opus4.8-i2 CX-5.6-i1 1 fix-it CX-5.6-i2

Code metrics

Source lines context
CC-Opus4.8-i1 2,964 38 files CC-Opus4.8-i2 2,261 36 files CX-5.6-i1 1,477 29 files CX-5.6-i2 2,005 32 files
Own tests context
CC-Opus4.8-i1 0 CC-Opus4.8-i2 0 CX-5.6-i1 0 CX-5.6-i2 0
Most complex function lower is better
CC-Opus4.8-i1 44 CC-Opus4.8-i2 24 CX-5.6-i1 19 CX-5.6-i2 21
Functions over complexity 15 lower is better
CC-Opus4.8-i1 1 CC-Opus4.8-i2 1 CX-5.6-i1 1 CX-5.6-i2 1
Unused exports lower is better
CC-Opus4.8-i1 23 CC-Opus4.8-i2 9 CX-5.6-i1 8 CX-5.6-i2 5
Orphan modules lower is better
CC-Opus4.8-i1 5 CC-Opus4.8-i2 1 CX-5.6-i1 4 CX-5.6-i2 4
Circular dependencies lower is better
CC-Opus4.8-i1 0 CC-Opus4.8-i2 0 CX-5.6-i1 0 CX-5.6-i2 0
Escape hatches lower is better
CC-Opus4.8-i1 0 CC-Opus4.8-i2 1 CX-5.6-i1 1 CX-5.6-i2 0
Bug-prone lint findings lower is better
CC-Opus4.8-i1 0 CC-Opus4.8-i2 1 exhaustive-deps CX-5.6-i1 0 CX-5.6-i2 0
Churn factor context
CC-Opus4.8-i1 1.01 CC-Opus4.8-i2 1.06 CX-5.6-i1 1.03 CX-5.6-i2 1.00
Type coverage (%) higher is better
CC-Opus4.8-i1 99.3% CC-Opus4.8-i2 99.1% CX-5.6-i1 99.0% CX-5.6-i2 99.6%
Duplication (%) lower is better
CC-Opus4.8-i1 0% CC-Opus4.8-i2 0.4% CX-5.6-i1 0.3% CX-5.6-i2 1%

Review

One card per registered criterion; cells are descriptive, not scores. Full text with citations: light review · i2 addendum · scored review.

Domain core
CC-Opus4.8-i1 buffers/notice/caps handled by verification instead of code — the m1 engine already composed them, so real values were wired through and probed (churn 1.01) — but computeSlots is still the cognitive-complexity-44 function; milestone 5 lands there. CC-Opus4.8-i2 refactored in place, not extended around: exact-start matching became buffered busy-interval overlap (src/lib/slots.ts), closing its own m1 buffer gap; read and write paths still share one generateSlots. CX-5.6-i1 daily-cap semantics corrected for the multi-event-type world: the cap now counts per event type, in the host's calendar day (lib/slots.ts). CX-5.6-i2 m1's critical path untouched: slot engine and advisory-lock booking path reused as-is (churn 1.00), the dashboard integrating through thin query modules.
Auth design
CC-Opus4.8-i1 defense-in-depth: session cookie is id + secret with only the secret's hash at rest; requireHost() on the dashboard layout and every server action; every query host-scoped. CC-Opus4.8-i2 departs from i1's server-side sessions: a stateless HMAC cookie whose signing key falls back to a hardcoded string when SESSION_SECRET is unset (src/lib/session.ts) — forgeable sessions; expiry browser-only, no revocation. CX-5.6-i1 scrypt with timing-safe comparison, session tokens stored SHA-256-hashed, layout-level and per-action guards (lib/auth.ts). CX-5.6-i2 server-side sessions converge with i1: opaque token, only sha256(token) stored, expiry enforced in SQL — but sessions never rotate and expired rows are never cleaned up.
Delete-as-archive
CC-Opus4.8-i1 caught that the existing ON DELETE CASCADE would destroy bookings and reversed it to RESTRICT; archived slugs freed for reuse via a partial unique index over live rows (src/db/schema.sql). CC-Opus4.8-i2 guarded idempotent migration: bookings FK swapped CASCADE → SET NULL with a denormalized event_name snapshot — deleting an event type never destroys booking history. CX-5.6-i1 the same conclusion independently: soft delete via deleted_at, live-row filters in every public query. CX-5.6-i2 soft delete via active = false with a partial unique index freeing archived slugs — but renaming an event type silently relabels historical bookings (live join, no snapshot).
Double-booking guard
CC-Opus4.8-i1 the m1 latent race is now live: 15/45/60-minute durations make overlapping different-start bookings possible, and the database still arbitrates identical starts only. CC-Opus4.8-i2 CX-5.6-i1 CX-5.6-i2 carried forward unchanged: the advisory-lock path is absent from the m1..m2 diff.
Infra-failure handling
CC-Opus4.8-i1 CC-Opus4.8-i2 CX-5.6-i1 the catch-all is unchanged and now wider: the booking transaction still maps any failure — database outage included — to 409 slot_unavailable (app/api/bookings/route.ts). CX-5.6-i2
Committed tests
CC-Opus4.8-i1 none. CC-Opus4.8-i2 none. CX-5.6-i1 none. CX-5.6-i2 none.

Scored review (checkpoint)

Blind scored review of the i1 repos — the i2 iterations joined after this panel and enter judging at m4. Judge: Claude (claude-fable-5); procedure and conflict-of-interest mitigations: judging protocol. Scores are provisional pending second-rater replication. Full text with the comparative synthesis and verdict.

Judged review, mean of 20 dimensions (1–5)
CC-Opus4.8-i1 3.65 CC-Opus4.8-i2 CX-5.6-i1 3.30 CX-5.6-i2
Architecture (Form A mean)
CC-Opus4.8-i1 4.56 CC-Opus4.8-i2 CX-5.6-i1 4.22 CX-5.6-i2
Code quality (Form B mean)
CC-Opus4.8-i1 4.50 CC-Opus4.8-i2 CX-5.6-i1 3.83 CX-5.6-i2
Test quality (Form C mean)
CC-Opus4.8-i1 1.00 CC-Opus4.8-i2 CX-5.6-i1 1.00 CX-5.6-i2
Own-test probe-catch rate
CC-Opus4.8-i1 0/11 CC-Opus4.8-i2 CX-5.6-i1 0/11 CX-5.6-i2
Static scorecard (7 metrics, win/tie/loss)
CC-Opus4.8-i1 4 wins CC-Opus4.8-i2 CX-5.6-i1 1 win (2 ties) CX-5.6-i2