chore: track go.work and the graphify map
go.work and go.work.sum were ignored, which left gopls without a workspace root — the LSP needs them checked in to resolve ./backend. graphify-out/ is meant to be committed so a fresh checkout starts with the map instead of rebuilding. Committed: graph.json, graph.html, manifest.json (portable now — relative keys, re-anchored on load), GRAPH_REPORT.md, .graphify_labels.json, .graphify_root. Still ignored: cost.json (local), cache/ (13M, regenerable), the dated snapshot dirs (glob, so future ones are covered too), .rebuild.lock. .graphify_python holds an absolute interpreter path, so it looks machine-local — but it is tracked deliberately. Every query helper shells $(cat graphify-out/.graphify_python), and an ignored untracked file does not materialize in a new `git worktree add` dir, which would break the first query in every new worktree. A second dev whose interpreter differs should skip-worktree it locally.
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
{
|
||||
"0": "HTMX Library Internals",
|
||||
"1": "Latest-Chapter Poller Tests",
|
||||
"2": "Userscript Site Adapters",
|
||||
"3": "Status Buckets Web UI",
|
||||
"4": "Go HTTP Test Helpers",
|
||||
"5": "Web UI Handler Tests",
|
||||
"6": "Go Error Handling Patterns",
|
||||
"7": "Web UI List/Login Views",
|
||||
"8": "Latest-Chapter Fetch Logic",
|
||||
"9": "Session/Auth Handling",
|
||||
"10": "Go Code Style Guide",
|
||||
"11": "Latest-Chapter Poll Config",
|
||||
"12": "Store",
|
||||
"13": "Go Allocation Patterns",
|
||||
"14": "Open",
|
||||
"15": "Go CPU Optimization",
|
||||
"16": "Skill Discovery Docs",
|
||||
"17": "Favourite/Delete Fragments Task",
|
||||
"18": "Status Bucket Backend Logic",
|
||||
"19": "Deployment Guide",
|
||||
"20": "task-7-report.md",
|
||||
"21": "caching.md",
|
||||
"22": "runtime.md",
|
||||
"23": "SKILL.md",
|
||||
"24": "final-fix-report.md",
|
||||
"25": "task-4-report.md",
|
||||
"26": "task-8-report.md",
|
||||
"27": "observability.md",
|
||||
"28": "observability.md",
|
||||
"29": "Poller",
|
||||
"30": "task-1-brief.md",
|
||||
"31": "task-3-brief.md",
|
||||
"32": "Store",
|
||||
"33": "getCover",
|
||||
"34": "task-1-report.md",
|
||||
"35": "task-3-report.md",
|
||||
"36": "filter.js",
|
||||
"37": "task-2-brief.md",
|
||||
"38": "task-5-report.md",
|
||||
"39": "latest_sites.go",
|
||||
"40": "caching.md",
|
||||
"41": "runtime.md",
|
||||
"42": "prometheus-alerts.yml",
|
||||
"43": "task-4-brief.md",
|
||||
"44": "Implement tickets",
|
||||
"45": "progress.md",
|
||||
"46": "task-1-brief.md",
|
||||
"47": "task-2-brief.md",
|
||||
"48": "task-3-brief.md",
|
||||
"49": "task-4-brief.md",
|
||||
"50": "readBookmark",
|
||||
"51": "task-6-brief.md",
|
||||
"52": "TLSFetcher",
|
||||
"54": "AGENTS.md",
|
||||
"55": "ADR-0005: On-demand browser sidecar",
|
||||
"56": "Handler",
|
||||
"57": "Store",
|
||||
"60": "Time",
|
||||
"86": "SKILL.md",
|
||||
"87": "SKILL.md",
|
||||
"88": "details.md",
|
||||
"89": "error-creation.md",
|
||||
"90": "error-wrapping.md",
|
||||
"91": "error-wrapping.md",
|
||||
"92": "error-wrapping.md",
|
||||
"93": "error-wrapping.md",
|
||||
"94": "SKILL.md",
|
||||
"95": "cpu.md",
|
||||
"96": "runtime.md",
|
||||
"97": "runtime.md",
|
||||
"98": "SKILL.md",
|
||||
"99": "SKILL.md",
|
||||
"100": "helpers.md",
|
||||
"101": "http-testing.md",
|
||||
"102": "integration-testing.md",
|
||||
"103": "integration-testing.md",
|
||||
"104": "mocking.md",
|
||||
"105": "mocking.md",
|
||||
"106": "SKILL.md",
|
||||
"107": "SKILL.md",
|
||||
"108": "SKILL.md",
|
||||
"109": "SKILL.md",
|
||||
"110": "SKILL.md",
|
||||
"111": "SKILL.md",
|
||||
"112": "SKILL.md",
|
||||
"113": "SKILL.md",
|
||||
"114": "SKILL.md",
|
||||
"115": "SKILL.md",
|
||||
"128": "SKILL.md",
|
||||
"129": "SKILL.md",
|
||||
"130": "SKILL.md",
|
||||
"131": "SKILL.md",
|
||||
"132": "SKILL.md",
|
||||
"133": "SKILL.md",
|
||||
"134": "SKILL.md",
|
||||
"135": "SKILL.md",
|
||||
"136": "SKILL.md",
|
||||
"137": "SKILL.md",
|
||||
"138": "SKILL.md",
|
||||
"139": "SKILL.md",
|
||||
"140": "SKILL.md",
|
||||
"141": "SKILL.md",
|
||||
"142": "SKILL.md",
|
||||
"143": "SKILL.md",
|
||||
"144": "SKILL.md",
|
||||
"145": "observability.md",
|
||||
"152": "Allocation Patterns",
|
||||
"156": "Task 2 report: The single write path",
|
||||
"188": "Why Use samber/oops",
|
||||
"189": "singleflight Cache Stampede Prevention",
|
||||
"190": "Struct Field Alignment",
|
||||
"191": "testing/synctest Deterministic Goroutine Testing",
|
||||
"193": "Impeccable critique 2026-07-26T15:50:42Z (score 21/40)",
|
||||
"194": "Impeccable critique 2026-07-26T17:08:41Z (score 26/40)",
|
||||
"209": "P0: chapter-edit form causes horizontal overflow on mobile",
|
||||
"210": "P1: no hx-indicator on htmx mutations, silent failure",
|
||||
"237": "Dark-first, night-reading-optimized principle",
|
||||
"238": "Single-user, no-accounts positioning"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
/usr/bin/python3
|
||||
@@ -0,0 +1 @@
|
||||
.
|
||||
@@ -0,0 +1,410 @@
|
||||
# Graph Report - mangaBookmark (2026-08-11)
|
||||
|
||||
## Corpus Check
|
||||
- 107 files · ~261,472 words
|
||||
- Verdict: corpus is large enough that graph structure adds value.
|
||||
|
||||
## Summary
|
||||
- 1434 nodes · 3122 edges · 118 communities (57 shown, 61 thin omitted)
|
||||
- Extraction: 91% EXTRACTED · 9% INFERRED · 0% AMBIGUOUS · INFERRED: 294 edges (avg confidence: 0.77)
|
||||
- Token cost: 0 input · 0 output
|
||||
|
||||
## Graph Freshness
|
||||
- Built from commit: `c400c91a`
|
||||
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
|
||||
- Run `graphify update .` after code changes (no API cost).
|
||||
|
||||
## Community Hubs (Navigation)
|
||||
- [[_COMMUNITY_HTMX Library Internals|HTMX Library Internals]]
|
||||
- [[_COMMUNITY_Latest-Chapter Poller Tests|Latest-Chapter Poller Tests]]
|
||||
- [[_COMMUNITY_Userscript Site Adapters|Userscript Site Adapters]]
|
||||
- [[_COMMUNITY_Status Buckets Web UI|Status Buckets Web UI]]
|
||||
- [[_COMMUNITY_Go HTTP Test Helpers|Go HTTP Test Helpers]]
|
||||
- [[_COMMUNITY_Web UI Handler Tests|Web UI Handler Tests]]
|
||||
- [[_COMMUNITY_Go Error Handling Patterns|Go Error Handling Patterns]]
|
||||
- [[_COMMUNITY_Web UI ListLogin Views|Web UI List/Login Views]]
|
||||
- [[_COMMUNITY_Latest-Chapter Fetch Logic|Latest-Chapter Fetch Logic]]
|
||||
- [[_COMMUNITY_SessionAuth Handling|Session/Auth Handling]]
|
||||
- [[_COMMUNITY_Go Code Style Guide|Go Code Style Guide]]
|
||||
- [[_COMMUNITY_Latest-Chapter Poll Config|Latest-Chapter Poll Config]]
|
||||
- [[_COMMUNITY_Store|Store]]
|
||||
- [[_COMMUNITY_Go Allocation Patterns|Go Allocation Patterns]]
|
||||
- [[_COMMUNITY_Open|Open]]
|
||||
- [[_COMMUNITY_Go CPU Optimization|Go CPU Optimization]]
|
||||
- [[_COMMUNITY_Skill Discovery Docs|Skill Discovery Docs]]
|
||||
- [[_COMMUNITY_FavouriteDelete Fragments Task|Favourite/Delete Fragments Task]]
|
||||
- [[_COMMUNITY_Status Bucket Backend Logic|Status Bucket Backend Logic]]
|
||||
- [[_COMMUNITY_Deployment Guide|Deployment Guide]]
|
||||
- [[_COMMUNITY_task-7-report|task-7-report.md]]
|
||||
- [[_COMMUNITY_caching|caching.md]]
|
||||
- [[_COMMUNITY_runtime|runtime.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_final-fix-report|final-fix-report.md]]
|
||||
- [[_COMMUNITY_task-4-report|task-4-report.md]]
|
||||
- [[_COMMUNITY_task-8-report|task-8-report.md]]
|
||||
- [[_COMMUNITY_observability|observability.md]]
|
||||
- [[_COMMUNITY_observability|observability.md]]
|
||||
- [[_COMMUNITY_Poller|Poller]]
|
||||
- [[_COMMUNITY_task-1-brief|task-1-brief.md]]
|
||||
- [[_COMMUNITY_task-3-brief|task-3-brief.md]]
|
||||
- [[_COMMUNITY_Store|Store]]
|
||||
- [[_COMMUNITY_getCover|getCover]]
|
||||
- [[_COMMUNITY_task-1-report|task-1-report.md]]
|
||||
- [[_COMMUNITY_task-3-report|task-3-report.md]]
|
||||
- [[_COMMUNITY_filter.js|filter.js]]
|
||||
- [[_COMMUNITY_task-2-brief|task-2-brief.md]]
|
||||
- [[_COMMUNITY_task-5-report|task-5-report.md]]
|
||||
- [[_COMMUNITY_latest_sites.go|latest_sites.go]]
|
||||
- [[_COMMUNITY_caching|caching.md]]
|
||||
- [[_COMMUNITY_runtime|runtime.md]]
|
||||
- [[_COMMUNITY_prometheus-alerts.yml|prometheus-alerts.yml]]
|
||||
- [[_COMMUNITY_task-4-brief|task-4-brief.md]]
|
||||
- [[_COMMUNITY_Implement tickets|Implement tickets]]
|
||||
- [[_COMMUNITY_progress|progress.md]]
|
||||
- [[_COMMUNITY_task-1-brief|task-1-brief.md]]
|
||||
- [[_COMMUNITY_task-2-brief|task-2-brief.md]]
|
||||
- [[_COMMUNITY_task-3-brief|task-3-brief.md]]
|
||||
- [[_COMMUNITY_task-4-brief|task-4-brief.md]]
|
||||
- [[_COMMUNITY_readBookmark|readBookmark]]
|
||||
- [[_COMMUNITY_task-6-brief|task-6-brief.md]]
|
||||
- [[_COMMUNITY_TLSFetcher|TLSFetcher]]
|
||||
- [[_COMMUNITY_AGENTS|AGENTS.md]]
|
||||
- [[_COMMUNITY_ADR-0005 On-demand browser sidecar|ADR-0005: On-demand browser sidecar]]
|
||||
- [[_COMMUNITY_Handler|Handler]]
|
||||
- [[_COMMUNITY_Time|Time]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_details|details.md]]
|
||||
- [[_COMMUNITY_error-creation|error-creation.md]]
|
||||
- [[_COMMUNITY_error-wrapping|error-wrapping.md]]
|
||||
- [[_COMMUNITY_error-wrapping|error-wrapping.md]]
|
||||
- [[_COMMUNITY_error-wrapping|error-wrapping.md]]
|
||||
- [[_COMMUNITY_error-wrapping|error-wrapping.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_cpu|cpu.md]]
|
||||
- [[_COMMUNITY_runtime|runtime.md]]
|
||||
- [[_COMMUNITY_runtime|runtime.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_helpers|helpers.md]]
|
||||
- [[_COMMUNITY_http-testing|http-testing.md]]
|
||||
- [[_COMMUNITY_integration-testing|integration-testing.md]]
|
||||
- [[_COMMUNITY_integration-testing|integration-testing.md]]
|
||||
- [[_COMMUNITY_mocking|mocking.md]]
|
||||
- [[_COMMUNITY_mocking|mocking.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_SKILL|SKILL.md]]
|
||||
- [[_COMMUNITY_observability|observability.md]]
|
||||
- [[_COMMUNITY_Allocation Patterns|Allocation Patterns]]
|
||||
- [[_COMMUNITY_Task 2 report The single write path|Task 2 report: The single write path]]
|
||||
- [[_COMMUNITY_Why Use samberoops|Why Use samber/oops]]
|
||||
- [[_COMMUNITY_singleflight Cache Stampede Prevention|singleflight Cache Stampede Prevention]]
|
||||
- [[_COMMUNITY_Struct Field Alignment|Struct Field Alignment]]
|
||||
- [[_COMMUNITY_testingsynctest Deterministic Goroutine Testing|testing/synctest Deterministic Goroutine Testing]]
|
||||
- [[_COMMUNITY_Impeccable critique 2026-07-26T155042Z (score 2140)|Impeccable critique 2026-07-26T15:50:42Z (score 21/40)]]
|
||||
- [[_COMMUNITY_Impeccable critique 2026-07-26T170841Z (score 2640)|Impeccable critique 2026-07-26T17:08:41Z (score 26/40)]]
|
||||
- [[_COMMUNITY_P0 chapter-edit form causes horizontal overflow on mobile|P0: chapter-edit form causes horizontal overflow on mobile]]
|
||||
- [[_COMMUNITY_P1 no hx-indicator on htmx mutations, silent failure|P1: no hx-indicator on htmx mutations, silent failure]]
|
||||
- [[_COMMUNITY_Dark-first, night-reading-optimized principle|Dark-first, night-reading-optimized principle]]
|
||||
- [[_COMMUNITY_Single-user, no-accounts positioning|Single-user, no-accounts positioning]]
|
||||
|
||||
## God Nodes (most connected - your core abstractions)
|
||||
1. `testConfig()` - 53 edges
|
||||
2. `newWebTestServer()` - 49 edges
|
||||
3. `newTestStore()` - 42 edges
|
||||
4. `newTestStore()` - 41 edges
|
||||
5. `e()` - 32 edges
|
||||
6. `Handler` - 29 edges
|
||||
7. `ne()` - 28 edges
|
||||
8. `De()` - 28 edges
|
||||
9. `Open()` - 27 edges
|
||||
10. `se()` - 27 edges
|
||||
|
||||
## Surprising Connections (you probably didn't know these)
|
||||
- `el()` --indirect_call--> `c()` [INFERRED]
|
||||
userscript/manga-bookmark.user.js → backend/internal/web/static/htmx.min.js
|
||||
- `el()` --indirect_call--> `c()` [INFERRED]
|
||||
userscript/novel-bookmark.user.js → backend/internal/web/static/htmx.min.js
|
||||
- `latestChapterFromAnchors()` --indirect_call--> `re()` [INFERRED]
|
||||
userscript/manga-bookmark.user.js → backend/internal/web/static/htmx.min.js
|
||||
- `el()` --indirect_call--> `k()` [INFERRED]
|
||||
userscript/manga-bookmark.user.js → backend/internal/web/static/htmx.min.js
|
||||
- `el()` --indirect_call--> `k()` [INFERRED]
|
||||
userscript/novel-bookmark.user.js → backend/internal/web/static/htmx.min.js
|
||||
|
||||
## Import Cycles
|
||||
- None detected.
|
||||
|
||||
## Communities (118 total, 61 thin omitted)
|
||||
|
||||
### Community 0 - "HTMX Library Internals"
|
||||
Cohesion: 0.08
|
||||
Nodes (101): A(), ae(), an(), at(), B(), be(), bn(), bt() (+93 more)
|
||||
|
||||
### Community 1 - "Latest-Chapter Poller Tests"
|
||||
Cohesion: 0.07
|
||||
Nodes (79): M, TestMain(), M, TestMain(), M, Main(), start(), URL() (+71 more)
|
||||
|
||||
### Community 2 - "Userscript Site Adapters"
|
||||
Cohesion: 0.06
|
||||
Nodes (77): adapterFor(), anchorsFromDocument(), anchorsFromHTML(), apiDelete(), apiGet(), apiPut(), applyFabPos(), applyLatestChapterIfChanged() (+69 more)
|
||||
|
||||
### Community 3 - "Status Buckets Web UI"
|
||||
Cohesion: 0.06
|
||||
Nodes (74): adapterFor(), anchorsFromDocument(), anchorsFromHTML(), apiDelete(), apiGet(), apiPut(), applyFabPos(), applyLatestChapterIfChanged() (+66 more)
|
||||
|
||||
### Community 4 - "Go HTTP Test Helpers"
|
||||
Cohesion: 0.05
|
||||
Nodes (39): Test Helpers, Test Timeout, Basic Handler Test, HTTP Handler Testing, Query Parameters and Headers, Docker Compose Fixture, Integration Testing, SQL Schema Fixture (+31 more)
|
||||
|
||||
### Community 5 - "Web UI Handler Tests"
|
||||
Cohesion: 0.10
|
||||
Nodes (67): bookmarkNewKaganeSeries(), bookmarkNewNovelfullSeries(), bookmarkNewSeries(), Context, Store, T, newAcquirer(), readBookmark() (+59 more)
|
||||
|
||||
### Community 6 - "Go Error Handling Patterns"
|
||||
Cohesion: 0.06
|
||||
Nodes (33): Creating Errors, Custom Error Types, Custom types that wrap other errors, Decision table: which error strategy to use, Error Creation, Error String Conventions, Errors as Values, `errors.New` — static error messages (+25 more)
|
||||
|
||||
### Community 7 - "Web UI List/Login Views"
|
||||
Cohesion: 0.08
|
||||
Nodes (32): Handler, Request, ResponseWriter, Store, Healthz(), writeJSON(), Auth(), compressible() (+24 more)
|
||||
|
||||
### Community 8 - "Latest-Chapter Fetch Logic"
|
||||
Cohesion: 0.08
|
||||
Nodes (23): Code Style Details, Extract Complex Conditions, Value vs Pointer Arguments, Code Organization Within Files, Complex Conditions & Init Scope, Composite Literals, Control Flow, Cross-References (+15 more)
|
||||
|
||||
### Community 9 - "Session/Auth Handling"
|
||||
Cohesion: 0.14
|
||||
Nodes (14): Allocation Patterns, Backing Array Leaks, Direct indexing vs append, Eliminate redundant map lookups, Interface boxing, Map never shrinks, Map size hints, Memory Optimization (+6 more)
|
||||
|
||||
### Community 10 - "Go Code Style Guide"
|
||||
Cohesion: 0.11
|
||||
Nodes (18): Avoid io.ReadAll for large payloads, Batch Operations, Buffered I/O, Cgo Overhead, Channel: batch processing from a stream, Concurrent Multi-Stage Pipelines, Connection pooling, Database: batch inserts over row-by-row (+10 more)
|
||||
|
||||
### Community 11 - "Latest-Chapter Poll Config"
|
||||
Cohesion: 0.06
|
||||
Nodes (25): CoverContentType(), coverRelativePath(), coverSourceAddress(), displayChapter(), Store, currentLib(), currentTab(), filterBookmarks() (+17 more)
|
||||
|
||||
### Community 12 - "Store"
|
||||
Cohesion: 0.29
|
||||
Nodes (6): ADR-0007: The backend hosts every Site's Cover bytes, Consequences, Considered options, Decision, Two deliberate relaxations, Why a future reader will find this surprising
|
||||
|
||||
### Community 13 - "Go Allocation Patterns"
|
||||
Cohesion: 0.13
|
||||
Nodes (14): Algorithmic Complexity, Avoid iterator chains, Caching Patterns, Compiled Pattern Caching, Early returns and short-circuit loops, LRU caches, Map lookups over slice scanning, Precomputed lookup tables (+6 more)
|
||||
|
||||
### Community 14 - "Open"
|
||||
Cohesion: 0.11
|
||||
Nodes (16): Agent skills, Architecture, Commands, Comments, Design system, Domain docs, Forge: Gitea, not GitHub, graphify (+8 more)
|
||||
|
||||
### Community 15 - "Go CPU Optimization"
|
||||
Cohesion: 0.14
|
||||
Nodes (13): Common Skill Categories, Find Skills, How to Help Users Find Skills, Step 1: Understand What They Need, Step 2: Check the Leaderboard First, Step 3: Search for Skills, Step 4: Verify Quality Before Recommending, Step 5: Present Options to the User (+5 more)
|
||||
|
||||
### Community 16 - "Skill Discovery Docs"
|
||||
Cohesion: 0.12
|
||||
Nodes (22): Action, awaitPromise(), browserConnectionLost(), classifyBrowserError(), Context, Mutex, isInterstitial(), jsString() (+14 more)
|
||||
|
||||
### Community 17 - "Favourite/Delete Fragments Task"
|
||||
Cohesion: 0.07
|
||||
Nodes (27): 1. Summary answer table, 2. The two reference pages, 3. Chapter page → series URL: every in-page pointer, in priority order, 4.1 Sample method, 4.2 Divergence results, 4.3 Is there a derivable rule? **No.**, 4.4 The split case — a slug can change *mid-series*, 4. The reverse direction, and how common divergence is (+19 more)
|
||||
|
||||
### Community 18 - "Status Bucket Backend Logic"
|
||||
Cohesion: 0.12
|
||||
Nodes (15): Assessment, Calibration, Critical (Must Fix), Do Not Trust the Report, Important (Should Fix), Inputs, Issues, Method (+7 more)
|
||||
|
||||
### Community 19 - "Deployment Guide"
|
||||
Cohesion: 0.13
|
||||
Nodes (14): 1. Backend, 2. Userscript, Adapter reference (verified live 2026-07-24), Config (env), Deploy behind your reverse proxy, Desktop iteration (optional), Develop / test, Endpoints (+6 more)
|
||||
|
||||
### Community 20 - "task-7-report.md"
|
||||
Cohesion: 0.12
|
||||
Nodes (15): 0. Preflight, 1. Back up the database, 2. Pull the new code, 3. Rebuild and restart, 4. Verify the deploy, 5. Smoke-test the full loop, 6. Rollback, 7. The whole thing, as one block (+7 more)
|
||||
|
||||
### Community 21 - "caching.md"
|
||||
Cohesion: 0.14
|
||||
Nodes (13): 0. Prerequisites, 1. Configure `.env`, 1b. Web UI, 2. Build + start, 3. Verify over HTTPS, 4. Configure the userscript, 5. Install on Bromite, 6. Smoke-test the full loop (+5 more)
|
||||
|
||||
### Community 22 - "runtime.md"
|
||||
Cohesion: 0.17
|
||||
Nodes (11): Accessibility & Inclusion, Brand Commitments, Capabilities and Constraints, Evidence on Hand, Operating Context, Platform, Positioning, Product (+3 more)
|
||||
|
||||
### Community 23 - "SKILL.md"
|
||||
Cohesion: 0.13
|
||||
Nodes (15): Cache Locality, Contiguous 2D allocation, CPU Optimization, False Sharing, Function Inlining, Handling CPU-specific instruction sets, Instruction-Level Parallelism, Monotonic Time (+7 more)
|
||||
|
||||
### Community 24 - "final-fix-report.md"
|
||||
Cohesion: 0.20
|
||||
Nodes (9): 1. The one idea, 2. Tokens, 3. Type, 4. Components (web UI), 5. Components (userscript panel), 6. Motion, 7. Accessibility floor (not negotiable), 8. Adding something new — checklist (+1 more)
|
||||
|
||||
### Community 25 - "task-4-report.md"
|
||||
Cohesion: 0.28
|
||||
Nodes (4): Duration, Store, Time, Session
|
||||
|
||||
### Community 26 - "task-8-report.md"
|
||||
Cohesion: 0.13
|
||||
Nodes (15): Allocation Rate Reduction, Ballast pattern (pre-Go 1.19), Garbage Collector Tuning, GC pacing, GC Profiling and Diagnostics, GODEBUG=gctrace=1, GOGC (default: 100), GOMAXPROCS in Containers (+7 more)
|
||||
|
||||
### Community 27 - "observability.md"
|
||||
Cohesion: 0.20
|
||||
Nodes (10): CI Regression Detection, Common Mistakes, Core Philosophy, Cross-References, Decision Tree: Where Is Time Spent?, Deep Dives, Go Performance Optimization, Iterative Optimization Methodology (+2 more)
|
||||
|
||||
### Community 28 - "observability.md"
|
||||
Cohesion: 0.31
|
||||
Nodes (5): closeCardPanels(), setActiveTab(), toggleChapterForm(), toggleConfirmRow(), togglePanel()
|
||||
|
||||
### Community 29 - "Poller"
|
||||
Cohesion: 0.33
|
||||
Nodes (5): ADR-0006: The browser runs on the home machine, over the tailnet, Consequences, Constraints, Decision, Why
|
||||
|
||||
### Community 30 - "task-1-brief.md"
|
||||
Cohesion: 0.22
|
||||
Nodes (8): 0. The generator is throwaway, 1. Stop the old API and take a fresh export, 2. Bring up Postgres with the schema and the owner Reader, 3. Generate the import SQL, 4. Review it by eye, 5. Apply it, 6. Afterwards, SQLite → Postgres cutover runbook
|
||||
|
||||
### Community 31 - "task-3-brief.md"
|
||||
Cohesion: 0.29
|
||||
Nodes (6): Conventions, Issue tracker: Gitea (`tea` CLI), Pull requests as a triage surface, Wayfinding operations, When a skill says "fetch the relevant ticket", When a skill says "publish to the issue tracker"
|
||||
|
||||
### Community 32 - "Store"
|
||||
Cohesion: 0.40
|
||||
Nodes (5): Map of pointers for large, frequently updated structs, Memory Layout, Pointer receivers for large structs, Struct field alignment, Zero-size field at end of struct
|
||||
|
||||
### Community 33 - "getCover"
|
||||
Cohesion: 0.33
|
||||
Nodes (12): coverResponse(), Request, T, TestCoverFetcherCanonicalisesJpgAlias(), TestCoverFetcherFetchesPublicHTTPSImage(), TestCoverFetcherRefusesUnsafeDestinationsBeforeRequest(), TestCoverFetcherRejectsNonImage(), TestCoverFetcherRejectsOversizedBody() (+4 more)
|
||||
|
||||
### Community 34 - "task-1-report.md"
|
||||
Cohesion: 0.33
|
||||
Nodes (5): Before exploring, read these, Domain Docs, File structure, Flag ADR conflicts, Use the glossary's vocabulary
|
||||
|
||||
### Community 35 - "task-3-report.md"
|
||||
Cohesion: 0.33
|
||||
Nodes (5): Before You Begin, Report Format, Self-Review Before Reporting, When You're in Over Your Head, Your Job
|
||||
|
||||
### Community 36 - "filter.js"
|
||||
Cohesion: 0.08
|
||||
Nodes (36): ClearCookie(), ClientIP(), Duration, Mutex, Request, ResponseWriter, Time, isHTTPS() (+28 more)
|
||||
|
||||
### Community 37 - "task-2-brief.md"
|
||||
Cohesion: 0.40
|
||||
Nodes (4): Consequences, Only the Poll writes Series fields, Series is a shared entity, and only the Poll may update it, Why
|
||||
|
||||
### Community 38 - "task-5-report.md"
|
||||
Cohesion: 0.50
|
||||
Nodes (3): Consequences, Considered options, Postgres replaces SQLite as the primary datastore
|
||||
|
||||
### Community 39 - "latest_sites.go"
|
||||
Cohesion: 0.10
|
||||
Nodes (83): floatPtr(), testConfig(), getCover(), Cookie, Handler, ResponseRecorder, T, TestListRendersAcquiredCover() (+75 more)
|
||||
|
||||
### Community 40 - "caching.md"
|
||||
Cohesion: 0.50
|
||||
Nodes (3): Consequences, Considered options, Identity comes from Discord OAuth; we store no passwords and send no email
|
||||
|
||||
### Community 41 - "runtime.md"
|
||||
Cohesion: 0.22
|
||||
Nodes (5): Continuous Profiling, Production Observability for Performance, Pyroscope pull mode (via Grafana Alloy), Pyroscope push mode, Real-Time Visualization (Development)
|
||||
|
||||
### Community 42 - "prometheus-alerts.yml"
|
||||
Cohesion: 0.50
|
||||
Nodes (4): Prometheus Alerting Rules (Go Performance), GoroutineLeak Alert, HighGCPauseTime Alert, MemoryNearLimit Alert
|
||||
|
||||
### Community 43 - "task-4-brief.md"
|
||||
Cohesion: 0.50
|
||||
Nodes (3): Consequence, The wire format stays flat and deliberately does not mirror the schema, Why a future reader will find this surprising
|
||||
|
||||
### Community 44 - "Implement tickets"
|
||||
Cohesion: 0.22
|
||||
Nodes (8): 1. Collect the tickets, 2. Plan the batch, 3. Get the plan approved, 4. Run a wave, 5. Land the wave, 6. Close the batch, Implement tickets, Ticket #<n> — <title>
|
||||
|
||||
### Community 46 - "task-1-brief.md"
|
||||
Cohesion: 0.35
|
||||
Nodes (14): browser_alive(), connection(), connection_signal(), finish_connection(), has_connections(), lock(), reaper(), entrypoint.sh script (+6 more)
|
||||
|
||||
### Community 47 - "task-2-brief.md"
|
||||
Cohesion: 0.29
|
||||
Nodes (6): Design Health Score, Design Specificity Verdict, Minor Observations, Persona Red Flags, Priority Issues, Questions to Consider
|
||||
|
||||
### Community 48 - "task-3-brief.md"
|
||||
Cohesion: 0.29
|
||||
Nodes (6): Design Health Score, Design Specificity Verdict, Minor Observations, Persona Red Flags, Priority Issues, Questions to Consider
|
||||
|
||||
### Community 50 - "readBookmark"
|
||||
Cohesion: 0.33
|
||||
Nodes (5): ADR-0008: A Series identity is discovered from the Site's links, never derived from an address, Consequences, Considered options, Decision, Why
|
||||
|
||||
### Community 52 - "TLSFetcher"
|
||||
Cohesion: 0.33
|
||||
Nodes (5): Escalate rather than guess, Order of work, Report, Review, The worktree is your whole world
|
||||
|
||||
### Community 54 - "AGENTS.md"
|
||||
Cohesion: 0.29
|
||||
Nodes (6): Adding a test, Commands, Gotchas, How the harness works, Testing the userscript, What is NOT testable here
|
||||
|
||||
### Community 55 - "ADR-0005: On-demand browser sidecar"
|
||||
Cohesion: 0.50
|
||||
Nodes (3): ADR-0005: On-demand browser sidecar, Constraints, Decision
|
||||
|
||||
### Community 56 - "Handler"
|
||||
Cohesion: 0.50
|
||||
Nodes (3): Live URL shapes (verified 2026-07-26, may drift — re-check against live pages before trust), Second script: `novel-bookmark.user.js`, Userscript structure (single IIFE, `manga-bookmark.user.js`)
|
||||
|
||||
### Community 60 - "Time"
|
||||
Cohesion: 0.08
|
||||
Nodes (41): Addr, Context, Store, defaultCoverResolver(), fetchCoverBytes(), Client, Context, NewCoverFetcher() (+33 more)
|
||||
|
||||
### Community 152 - "Allocation Patterns"
|
||||
Cohesion: 0.22
|
||||
Nodes (9): Alerting rules (examples), CPU saturation, GC pressure, Goroutine leaks, Grafana Dashboards, Memory leaks, Prometheus Metrics for Go, PromQL Queries for Performance Diagnosis (+1 more)
|
||||
|
||||
### Community 156 - "Task 2 report: The single write path"
|
||||
Cohesion: 0.07
|
||||
Nodes (71): auth(), getBookmarks(), Handler, Request, Store, T, newTestServer(), newTestStore() (+63 more)
|
||||
|
||||
## Knowledge Gaps
|
||||
- **411 isolated node(s):** `bookmarkmanager/backend`, `ctxKey`, `loginView`, `ctxKey`, `test` (+406 more)
|
||||
These have ≤1 connection - possible missing edges or undocumented components.
|
||||
- **61 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
|
||||
|
||||
## Suggested Questions
|
||||
_Questions this graph is uniquely positioned to answer:_
|
||||
|
||||
- **Why does `New()` connect `Web UI Handler Tests` to `Latest-Chapter Poller Tests`, `filter.js`, `Latest-Chapter Poll Config`, `Task 2 report: The single write path`, `Time`?**
|
||||
_High betweenness centrality (0.052) - this node is a cross-community bridge._
|
||||
- **Why does `Open()` connect `Latest-Chapter Poller Tests` to `Latest-Chapter Poll Config`, `Task 2 report: The single write path`, `Web UI Handler Tests`, `latest_sites.go`?**
|
||||
_High betweenness centrality (0.042) - this node is a cross-community bridge._
|
||||
- **Why does `newRouter()` connect `Task 2 report: The single write path` to `Web UI List/Login Views`, `Web UI Handler Tests`, `latest_sites.go`?**
|
||||
_High betweenness centrality (0.030) - this node is a cross-community bridge._
|
||||
- **Are the 47 inferred relationships involving `testConfig()` (e.g. with `TestListRendersAcquiredCover()` and `TestPublicCoverNeverEchoesNonImage()`) actually correct?**
|
||||
_`testConfig()` has 47 INFERRED edges - model-reasoned connections that need verification._
|
||||
- **Are the 8 inferred relationships involving `newWebTestServer()` (e.g. with `TestListRendersAcquiredCover()` and `TestPublicCoverRejectsUnknownAddress()`) actually correct?**
|
||||
_`newWebTestServer()` has 8 INFERRED edges - model-reasoned connections that need verification._
|
||||
- **Are the 6 inferred relationships involving `newTestStore()` (e.g. with `TestCreateAndGetSession()` and `TestDeleteSessionIsPerReader()`) actually correct?**
|
||||
_`newTestStore()` has 6 INFERRED edges - model-reasoned connections that need verification._
|
||||
- **What connects `bookmarkmanager/backend`, `ctxKey`, `loginView` to the rest of the system?**
|
||||
_420 weakly-connected nodes found - possible documentation gaps or missing edges._
|
||||
File diff suppressed because one or more lines are too long
+47738
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,607 @@
|
||||
{
|
||||
".agents/skills/golang-code-style/evals/evals.json": {
|
||||
"mtime": 1784884678.6627614,
|
||||
"ast_hash": "bec0e12446e7af3cd05de9b6d42badd8",
|
||||
"semantic_hash": "bec0e12446e7af3cd05de9b6d42badd8"
|
||||
},
|
||||
".agents/skills/golang-error-handling/evals/evals.json": {
|
||||
"mtime": 1784884678.6655047,
|
||||
"ast_hash": "275d710b774fba1e1d0bc098d3646c6d",
|
||||
"semantic_hash": "275d710b774fba1e1d0bc098d3646c6d"
|
||||
},
|
||||
".agents/skills/golang-performance/evals/evals.json": {
|
||||
"mtime": 1784884678.6688662,
|
||||
"ast_hash": "4f06df87f90aa0e4f6deaa318b47689f",
|
||||
"semantic_hash": "4f06df87f90aa0e4f6deaa318b47689f"
|
||||
},
|
||||
".agents/skills/golang-testing/evals/evals.json": {
|
||||
"mtime": 1784884678.6721346,
|
||||
"ast_hash": "60a821bbfd20c6fe8bba996b8b540dd4",
|
||||
"semantic_hash": "60a821bbfd20c6fe8bba996b8b540dd4"
|
||||
},
|
||||
"backend/go.mod": {
|
||||
"mtime": 1786216141.668644,
|
||||
"ast_hash": "dac242903b0e98c3e4395159d609e08e",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/main.go": {
|
||||
"mtime": 1786363889.5678573,
|
||||
"ast_hash": "6e98a3ae91aaa132df251e43c4dfca6d",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"skills-lock.json": {
|
||||
"mtime": 1784884678.6842625,
|
||||
"ast_hash": "4a94ac85bad6bce330d085bcc0ae3ffd",
|
||||
"semantic_hash": "4a94ac85bad6bce330d085bcc0ae3ffd"
|
||||
},
|
||||
"userscript/manga-bookmark.user.js": {
|
||||
"mtime": 1786363889.5678573,
|
||||
"ast_hash": "de4abcf9e0f099fb82b630d443db739f",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
".agents/skills/find-skills/SKILL.md": {
|
||||
"mtime": 1784884338.760326,
|
||||
"ast_hash": "62b297abdee9aea84c577ab2e04e1974",
|
||||
"semantic_hash": "62b297abdee9aea84c577ab2e04e1974"
|
||||
},
|
||||
".agents/skills/golang-code-style/SKILL.md": {
|
||||
"mtime": 1784884678.6623824,
|
||||
"ast_hash": "d6a01e6f64550a5c8d59dac2e948000e",
|
||||
"semantic_hash": "d6a01e6f64550a5c8d59dac2e948000e"
|
||||
},
|
||||
".agents/skills/golang-code-style/references/details.md": {
|
||||
"mtime": 1784884678.6627865,
|
||||
"ast_hash": "19891e396a986f1b24bf34b7a2854fcb",
|
||||
"semantic_hash": "19891e396a986f1b24bf34b7a2854fcb"
|
||||
},
|
||||
".agents/skills/golang-error-handling/SKILL.md": {
|
||||
"mtime": 1784884678.665052,
|
||||
"ast_hash": "8b7970f472adb240e5bc4bde863d43a6",
|
||||
"semantic_hash": "8b7970f472adb240e5bc4bde863d43a6"
|
||||
},
|
||||
".agents/skills/golang-error-handling/references/error-creation.md": {
|
||||
"mtime": 1784884678.665524,
|
||||
"ast_hash": "248dbf75492c68faef2334b8d83bd080",
|
||||
"semantic_hash": "248dbf75492c68faef2334b8d83bd080"
|
||||
},
|
||||
".agents/skills/golang-error-handling/references/error-handling.md": {
|
||||
"mtime": 1784884678.6655412,
|
||||
"ast_hash": "c2424ee3999b05963b199e0100727aa3",
|
||||
"semantic_hash": "c2424ee3999b05963b199e0100727aa3"
|
||||
},
|
||||
".agents/skills/golang-error-handling/references/error-wrapping.md": {
|
||||
"mtime": 1784884678.6655717,
|
||||
"ast_hash": "4a15d9266a1ea0c8bb1951e6b9c0f586",
|
||||
"semantic_hash": "4a15d9266a1ea0c8bb1951e6b9c0f586"
|
||||
},
|
||||
".agents/skills/golang-performance/SKILL.md": {
|
||||
"mtime": 1784884678.667833,
|
||||
"ast_hash": "35a15fd129c5bedaada3fd4df0b6ba8c",
|
||||
"semantic_hash": "35a15fd129c5bedaada3fd4df0b6ba8c"
|
||||
},
|
||||
".agents/skills/golang-performance/assets/prometheus-alerts.yml": {
|
||||
"mtime": 1784884678.668527,
|
||||
"ast_hash": "fa9357ffa87c4f894fc21afa9707c4db",
|
||||
"semantic_hash": "fa9357ffa87c4f894fc21afa9707c4db"
|
||||
},
|
||||
".agents/skills/golang-performance/references/caching.md": {
|
||||
"mtime": 1784884678.6690567,
|
||||
"ast_hash": "807c42a82994e5548dbf7eb6e30c71e0",
|
||||
"semantic_hash": "807c42a82994e5548dbf7eb6e30c71e0"
|
||||
},
|
||||
".agents/skills/golang-performance/references/cpu.md": {
|
||||
"mtime": 1784884678.669087,
|
||||
"ast_hash": "6d52e532ef51a35cc4134694c944517d",
|
||||
"semantic_hash": "6d52e532ef51a35cc4134694c944517d"
|
||||
},
|
||||
".agents/skills/golang-performance/references/io-networking.md": {
|
||||
"mtime": 1784884678.6691036,
|
||||
"ast_hash": "95c5dd51f728fd69c945a92ff021d766",
|
||||
"semantic_hash": "95c5dd51f728fd69c945a92ff021d766"
|
||||
},
|
||||
".agents/skills/golang-performance/references/memory.md": {
|
||||
"mtime": 1784884678.6691158,
|
||||
"ast_hash": "3b2108df06b4cfb3980fa80bbd9ebcff",
|
||||
"semantic_hash": "3b2108df06b4cfb3980fa80bbd9ebcff"
|
||||
},
|
||||
".agents/skills/golang-performance/references/observability.md": {
|
||||
"mtime": 1784884678.6691446,
|
||||
"ast_hash": "0aa8a498e8d55ccdd4990ad187bae828",
|
||||
"semantic_hash": "0aa8a498e8d55ccdd4990ad187bae828"
|
||||
},
|
||||
".agents/skills/golang-performance/references/runtime.md": {
|
||||
"mtime": 1784884678.669426,
|
||||
"ast_hash": "26386c33b3a3794aaef0556713bf8f3a",
|
||||
"semantic_hash": "26386c33b3a3794aaef0556713bf8f3a"
|
||||
},
|
||||
".agents/skills/golang-testing/SKILL.md": {
|
||||
"mtime": 1784884678.6716368,
|
||||
"ast_hash": "0a9b9793bba2a239db94e980272a393e",
|
||||
"semantic_hash": "0a9b9793bba2a239db94e980272a393e"
|
||||
},
|
||||
".agents/skills/golang-testing/references/helpers.md": {
|
||||
"mtime": 1784884678.6722167,
|
||||
"ast_hash": "0aecb7cfbeb9b374bf61c52e324d9d3f",
|
||||
"semantic_hash": "0aecb7cfbeb9b374bf61c52e324d9d3f"
|
||||
},
|
||||
".agents/skills/golang-testing/references/http-testing.md": {
|
||||
"mtime": 1784884678.67225,
|
||||
"ast_hash": "9111110c28a7fbbffc3537aad786b390",
|
||||
"semantic_hash": "9111110c28a7fbbffc3537aad786b390"
|
||||
},
|
||||
".agents/skills/golang-testing/references/integration-testing.md": {
|
||||
"mtime": 1784884678.67225,
|
||||
"ast_hash": "fcf9861bc36ae56e3fb7a1c18aa0e77f",
|
||||
"semantic_hash": "fcf9861bc36ae56e3fb7a1c18aa0e77f"
|
||||
},
|
||||
".agents/skills/golang-testing/references/mocking.md": {
|
||||
"mtime": 1784884678.6722653,
|
||||
"ast_hash": "3a08979e4603aae5c32a58d5b6c39765",
|
||||
"semantic_hash": "3a08979e4603aae5c32a58d5b6c39765"
|
||||
},
|
||||
"CLAUDE.md": {
|
||||
"mtime": 1786363889.5489495,
|
||||
"ast_hash": "fefcb1c49494514e0c36a2b808f39dfa",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"DEPLOY.md": {
|
||||
"mtime": 1786363889.552731,
|
||||
"ast_hash": "7fa7bb75239f8ad3798e44c12dce374c",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"README.md": {
|
||||
"mtime": 1786363889.552731,
|
||||
"ast_hash": "bb33ecb93e23c8f039049aec75217263",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"docker-compose.prod.yml": {
|
||||
"mtime": 1786292465.8305523,
|
||||
"ast_hash": "0751998a532297b8ac507a01ec48dc31",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"docker-compose.yml": {
|
||||
"mtime": 1786363889.5678573,
|
||||
"ast_hash": "d9a58147a573517afa4603b41cf55ca8",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
".claude/settings.json": {
|
||||
"mtime": 1784951973.1869545,
|
||||
"ast_hash": "e51077b6a7f1f67afc748f1a32a1557d",
|
||||
"semantic_hash": "e51077b6a7f1f67afc748f1a32a1557d"
|
||||
},
|
||||
"backend/web_test.go": {
|
||||
"mtime": 1786216141.700644,
|
||||
"ast_hash": "8f1b093b59eb1ed81bc7fc0c22495c50",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/main_test.go": {
|
||||
"mtime": 1786363889.5678573,
|
||||
"ast_hash": "8a165955cf28ad47481fec5ea7afb3d6",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
".claude/settings.local.json": {
|
||||
"mtime": 1785697645.350201,
|
||||
"ast_hash": "9a1ac6369f968e8df4be9dcff0948f70",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"PRODUCT.md": {
|
||||
"mtime": 1786216141.660644,
|
||||
"ast_hash": "c52072d1978286060087fa0686f9c7f9",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/.impeccable/critique/2026-07-26T15-50-42Z__backend-templates-app-html.md": {
|
||||
"mtime": 1785128576.2412457,
|
||||
"ast_hash": "d08627c27f22d453125db6c1ab4b71ec",
|
||||
"semantic_hash": "d08627c27f22d453125db6c1ab4b71ec"
|
||||
},
|
||||
"backend/.impeccable/critique/2026-07-26T17-08-41Z__backend-templates-app-html.md": {
|
||||
"mtime": 1785128576.2452524,
|
||||
"ast_hash": "e69a8340a371579ca3ea689660f7d7bd",
|
||||
"semantic_hash": "e69a8340a371579ca3ea689660f7d7bd"
|
||||
},
|
||||
"AGENTS.md": {
|
||||
"mtime": 1786363889.5489495,
|
||||
"ast_hash": "fefcb1c49494514e0c36a2b808f39dfa",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"userscript/test/logic.test.js": {
|
||||
"mtime": 1786363889.5716388,
|
||||
"ast_hash": "03b5c6c93786c55ac771fd79fd4a75bb",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
".claude/skills/testing-the-userscript/SKILL.md": {
|
||||
"mtime": 1786363889.5489495,
|
||||
"ast_hash": "8f3c0132eb4787a2c8736eb99f7689af",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"REDEPLOY.md": {
|
||||
"mtime": 1786363889.552731,
|
||||
"ast_hash": "d0baf08b95e7b5986234a9f36759c12e",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"docs/design-system.md": {
|
||||
"mtime": 1786022513.9623306,
|
||||
"ast_hash": "421cd7e57f02d4b467f120ca6ddd7b6a",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/api_test.go": {
|
||||
"mtime": 1786363889.552731,
|
||||
"ast_hash": "3fbe8423060efbc34517901dce44e9b5",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/cover_test.go": {
|
||||
"mtime": 1786363889.552731,
|
||||
"ast_hash": "c7e313d6c92eb28e6d370e5e89035984",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/api/handlers.go": {
|
||||
"mtime": 1786363889.552731,
|
||||
"ast_hash": "59e6b8767ab19839bb8f82891a7e4616",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/httpmw/middleware.go": {
|
||||
"mtime": 1786216141.672644,
|
||||
"ast_hash": "385b36f58488b7e6d93eb6d6034e9ee3",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/latest/browser.go": {
|
||||
"mtime": 1786363889.5565126,
|
||||
"ast_hash": "092dfbd2bc96e7a251672a5a0d922b37",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/latest/browser_test.go": {
|
||||
"mtime": 1786262323.6964688,
|
||||
"ast_hash": "e900f92971486f47d7ef76e9a95217fe",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/latest/fetch.go": {
|
||||
"mtime": 1785873769.5475056,
|
||||
"ast_hash": "398a3dc942a2cdbef6786d9868acb216",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/latest/poller.go": {
|
||||
"mtime": 1786363889.5565126,
|
||||
"ast_hash": "ebb0ee4e57d62b6aed97b8d266639a23",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/latest/poller_test.go": {
|
||||
"mtime": 1786363889.5602942,
|
||||
"ast_hash": "d14b179fb7eaab2885374b0aa9cf6967",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/latest/sites.go": {
|
||||
"mtime": 1786363889.5602942,
|
||||
"ast_hash": "3c1dfa79e1d50d43f5d4b26f0e612913",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/latest/sites_test.go": {
|
||||
"mtime": 1786363889.5602942,
|
||||
"ast_hash": "da1bfc7239936ae1fa70fcaf37d4106b",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/latest/smoke_image_test.go": {
|
||||
"mtime": 1786363889.5602942,
|
||||
"ast_hash": "db068cb59575f8c82669acbaf84bcaed",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/pgtest/pgtest.go": {
|
||||
"mtime": 1786216141.6766438,
|
||||
"ast_hash": "f60372d41516e66f7aaeb272da227d6e",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/session/session.go": {
|
||||
"mtime": 1786216141.6766438,
|
||||
"ast_hash": "9952474ffb22c825d6f075b866ee26f4",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/session/session_test.go": {
|
||||
"mtime": 1786216141.680644,
|
||||
"ast_hash": "37ffd00964e7a67350c68ed50c6503c5",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/store/migrations/0001_bookmarks.sql": {
|
||||
"mtime": 1786216141.680644,
|
||||
"ast_hash": "f87ccfb2c25c43f93021177ced0bfae4",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/store/migrations/0002_series.sql": {
|
||||
"mtime": 1786216141.6820722,
|
||||
"ast_hash": "5dc98771e0c0f6e8416b434c280b0efb",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/store/migrations/0003_reader.sql": {
|
||||
"mtime": 1786216141.6820722,
|
||||
"ast_hash": "444a97799f38f6222f87d4e9fb2d6258",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/store/migrations/0004_owner_bookmarks.sql": {
|
||||
"mtime": 1786216141.684644,
|
||||
"ast_hash": "e4fa900cc223865d3ecd4c60c5707a65",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/store/migrations/0005_sessions.sql": {
|
||||
"mtime": 1786216141.684644,
|
||||
"ast_hash": "5158887ebc57cf8c16a7b821b61cd760",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/store/migrations/0006_reader_token_epoch.sql": {
|
||||
"mtime": 1786216141.684644,
|
||||
"ast_hash": "3093cc1c3aae0cd9643d04105d045402",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/store/sessions.go": {
|
||||
"mtime": 1786216141.684644,
|
||||
"ast_hash": "eee3510cc6172ef4b1da820474c26b01",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/store/sessions_test.go": {
|
||||
"mtime": 1786216141.684644,
|
||||
"ast_hash": "0b6764a0ee20f5cb7748eecd31a1d220",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/store/store.go": {
|
||||
"mtime": 1786363889.5602942,
|
||||
"ast_hash": "54367a8ab043983e2491b2eb2650961c",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/store/store_test.go": {
|
||||
"mtime": 1786363889.5602942,
|
||||
"ast_hash": "dc823fd77bcce2268114e31d759b20a5",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/userscript/userscript.go": {
|
||||
"mtime": 1786216141.692644,
|
||||
"ast_hash": "aa13a71b1c9eefe4930fd31f27722328",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/userscript/userscript_test.go": {
|
||||
"mtime": 1786216141.692644,
|
||||
"ast_hash": "6c050968d7b8b67956da1a3136d2c3c7",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/web/discord.go": {
|
||||
"mtime": 1786216141.692644,
|
||||
"ast_hash": "69e4959c65fa67d7491aedf6a71bb575",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/web/oauth_test.go": {
|
||||
"mtime": 1786216141.692644,
|
||||
"ast_hash": "a3bddeb70dd8d7eb14139da808723ea8",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/web/static/filter.js": {
|
||||
"mtime": 1786022513.9473197,
|
||||
"ast_hash": "b4ee3306201bfd88b148b96801972617",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/web/static/htmx.min.js": {
|
||||
"mtime": 1785873769.5512016,
|
||||
"ast_hash": "19a573773be4ca22570ca2f8543120c5",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/web/web.go": {
|
||||
"mtime": 1786363889.5678573,
|
||||
"ast_hash": "8308949c658d3a08ce1c3cdbea6a907c",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/reader_credential_test.go": {
|
||||
"mtime": 1786216141.700644,
|
||||
"ast_hash": "2a751ea6d9c06635aa3179db0aef1b2b",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"chrome/entrypoint.sh": {
|
||||
"mtime": 1786363889.5678573,
|
||||
"ast_hash": "8008a187690764436540fab47ba0cfcc",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"userscript/novel-bookmark.user.js": {
|
||||
"mtime": 1786363889.5716388,
|
||||
"ast_hash": "3c8c241f7b67ddb00d2fc5f9c5b927c7",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"userscript/test/novel-logic.test.js": {
|
||||
"mtime": 1786363889.5716388,
|
||||
"ast_hash": "c54599d4beb533b5c522bf48ebacea1f",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
".opencode/agent/implementer.md": {
|
||||
"mtime": 1785873769.5402634,
|
||||
"ast_hash": "000de469c18d68352027e10c8ce8acfb",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
".opencode/agent/reviewer.md": {
|
||||
"mtime": 1785873769.5416775,
|
||||
"ast_hash": "e44a2f6f624db044e19508bc5ab05592",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"CONTEXT.md": {
|
||||
"mtime": 1786417841.7163916,
|
||||
"ast_hash": "1ff47b5340a725b0b7287ee29f63cd34",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"CUTOVER.md": {
|
||||
"mtime": 1786216141.660644,
|
||||
"ast_hash": "6c6f3e4c4c2f57867894280bce728c50",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/AGENTS.md": {
|
||||
"mtime": 1786363889.552731,
|
||||
"ast_hash": "6356ee58447f299e5fa7aa83486bbbe0",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/CLAUDE.md": {
|
||||
"mtime": 1786363889.552731,
|
||||
"ast_hash": "6356ee58447f299e5fa7aa83486bbbe0",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/web/templates/app.html": {
|
||||
"mtime": 1786216141.692644,
|
||||
"ast_hash": "3965e20e204afb71ba2a3aa86cb7c61c",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/web/templates/card.html": {
|
||||
"mtime": 1786363889.5678573,
|
||||
"ast_hash": "ab83ae0dbb34fd40c146a7cc1263173e",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/web/templates/chrome.html": {
|
||||
"mtime": 1786363889.5678573,
|
||||
"ast_hash": "d80b27cf3bd9d131075c485dd169dfcc",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/web/templates/icons.html": {
|
||||
"mtime": 1785873769.553139,
|
||||
"ast_hash": "8e10c507c32934a92463b4bca9e34fe6",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/web/templates/list.html": {
|
||||
"mtime": 1786216141.696644,
|
||||
"ast_hash": "365548aace8c06559a1f66db0ae47256",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/web/templates/login.html": {
|
||||
"mtime": 1786216141.696644,
|
||||
"ast_hash": "bcc3101498a66cf8b79f9d97c6c9cd6b",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/web/templates/readers.html": {
|
||||
"mtime": 1786216141.696644,
|
||||
"ast_hash": "c5034e76bd20a705d2799cb5ecb328f0",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/web/templates/setup.html": {
|
||||
"mtime": 1786216141.696644,
|
||||
"ast_hash": "72e93c0b827414063596f7338987d879",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"docs/adr/0001-postgresql-over-sqlite.md": {
|
||||
"mtime": 1786216141.704644,
|
||||
"ast_hash": "abfb08754cee58be67311377904f8ca4",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"docs/adr/0002-discord-oauth-no-passwords-no-email.md": {
|
||||
"mtime": 1786216141.7071996,
|
||||
"ast_hash": "852a04d86659385085da6ffc8b489933",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"docs/adr/0003-series-shared-and-poll-owned.md": {
|
||||
"mtime": 1786216141.7071996,
|
||||
"ast_hash": "58bb4d24e20f6f7adc1a8b9cf7967c3f",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"docs/adr/0004-wire-format-does-not-mirror-the-schema.md": {
|
||||
"mtime": 1786216141.7071996,
|
||||
"ast_hash": "a6ea2770dec2156f78a65b35ba06902a",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"docs/agents/domain.md": {
|
||||
"mtime": 1786216141.7071996,
|
||||
"ast_hash": "6f99318ac6cb9825b613bfde55d76091",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"docs/agents/issue-tracker.md": {
|
||||
"mtime": 1786216141.7087462,
|
||||
"ast_hash": "1342e66ccb84a84fd579fb6dc0b8243a",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"docs/agents/triage-labels.md": {
|
||||
"mtime": 1786216141.7087462,
|
||||
"ast_hash": "69114d07ed792d6bb1d13758ba5435e1",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"userscript/AGENTS.md": {
|
||||
"mtime": 1786363889.5678573,
|
||||
"ast_hash": "36ec1d31cb1f4f6a0263f570a146ecfa",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"userscript/CLAUDE.md": {
|
||||
"mtime": 1786363889.5678573,
|
||||
"ast_hash": "36ec1d31cb1f4f6a0263f570a146ecfa",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/web/static/login-art.png": {
|
||||
"mtime": 1786022513.9585779,
|
||||
"ast_hash": "05d7863cba344a946256719a0c9ef959",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/web/static/logo.svg": {
|
||||
"mtime": 1786022513.9585779,
|
||||
"ast_hash": "d0d34d0f08a25b53176cc55989b7babe",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/store/migrations/0007_covers.sql": {
|
||||
"mtime": 1786262323.6964688,
|
||||
"ast_hash": "6033ce0701be1236ed175362363bd96c",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"docs/adr/0005-on-demand-browser.md": {
|
||||
"mtime": 1786292465.8305523,
|
||||
"ast_hash": "8cf2fb8c0a66c2c7d82ae433b99ca42b",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"chrome/docker-compose.yml": {
|
||||
"mtime": 1786292465.8305523,
|
||||
"ast_hash": "5605599395a3f085904e78a2bfec1e58",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"docs/adr/0006-browser-on-the-home-machine.md": {
|
||||
"mtime": 1786292465.8305523,
|
||||
"ast_hash": "dfd6bbc045d23315f2942ee8d98eb7db",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"docs/adr/0007-backend-hosts-cover-bytes.md": {
|
||||
"mtime": 1786292465.8305523,
|
||||
"ast_hash": "b19e38045b3dcda7dd59634ed9227a68",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/store/migrations/0008_filesystem_covers.sql": {
|
||||
"mtime": 1786363889.5602942,
|
||||
"ast_hash": "46cf7822d4f667e3cab36b547abe5e97",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/latest/cover.go": {
|
||||
"mtime": 1786363889.5565126,
|
||||
"ast_hash": "e6749cfe3cd7c2e71d4392dde84f55f9",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/latest/cover_fetch_test.go": {
|
||||
"mtime": 1786363889.5565126,
|
||||
"ast_hash": "60d9eb7c59a3751baf4f31c7655217e7",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/latest/acquire.go": {
|
||||
"mtime": 1786363889.5565126,
|
||||
"ast_hash": "760310097141a864f14318ed3be2703e",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/latest/acquire_test.go": {
|
||||
"mtime": 1786363889.5565126,
|
||||
"ast_hash": "7bd9f41814f6bf59d8998dfb81cf990a",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"backend/internal/store/migrations/0009_series_cover_address.sql": {
|
||||
"mtime": 1786363889.5602942,
|
||||
"ast_hash": "4c1f6328b2e1a95828fad6d88d474c2d",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
".claude/skills/implement-tickets/SKILL.md": {
|
||||
"mtime": 1786417841.7117643,
|
||||
"ast_hash": "3060e32e19cc571d91871a98f18afe53",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
".omp/agents/ticket-implementer.md": {
|
||||
"mtime": 1786417841.7163916,
|
||||
"ast_hash": "0150a46c0d21c572b71b3d87d21ac925",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"docs/adr/0008-series-identity-is-discovered-not-derived.md": {
|
||||
"mtime": 1786417841.7163916,
|
||||
"ast_hash": "3ce6d64ef6a8a39f27c257b39065389e",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"docs/research/lightnovelworld-chapter-vs-series-slug.md": {
|
||||
"mtime": 1786417841.7163916,
|
||||
"ast_hash": "74a4e538875f0a7e8ca3d5dc48c0bb53",
|
||||
"semantic_hash": ""
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user