{
    "table": "ticket_works",
    "pk": "uid",
    "total": 100,
    "page": 1,
    "per": 25,
    "pages": 4,
    "filter": [],
    "rows": [
        {
            "uid": 1,
            "ts": 1783996196,
            "ticket_id": 151,
            "kind": "doc",
            "ref": "docs/TICKETS.md",
            "note": "Rewrote docs/TICKETS.md documenting the ticket-as-authorization surface (governance triggers, kinds/roles, lifecycle+steps_remaining, all routes, stop/start/graft edges, pair_loop.py iteration), grounded in 0029/0030/0001/0012/pair_loop.py, with \u00a74.2 reordered to the true harness flow and \u00a76 invocations corrected to include the required --deliverable."
        },
        {
            "uid": 2,
            "ts": 1783996878,
            "ticket_id": 152,
            "kind": "doc",
            "ref": "docs/PLAYBOOK.md",
            "note": "Compiled the birth-time playbook from ticket #151's harvested lessons \u2014 grouped into four checkable themes (executable commands, internal consistency, live code-grounded citations, standalone clarity for the blind adversary), each tied to the adversary's finding rubric and cited to source ticket #151 and the current pair_loop.py/migrations."
        },
        {
            "uid": 3,
            "ts": 1783998423,
            "ticket_id": 153,
            "kind": "code",
            "ref": "checkouts/current/congruency/tools/ticket_status.py",
            "note": "READ-ONLY ticket rollup CLI (header/crew/journal/manifest/lessons/progress); opens the WAL-mode state db with immutable=1 so it creates no -wal/-shm sidecars (fixes the prior finding), '(none)' for missing pieces, exit 2 (no traceback) on missing id/db; verified against settled 151/152 and missing 999999."
        },
        {
            "uid": 4,
            "ts": 1783998786,
            "ticket_id": 147,
            "kind": "code",
            "ref": "checkouts/current/congruency/tools/list_versions.py",
            "note": "Read-only version-discovery tool: reads git tags version-*, mirrors setup.py's _vkey/newest_version_tag so its numbers match what `setup.py install --version` accepts; default lists all installable versions (newest first, latest marked), --latest prints just the newest number, --json emits a {latest,count,versions} manifest."
        },
        {
            "uid": 5,
            "ts": 1783999344,
            "ticket_id": 46,
            "kind": "code",
            "ref": "checkouts/current/congruency/tools/tag_test_harness.py",
            "note": "Bet/test tag harness: discovers every Tag_Interface tag under invocators/tags (mirrors TagList::scan), logs a `bet` prediction per tag to an append-only JSONL ledger (predict.py-modeled), boots an ephemeral php server (serve.py-modeled) to render each standalone as ?page=tags&tag=NAME, compares rendered-vs-predicted (clean-contract default or byte-exact --record-golden baseline), logs a PASS/FAIL `test` ticket, and provides a --view; verified end-to-end, 40/44 clean-pass with 4 real refutations."
        },
        {
            "uid": 6,
            "ts": 1783999726,
            "ticket_id": 43,
            "kind": "code",
            "ref": "checkouts/current/congruency/invocators/tags/dev/CategoryBrowse.php",
            "note": "Category-browse view: renders all categories (with page counts) and their annotation-tagged pages in one pass, plus single-category focus; reads the real annotations/Categories/Documents schema and SQL-verified against the live DB."
        },
        {
            "uid": 7,
            "ts": 1784000256,
            "ticket_id": 155,
            "kind": "doc",
            "ref": "docs/PLAYBOOK.md",
            "note": "Recompiled the birth-time playbook from all six harvested lessons (#43/#46/#147/#151/#152/#153) into five checkable themes \u2014 grounding, executable commands, forbidden side effects (new, from #153's WAL mode=ro vs immutable=1), self-consistency, standalone clarity \u2014 each cited to source tickets and re-grounded to current pair_loop.py/ticket_status.py/migration line numbers."
        },
        {
            "uid": 8,
            "ts": 1784009980,
            "ticket_id": 79,
            "kind": "code",
            "ref": "checkouts/current/congruency/lib/Modules/StoreModule/Catalog/DAO/ProductDAO.php",
            "note": "Fixed ProductDAO table name paw.product -> Products (the real sqlite table per CatalogDAO/PriceDAO/seed); verified end-to-end that obtainRow/obtainNRows/obtainAllRows now return beans and the old name reproduced 'no such table: paw.product'."
        },
        {
            "uid": 9,
            "ts": 1784010504,
            "ticket_id": 139,
            "kind": "code",
            "ref": "checkouts/current/congruency/tools/ingest_self.py",
            "note": "blob_body now decodes non-utf8/binary blobs losslessly via latin-1 (recoverable, replacing lossy errors='replace') and returns the true raw byte length for the bytes column; utf-8 blobs unchanged and all 31 real files still pass db_verify."
        },
        {
            "uid": 10,
            "ts": 1784011806,
            "ticket_id": 157,
            "kind": "data",
            "ref": "~/code/forge/remotes (10 bare repos) + repos rows in both dbs",
            "note": "restoration, not authorship: copied from bin.snapshot, registrations rebuilt from the remotes' own HEADs"
        },
        {
            "uid": 11,
            "ts": 1784012152,
            "ticket_id": 158,
            "kind": "code",
            "ref": "invocators/tags/dev/{OmniExplorer,ForgeView,ShadowForge,MemGraph}.php + repos rows (263) in both dbs",
            "note": "repath to canonical config/forge home"
        },
        {
            "uid": 12,
            "ts": 1784012749,
            "ticket_id": 156,
            "kind": "code",
            "ref": "checkouts/current/congruency/invocators/tags/dev/TicketList.php",
            "note": "TicketList Tag_Interface rebuilt to the 0029-0032 auth model (id/kind/status/title/CREW/PROGRESS X-of-Y/WORKS/LESSONS, STOPPED via ticket.stops mirror, ACTIVE-first ordering, DONE muted, full htmlspecialchars recursion guard, read-only query_only); verified live render 200 clean and row-checked vs sqlite for 151-155/140/79/139."
        },
        {
            "uid": 13,
            "ts": 1784014846,
            "ticket_id": 159,
            "kind": "code",
            "ref": "checkouts/current/congruency/tools/tag_selfcheck.py",
            "note": "Tag asset self-check: lexer-parsed disk/db deps per dev tag (external immutable=1 dbs, FROM/JOIN tables, repos.forge_remote), empty-state WARNs, HTTP render FAIL on PHP errors, de-duped --file-tickets; live run 88 OK/2 WARN/0 FAIL exit 0, zero files created."
        },
        {
            "uid": 14,
            "ts": 1784032064,
            "ticket_id": 162,
            "kind": "image",
            "ref": "~/code/rpi5-recovery/output/{root.squashfs,disk.img,firmware/}",
            "note": "squashpi build vs raspios_lite_arm64: SQUASHFS 4.0/xz/1M superblock valid (531MB from 2.8GB), rpi-2712 (Pi5) kernels present, disk.img partitioned 256M FAT32 + 3.8G Linux per plan"
        },
        {
            "uid": 15,
            "ts": 1784066773,
            "ticket_id": 162,
            "kind": "script",
            "ref": "~/code/rpi5-recovery/customize-r00.sh",
            "note": "chroot customize for r00 recovery: MINIMAL scope (operator decision) \u2014 user steve + r00-ed25519.pub, plain DHCP via NetworkManager with ALL bridge/route leftovers purged (the failure cause), ssh on at boot, base php/python pkgs. Stack NOT baked in; run pi_stack_install.py over ssh post-boot."
        },
        {
            "uid": 16,
            "ts": 1784069830,
            "ticket_id": 162,
            "kind": "image",
            "ref": "~/code/rpi5-recovery/output/disk.img",
            "note": "r00 recovery image BUILT + VERIFIED 12/12 in loopback mount: steve+r00-ed25519 key (600), NOPASSWD sudo, hostname r00, NM wired-dhcp profile, ssh+NM enabled, userconfig neutralized, ZERO bridge/netplan config. apt-free customize (trixie ships NM+sshd). Ready to flash disk4 (operator)."
        },
        {
            "uid": 17,
            "ts": 1784075808,
            "ticket_id": 162,
            "kind": "tool",
            "ref": "~/code/rpi5-recovery/flash.py + flash.json",
            "note": "JSON-config-driven Python flasher: hard safety gates (removable/not-virtual/whole/not-system-disk/protocol/size \u2014 proven to reject system disk 5 ways) + post-write boot-partition verify (reads cmdline off card). Replaces flash-r00.sh."
        },
        {
            "uid": 18,
            "ts": 1784081526,
            "ticket_id": 164,
            "kind": "code",
            "ref": "/Users/stevenpeterson/code/installed/jazz-project/squashpi/squashpi/pi5.py",
            "note": "pi5.py: JSON-profile-driven Pi5 squashfs+toram(overlay)+g_ether image feature composing ImageBuilder+gether+initramfs-tools (local-bottom, not busybox), with a pi5 CLI (plan/build/profile/selfcheck); 13/13 structural selfchecks pass, shell scripts pass bash -n/sh -n."
        },
        {
            "uid": 19,
            "ts": 1784095402,
            "ticket_id": 166,
            "kind": "code",
            "ref": "checkouts/current/congruency/invocators/tags/dev/TicketList.php",
            "note": "PROGRESS column now shows steps DONE (Y-remaining, clamped 0..Y) so a finished ticket reads 'Y of Y' not backwards '0 of Y'; docstring updated, read-only preserved, verified end-to-end with repo php."
        },
        {
            "uid": 20,
            "ts": 1784096981,
            "ticket_id": 165,
            "kind": "code",
            "ref": "checkouts/current/congruency/invocators/tags/dev/TicketList.php",
            "note": "TicketList now folds near-identical floods into signature-based group headers (6 groups / 53 tickets on live data, 201/201 rows preserved, one-word stems like 'Research:' never grouped) and expands any title into its provenance/tree/journal via JS-free <details>, with a DAG-safe seen-set walk; verified end-to-end read-only with no side effects."
        },
        {
            "uid": 21,
            "ts": 1784097368,
            "ticket_id": 160,
            "kind": "code",
            "ref": "checkouts/current/congruency/invocators/tags/dev/FormTag.php",
            "note": "FormTag now validates the form id against validateFormKey's whole-match contract before calling runForm, so the empty id from TagList's standalone `new $sel(null)` render (and `<<<FormTag()>>>`) no longer reaches ValidateFields.php:43-44 and emits 'Undefined array key 0'; no-id renders a usage panel listing the stored forms, real forms render unchanged, verified across 14 argument paths with zero PHP diagnostics and no file/db side effects."
        },
        {
            "uid": 22,
            "ts": 1784099275,
            "ticket_id": 161,
            "kind": "code",
            "ref": "checkouts/current/congruency/tools/ingest_repo_docs.py",
            "note": "Registry-gated stdlib ingester: walks each registered repo's docs/+README from its bare forge remote (robust tip resolution \u2014 183/263 store literal 'HEAD' over a dangling master symref) into repo_docs at the CMS's real db (configure.php:42, not ingest_self.py's ~/.jazz fallback); text-only (kind md/text, binary PDFs skipped), idempotent append-only; ran live \u2014 452 docs/128 repos, tag_selfcheck now 0 WARN 0 FAIL, RepoDocs+SemanticSearch render real data."
        },
        {
            "uid": 23,
            "ts": 1784101601,
            "ticket_id": 231,
            "kind": "code",
            "ref": "/Users/stevenpeterson/code/installed/jazz-project/jazz-forge/forge/omni_cli.py",
            "note": "omni CLI v1.2.0: index/search/find/stat/config/install with friendly per-command help, config-driven paths, immutable=1 reads; stat's staleness now uses the indexer's own parse_ref and probes blobless refs before blaming them, killing the unclearable false-STALE verdict (both adversary scenarios reproduced in isolation and now pass, plus stale/clear/gone directions verified)."
        },
        {
            "uid": 24,
            "ts": 1784102880,
            "ticket_id": 234,
            "kind": "code",
            "ref": "/Users/stevenpeterson/code/installed/jazz-project/codebean_mcp/codebean_mcp/server.py",
            "note": "import_module/import_repo added as @mcp.tool() delegating to the delivered importer (project=_PROJECT); all 7 original tools byte-identical; `mcp = None` across the importer import suppresses its import-time self-registration so the stock `python3 -m codebean_mcp` serves 9 tools each exactly once; verified end-to-end (9 checks, real boot path): equivalent:true AST round-trip, ingested module editable+saveable, errors as data, checkout unchanged; importer's --selftest step 8 (asserts a 7-tool stock server) is superseded by this ticket by design."
        },
        {
            "uid": 25,
            "ts": 1784107584,
            "ticket_id": 221,
            "kind": "code",
            "ref": "checkouts/current/congruency/tools/pair_loop.py",
            "note": "Fixed the false-stray defect: status is now read via `git status --porcelain -z` (never C-quotes paths; rename/copy source fields consumed) and compared with os.path.normpath on both sides, so a deliverable named with non-ascii, spaces, or a './' prefix is no longer mis-journaled as an UNCOMMITTED stray; tracked_dirty routed through the same parser; selftest 56/56 including 10 new checks (three exotic spellings + a real-stray positive control + rename parsing)."
        }
    ]
}
