• frontend/{index.html,app.js,style.css}: no build step, no npm, vanilla JS
    hash router (05 §5.7). Real page content is PH3 (U-022+, starting from
    docs/wireframes/); this is only the empty shell + working navigation the
    Done criterion asks for.
    
    backend_server.py serves the 3 files via an exact-path whitelist (not a
    generic static-file/directory server) -- no path-traversal surface to
    reason about for 3 fixed files.
    
    Verified in an actual browser this session (navigated to localhost, clicked
    all 3 nav links, screenshotted each) rather than only trusting stdlib
    tests -- a Python-only test can't exercise real hashchange/DOM behavior
    without a JS engine. Nav highlighting and content swap both confirmed
    working, no page reload, no build step.
    
    7 new stdlib unittest cases covering what the server is actually
    responsible for (static files served with correct content-type, 404 on
    unknown GET path). 66 total across U-001-008, all passing.
    
    This closes out PH0 (U-001~U-008) -- all three Phase-acceptance criteria
    now hold for real: target-project directory scaffold, 15-table schema with
    constraint tests, and a real claude --agent round-trip.
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    bboonnee authored
     
    Browse File »
  • Pure stdlib http.server (ThreadingHTTPServer), zero third-party deps --
    enforced by an AST-based test that parses backend_server.py's own imports
    and checks each against sys.stdlib_module_names, so this can't silently rot
    if someone adds a dependency later (05 §5.7).
    
    pick_folder(): macOS via `osascript 'choose folder'`; user-cancel maps to
    {"selected_path": null} (03-C §3.-1: not an error), non-macOS or any other
    osascript failure raises DialogUnavailableError -> HTTP 422
    DIALOG_UNAVAILABLE. Windows/Linux native dialogs are PH3 (U-022).
    
    Known gap, noted rather than papered over: the Done criterion asks for a
    real popped dialog returning a real path, which needs an actual human
    click -- not something this agent can do non-interactively. Verified
    `osascript` itself is present and executes on this machine, and every code
    path is covered by mocked tests, but the literal "did a human click a real
    folder and get the right path back" check is still open for whoever runs
    this interactively next.
    
    12 new stdlib unittest cases (server start/stop, pick_folder success/
    cancel/non-macOS/other-failure, the same 4 cases through the HTTP route,
    zero-third-party-import check). 62 total across U-001-007 (60 real + 2
    gated), all passing.
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    bboonnee authored
     
    Browse File »