{
  "date": "2026-10-28",
  "version": "0.12.2",
  "baseline_commit": "3c2fad55d40bb486cda5708412c535619ef04330",
  "code_changed": true,
  "scope": "Focused client repair for reproduced stale private content after customer revocation",
  "backend_schema_dependencies_changed": false,
  "client_tests_passed": 79,
  "new_session_boundary_cases": 12,
  "focused_api_tests_passed": 41,
  "focused_api_seconds": 10.21,
  "focused_api_files": [
    "tests/test_portal_access.py",
    "tests/test_private_pdf.py",
    "tests/test_customers.py"
  ],
  "valid_shaped_foreign_customer_cases_retained": true,
  "structural_render_cases_passed": 43,
  "build_passed": true,
  "built_assets": [
    "/assets/index-DnqFN0_W.js",
    "/assets/index-BBtrdhgx.css"
  ],
  "last_full_backend": {
    "version": "0.12",
    "tests": 473,
    "repeated": false
  },
  "browser_verified": [
    "Human reissued-password setup and sign-in after deliberate owner revocation",
    "Enabled account and consumed capture confirmed in owner UI; same permitted customer content returned",
    "QA-0005 explicitly shared for an unfinished response test",
    "Valid session recheck after customer B contact update preserved customer A typed name and response note",
    "Owner revocation cleared already-open customer home, accepted quote and shared-quote response without manual reload",
    "Fresh document request after automatic clearing denied access",
    "Owner session remained available throughout"
  ],
  "automatic_clearing_browser_passed": true,
  "valid_revalidation_keeps_response_inputs_browser_passed": true,
  "already_downloaded_files_recalled": false,
  "background_cross_device_timing_verified": false,
  "session_check_policy": {
    "same_origin_owner_change": "immediate revalidation notice",
    "tab_return": "focus and visible visibilitychange",
    "visible_interval_seconds": 30,
    "validation_deadline_seconds": 10,
    "validation_failure": "clear private context"
  },
  "customer_password_entry": "Sandy completed initial and reissued password entry, confirmation and submission; no agent password entry",
  "question_pending": false,
  "password_or_bearer_in_evidence": false,
  "prior_browser_evidence": "../SHS-Portal-Verification-v0.12.1/verification.json",
  "screenshots": [
    {
      "file": "reissued-setup-pending.jpg",
      "sha256": "3ec98009857d14f6a51fd43fa6a7b9bec042076966e5cf59cef415bc832ad70c",
      "bytes": 103774,
      "image_pixels": {
        "width": 689,
        "height": 1886
      }
    },
    {
      "file": "revoked-document-cleared-without-reload.jpg",
      "sha256": "e72f1436c661f10c443317542bcb9cded546602746a9144c109d6fb3513bc5f4",
      "bytes": 10881,
      "image_pixels": {
        "width": 689,
        "height": 751
      }
    },
    {
      "file": "revoked-home-cleared-without-reload.jpg",
      "sha256": "67df0956b6861b7551d3286b5317f6c475a1fe3be0d4ce91912c02611736a3c6",
      "bytes": 35340,
      "image_pixels": {
        "width": 689,
        "height": 887
      }
    },
    {
      "file": "valid-session-keeps-response-draft.jpg",
      "sha256": "7b7ac18f7d85183778a147b78e8a9b3aeb4a802ed02178008cd35984d03b5ff1",
      "bytes": 106308,
      "image_pixels": {
        "width": 1280,
        "height": 1805
      }
    }
  ],
  "owner_review": {
    "version": "0.12.1",
    "runtime": "/Users/sandyrestall/Documents/Codex/2026-10-27/t/work/owner-review-v0.12.1-runtime/SHS-Local-Prototype",
    "data_dir": "/Users/sandyrestall/Documents/Codex/2026-10-27/t/work/v0.12-visible-rehearsal-2026-10-28",
    "url": "http://127.0.0.1:8788/",
    "pid": 35036,
    "exec_session": 11806,
    "data_and_sessions_byte_for_byte_preserved": true,
    "browser_reload_or_unsaved_discard": false,
    "archive_sha256": "cda20f34ee5debd0c8f49c03882e73c0d53f56c90667cbe3130c3e7271da5121"
  },
  "portal_verification": {
    "url": "http://localhost:8789/",
    "runtime": "/Users/sandyrestall/Documents/Codex/2026-10-27/t/outputs/SHS-Local-Prototype",
    "data_dir": "/Users/sandyrestall/Documents/Codex/2026-10-27/t/work/portal-ui-verification-2026-10-28",
    "running": false,
    "last_pid": 35436,
    "stopped_cleanly": true,
    "cookie_isolation": "localhost is separate from owner review host 127.0.0.1; ports alone do not isolate cookies."
  },
  "saved_fictional_state": {
    "counts": {
      "customers": 2,
      "jobs": 2,
      "quotes": 5,
      "invoices": 1,
      "payments": 0,
      "job_materials": 1,
      "quote_responses": 2,
      "portal_accounts": 1
    },
    "quotes": [
      {
        "reference": "QA-0001",
        "status": "accepted",
        "customer_id": "8eff4e8653541bf0cfe720dae38c007f",
        "response": "accepted"
      },
      {
        "reference": "QA-0002",
        "status": "superseded",
        "customer_id": "8eff4e8653541bf0cfe720dae38c007f",
        "response": "declined"
      },
      {
        "reference": "QA-0003",
        "status": "draft",
        "customer_id": "8eff4e8653541bf0cfe720dae38c007f",
        "response": null
      },
      {
        "reference": "QA-0004",
        "status": "shared",
        "customer_id": "2f5a54be53d76ffae2619455289d91fe",
        "response": null
      },
      {
        "reference": "QA-0005",
        "status": "shared",
        "customer_id": "8eff4e8653541bf0cfe720dae38c007f",
        "response": null
      }
    ],
    "accounts": [
      {
        "customer_id": "8eff4e8653541bf0cfe720dae38c007f",
        "state": "revoked"
      }
    ],
    "invoices": [
      {
        "reference": "IA-0001",
        "status": "draft"
      }
    ],
    "customer_B_never_invited": true,
    "customer_B_phone_changed_in_UI_to": "000001",
    "customer_A_currently_revoked": true,
    "unconsumed_portal_tokens": 0,
    "QA_0005_response_not_submitted": true
  },
  "viewport": {
    "width": 689,
    "height": 751,
    "device_pixel_ratio": 2,
    "note": "Read-only browser DOM measurement at the handoff. Full-page screenshot pixel sizes are recorded separately and do not certify phone or responsive behavior."
  },
  "navigation_usability_item": "At 689 px the horizontal owner navigation clips later items. Verify discoverability for Materials and other tabs; no redesign or fix made in this stage.",
  "pending": [
    "Recovery request/capture/password completion",
    "Active-customer contact-change revocation and expiry",
    "Wider staff/customer UI boundaries and cross-device behavior",
    "Invoice/stage downloads and browser print",
    "Phone/touch/PWA and broad keyboard/screen-reader behavior",
    "Shared private photos and full feedback/customer journeys",
    "Wider website/gallery/field/recurrence interactions",
    "Installed PWA/offline and clean install/recovery on another machine",
    "Horizontally clipped owner navigation at the observed narrow viewport"
  ],
  "preservation": {
    "normal_byte_for_byte_unchanged": true,
    "owner_review_data_and_sessions_byte_for_byte_unchanged": true,
    "source_files_checked_per_copy": 275,
    "source_reference_copies_checked": 2
  },
  "capabilities_tracked": 45,
  "original_findings_open": 14,
  "live_SHS_changed": false,
  "external_services_or_messages": false,
  "production_approved": false,
  "full_product_complete": false
}
