added gosymdb

quietlight
May 11, 2026, 2:50 AM
2Y5U3QPUBMTMBF6VKUFIYE22FXWKCQN4ODTCQ7T5QXE5ZVP2Z7NQC

Dependencies

  • [2] VNFPBXF7 moved dep tests to golangci-lint
  • [3] AISACMH6 me
  • [4] KZKLAINJ run out of space on nest, cleaned out
  • [5] VYNOHQJW tidied up CLAUDE.md
  • [6] DS22DKV3 added shell script integration tests.
  • [7] P6HBSK3W me
  • [8] RUVJ3V4N cyclo to 14 now
  • [9] JZRF7OBJ refactor to get db omports out of utils, but still have failing tests, may need updating
  • [*] BZ6KQRYD added complexity lint test
  • [*] I4CMOMXF dot files

Change contents

  • replacement in me.txt at line 184
    [3.732810][3.732810:732824]()
    for item in a
    [3.732810]
    [3.732824]
    for item in a # **options selected for kiwi work**
  • edit in me.txt at line 210
    [3.733857]
    [3.733857]
  • replacement in me.txt at line 215
    [3.733898][2.123:182]()
    jsonfile = "$item/segment_summary_2026-05-07.json"
    [3.733898]
    [3.733957]
    jsonfile = "$item/segment_summary_2026-05-08.json"
  • replacement in me.txt at line 233
    [3.734398][3.734398:734498]()
    # save brief summary to cwd
    open("/home/david/summary_2026-04-17.jsonl", "w") do f
    for item in a
    [3.734398]
    [3.734498]
    # save brief summary to ~
    open("/home/david/summary_2026-05-08.jsonl", "w") do f
    for item in x
  • edit in me.txt at line 648
    [2.3354]
    [2.3354]
    ● Per-folder summary — summary_2026-05-08.jsonl (77 records)
    Counts are summed across both filter versions (opensoundscape-kiwi-1.2 + 1.5), so a segment present in
    both is counted twice for species/calltype.
    Legend: files = data files read · segs = total segments · unrev/conf/dk = unreviewed/confirmed/dont_know ·
    rev = reviewers
    ---
    Empty folders (no data)
    - AC34/2024-01-03, AC43/2024-01-03, R778/2025-02-25, R343/2024-05-06, B40/2025-12-12, GR8/2025-01-01 — 0
    files, 0 segments.
    Reviewed by David (2026-04-06 batch — fully triaged)
    - C03/2026-04-06 — files=95 segs=149 · conf=119 dk=30 bookmarked=4 · Kiwi=102 (M=101, F=1); also
    gryger1=13, morepo2=2, nezbel1=2.
    - F09/2026-04-06 — files=376 segs=606 · conf=415 dk=191 bookmarked=48 · Kiwi=362 (M=320, F=23, Duet=19);
    gryger1=34, morepo2=10, nezrob3=5, nezbel1=3, riflem1=1. Largest reviewed batch.
    - G05/2026-04-06 — files=258 segs=444 · conf=356 dk=88 bookmarked=21 · Kiwi=338 (M=323, F=8, Duet=7);
    gryger1=8, nezbel1=5, morepo2=4, nezkak1=1.
    - H01/2026-04-06 — files=284 segs=357 · conf=93 dk=264 bookmarked=21 · Kiwi=67 (M=52, F=13, Duet=2);
    gryger1=16, tui1=3, others.
    - P09/2026-04-06 — files=71 segs=91 · conf=43 dk=48 bookmarked=3 · Kiwi=32 (M=30, F=2); tui1=5, gryger1=2,
    riflem1=2.
    - J11/2026-04-06 — files=213 segs=259 · conf=43 dk=216 bookmarked=11 · Kiwi=9 (M=7, Duet=2); gryger1=26,
    riflem1=4, comcha=3.
    Reviewed by David (partial — David listed but no confirmed)
  • edit in me.txt at line 682
    [2.3355]
    - R778/2026-03-23 — files=1039 segs=1350 · unrev=1269 conf=6 dk=75 with_ct=39 · Kiwi=39 (M=37, F=2);
    Gecko=6, gryger1=2.
    - R743/2026-03-23 — files=1179 segs=1519 · unrev=1370 dk=149 with_ct=101 · Kiwi=101 (M=80, F=21),
    Gecko=26.
    - AC83/2023-01-03 — files=9 segs=9 · unrev=5 dk=4 with_ct=5 · Kiwi=5 (M=3, F=2).
    Auto-classified, unreviewed — large backlog (≥1000 segments)
    - R620/2026-03-23 — files=1684 segs=2324 · unrev=2126 dk=198 with_ct=173 · Kiwi=173 (M=172, F=1), Gecko=9.
    Biggest folder overall.
    - R306/2026-03-23 — files=1214 segs=1654 · unrev=1526 dk=128 with_ct=186 · Kiwi=186 (M=156, F=20,
    Duet=10), Gecko=2.
    - R343/2026-03-23 — files=1214 segs=1567 · unrev=1493 dk=74 with_ct=122 · Kiwi=122 (M=120, F=2).
    - R620/2024-05-06 — files=1151 segs=1504 · unrev=173 dk=1331 with_ct=163 · Kiwi=163 (M=158, F=5),
    Gecko=10.
    - R287/2026-03-23 — files=903 segs=1153 · unrev=1083 dk=70 with_ct=43 · Kiwi=43 (M=38, F=5), Gecko=3.
    - R18/2026-03-23 — files=1026 segs=1236 · unrev=1189 dk=47 with_ct=42 · Kiwi=42 (M=31, F=11), Gecko=7.
    Auto-classified, unreviewed — medium (200–1000 segments)
    - R635/2026-03-23 — files=1019 segs=1304 · unrev=1249 dk=55 with_ct=66 · Kiwi=66 (M=59, F=7), Gecko=9.
    - R635/2025-02-25 — files=452 segs=548 · unrev=33 dk=515 with_ct=30 · Kiwi=30 (M=22, F=8), Gecko=3.
    - R620/2025-02-25 — files=792 segs=979 · unrev=83 dk=896 with_ct=78 · Kiwi=78 (M=77, Duet=1), Gecko=5.
    - R343/2025-02-25 — files=591 segs=696 · unrev=35 dk=661 with_ct=34 · Kiwi=34 (M=32, F=2).
    - R287/2025-02-25 — files=279 segs=326 · unrev=28 dk=298 with_ct=28 · Kiwi=28 (M=22, F=6).
    - R287/2024-05-06 — files=276 segs=335 · unrev=69 dk=266 with_ct=65 · Kiwi=65 (M=60, Duet=3, F=2),
    Gecko=4.
    - R219/2026-03-23 — files=736 segs=938 · unrev=865 dk=73 with_ct=29 · Kiwi=29 (M=23, F=4, Duet=2),
    Gecko=3.
    - R306/2025-02-25 — files=92 segs=102 · unrev=33 dk=69 with_ct=33 · Kiwi=33 (M=23, Duet=10).
    - B29/2024-01-03 — files=407 segs=524 · unrev=112 dk=412 with_ct=112 · Kiwi=112 (M=102, Duet=9, F=1).
    - B29/2025-04-16 — files=90 segs=134 · unrev=84 dk=50 with_ct=84 · Kiwi=84 (M=78, Duet=6).
    - B29/2025-12-12 — files=95 segs=143 · unrev=64 dk=79 with_ct=64 · Kiwi=64 (M=54, Duet=7, F=3).
    - C03/2023-09-11 — files=60 segs=87 · unrev=47 dk=40 with_ct=47 · Kiwi=47 (M=43, Duet=4).
    - C03/2024-05-05 — files=110 segs=152 · unrev=48 dk=104 with_ct=48 · Kiwi=48 (M=41, Duet=4, F=3).
    - C03/2025-02-25 — files=159 segs=235 · unrev=93 dk=142 with_ct=93 · Kiwi=93 (M=89, F=4).
    - G05/2023-09-11 — files=27 segs=44 · unrev=28 dk=16 with_ct=28 · Kiwi=28 (M=26, Duet=2).
    - G05/2024-05-05 — files=203 segs=322 · unrev=97 dk=225 with_ct=97 · Kiwi=97 (M=93, Duet=4).
    - G05/2025-02-25 — files=356 segs=535 · unrev=278 dk=257 with_ct=275 · Kiwi=275 (M=253, Duet=12, F=10),
    Gecko=3.
    - H01/2023-09-11 — files=62 segs=80 · unrev=15 dk=65 with_ct=15 · Kiwi=15 (M=13, F=2).
    - H01/2024-05-05 — files=410 segs=573 · unrev=72 dk=501 with_ct=72 · Kiwi=72 (M=63, Duet=6, F=3).
    - H01/2025-02-25 — files=312 segs=407 · unrev=92 dk=315 with_ct=90 · Kiwi=90 (M=82, Duet=4, F=4), Gecko=2.
    - P09/2023-09-11 — files=38 segs=51 · unrev=21 dk=30 with_ct=21 · Kiwi=21 (M=19, Duet=2).
    - P09/2023-12-25 — files=74 segs=89 · unrev=6 dk=83 with_ct=6 · Kiwi=6 (M=6).
    - P09/2024-05-05 — files=349 segs=440 · unrev=62 dk=378 with_ct=62 · Kiwi=62 (M=49, F=12, Duet=1).
    - P09/2025-02-25 — files=398 segs=504 · unrev=74 dk=430 with_ct=74 · Kiwi=74 (M=61, F=8, Duet=5).
    - J11/2023-09-11 — files=37 segs=49 · unrev=19 dk=30 with_ct=19 · Kiwi=19 (M=16, Duet=2, F=1).
    - J11/2024-05-05 — files=203 segs=257 · unrev=29 dk=228 with_ct=28 · Kiwi=28 (M=23, Duet=4, F=1), Gecko=1.
    - J11/2025-02-25 — files=419 segs=537 · unrev=30 dk=507 with_ct=25 · Kiwi=25 (M=17, F=5, Duet=3), Gecko=5.
    - GR2/2025-01-01 — files=195 segs=222 · unrev=21 dk=201 with_ct=21 · Kiwi=21 (M=21).
    - GR3/2025-01-01 — files=426 segs=472 · unrev=67 dk=405 with_ct=67 · Kiwi=67 (M=66, Duet=1).
    - GR4/2025-01-01 — files=362 segs=426 · unrev=76 dk=350 with_ct=76 · Kiwi=76 (M=76).
    - GR5/2025-01-01 — files=192 segs=222 · unrev=72 dk=150 with_ct=72 · Kiwi=72 (M=68, F=4).
    - GR6/2025-01-01 — files=269 segs=303 · unrev=14 dk=289 with_ct=14 · Kiwi=14 (M=14).
    - GR7/2025-01-01 — files=275 segs=305 · unrev=110 dk=195 with_ct=110 · Kiwi=110 (M=98, F=9, Duet=3).
    - HCT_18103_H5/2025-06-16 — files=400 segs=452 · unrev=36 dk=416 with_ct=36 · Kiwi=36 (M=34, F=2).
    - HCT_K04-14_H3/2025-06-16 — files=358 segs=403 · unrev=87 dk=316 with_ct=87 · Kiwi=87 (M=87).
    - HCT_18807_H4/2026-05-04 — files=259 segs=293 · unrev=72 dk=221 with_ct=69 · Kiwi=69 (M=64, F=4, Duet=1),
    Gecko=3.
    - R778/2024-05-06 — files=286 segs=378 · unrev=36 dk=342 with_ct=35 · Kiwi=35 (M=31, F=4), Gecko=1.
    Auto-classified, unreviewed — small (<200 segments)
    - AC21/2024-01-03 — 7/9 · all dk · Don't Know=9 only.
    - R778/2025-05-23 — 6/8 · all dk · Don't Know=8.
    - B02/2024-01-03 — 27/39 · unrev=14 dk=25 · Kiwi=14 (M=14).
    - B22/2023-10-29 — 33/39 · all dk · Don't Know=39.
    - R635/2024-05-06 — 3/4 · unrev=2 dk=2 · Kiwi=2 (M=1, F=1).
    - D03/2023-12-25 — 47/61 · unrev=27 dk=34 · Kiwi=27 (M=26, F=1).
    - GR1/2025-01-01 — 17/20 · unrev=4 dk=16 · Kiwi=4 (M=4).
    - GR9/2025-01-01 — 41/50 · unrev=37 dk=13 · Kiwi=37 (M=37).
    - R16/2023-12-25 — 41/44 · unrev=6 dk=38 · Kiwi=6 (M=6).
    - H09/2023-12-25 — 38/48 · unrev=5 dk=43 · Kiwi=5 (M=5).
    - HCT10_Kaipo/2024-05-04 — 11/15 · unrev=4 dk=11 · Kiwi=4 (M=4).
    - HCT6_Kaipo/2026-05-04 — 1/1 · all dk · Don't Know=1.
    - HCT9_Kaipo/2026-05-04 — 118/147 · unrev=52 dk=95 · Kiwi=50 (M=50), Gecko=2.
    - HCT_18807_H4/2025-06-16 — 92/105 · unrev=50 dk=55 · Kiwi=49 (M=49), Gecko=1.
    - HCT_H13-74/2025-11-22 — 40/48 · unrev=1 dk=47 · Kiwi=1 (M=1).
    - HCT_JOG_H7/2025-05-02 — 11/14 · unrev=8 dk=6 · Kiwi=7 (M=7), Gecko=1.
    - HCT_KWR075/2025-05-04 — 4/4 · unrev=4 · Kiwi=4 (Duet=2, M=2). All-kiwi folder.
    - HCT_K06-10_H1/2025-11-22 — 164/197 · unrev=25 dk=172 · Kiwi=22 (M=18, F=3, Duet=1), Gecko=3.
    - HCT_K08-24_H2/2025-06-16 — 144/180 · unrev=26 dk=154 · Kiwi=25 (M=23, F=2), Gecko=1.
    ┌────────┬────────────┬────────────────────────────┬──────────────┐
    │ Pass │ Promotions │ Breakdown │ Skipped @ 70 │
    ├────────┼────────────┼────────────────────────────┼──────────────┤
    │ Male │ 508 │ 505 Male, 2 Female, 1 Duet │ 1374 │
    ├────────┼────────────┼────────────────────────────┼──────────────┤
    │ Female │ 31 │ all → Male │ 65 │
    ├────────┼────────────┼────────────────────────────┼──────────────┤
    │ Duet │ 31 │ all → Male │ 45 │
    └────────┴────────────┴────────────────────────────┴──────────────┘
  • edit in lint_test.go at line 55
    [11.340]
    func TestReIndex(t *testing.T) {
    cmd := exec.Command("gosymdb", "index", "--root", ".")
    cmd.Dir = "."
    out, err := cmd.CombinedOutput()
    if err != nil {
    t.Errorf("gosymdb reindexing errored:\n%s", out)
    }
    }
  • edit in CLAUDE.md at line 16
    [3.7009][3.1195722:1195723](),[3.1195722][3.1195722:1195723](),[3.1195723][3.7010:7080](),[3.7080][3.165:240](),[3.1195803][3.165:240](),[3.240][3.7081:7126](),[3.7222][3.7222:7299](),[3.7299][2.3493:3589]()
    - **`cmd/*.go`** - CLI commands (parse flags, call tools, print JSON)
    - **`tools/`** - CLI tools (one file per tool, defines input/output types)
    - **`tui/`** - TUI (interactive classify UI)
    - **`db/`** - Database connection, types, transactions (may import `utils/`)
    - **`utils/`** - Reusable helpers (no MCP types, no `*Input`/`*Output` structs, no `db` import)
  • edit in CLAUDE.md at line 17
    [3.7300][3.7300:7388](),[3.7388][3.1196016:1196117](),[3.1196016][3.1196016:1196117]()
    `utils/` is the leaf package — it must not import `cmd/`, `tools/`, `tui/`, or `db/`.
    ---
    ## Architecture
    Two-layer architecture: tools are MCP-free, adapters bridge to MCP protocol.
  • replacement in CLAUDE.md at line 20
    [3.1196332][3.309:360]()
    tools/*.go → Core logic (plain Go structs)
    [3.1196332]
    [3.7389]
    tools/*.go → CLI tools (one file per tool, defines input/output types)
  • replacement in CLAUDE.md at line 23
    [3.7498][3.7498:7565](),[3.7565][3.1196489:1196493](),[3.1196489][3.1196489:1196493]()
    utils/*.go → Reusable helpers (leaf package, no db import)
    ```
    [3.7498]
    [3.1196493]
    utils/*.go → Reusable helpers (leaf package, no db import, no `*Input`/`*Output` structs)
  • replacement in CLAUDE.md at line 25
    [3.1196494][3.1196494:1196589](),[3.1196589][3.361:413](),[3.413][3.1196656:1196670](),[3.1196656][3.1196656:1196670](),[3.1196670][3.414:459](),[3.459][3.1196726:1196839](),[3.1196726][3.1196726:1196839](),[3.1196895][3.1196895:1196958]()
    ---
    ## Directory Structure
    ```
    skraak/
    ├── main.go # CLI dispatcher
    ├── cmd/ # CLI commands
    ├── db/
    ├── tools/ # tools
    ├── utils/ # Reusable helpers
    ├── tui/ # TUI specific code
    └── shell_scripts/ # end-to-end test scripts
    [3.1196494]
    [3.1196958]
    shell_scripts/ → end-to-end test scripts
  • replacement in CLAUDE.md at line 28
    [3.1196963][3.1196963:1196967]()
    ---
    [3.1196963]
    [3.1196967]
    **use cli tool `gosymdb agent-context` for exploratory dev tools**
  • edit in CLAUDE.md at line 48
    [3.1197641][3.23240:23281]()
    ### Untested Code — Intentional Skips
  • edit in CLAUDE.md at line 49
    [3.23282][3.460:627](),[3.627][3.1197641:1197642](),[3.23493][3.1197641:1197642](),[3.1197641][3.1197641:1197642]()
    `utils/audio_player.go` is a thin wrapper over `oto` (requires audio hardware). No testable logic without hardware; `Resample` already covered in `resample_test.go` |
  • replacement in CLAUDE.md at line 61
    [3.633][3.15345:15387]()
    Endeavour to keep new code well under 10.
    [3.633]
    [3.15387]
    Endeavour to keep new code under 10.
  • edit in .ignore at line 26
    [12.183]
    gosymdb.sqlite