This commit is contained in:
2026-08-10 21:15:19 +01:00
parent d7ca591b76
commit 4da942786e
97 changed files with 105039 additions and 3370 deletions
@@ -0,0 +1,72 @@
{
"0": "User",
"1": "Client",
"2": "webauthn.go",
"3": "session",
"4": "GmailAPIProvider",
"5": "config.go",
"6": "parser",
"7": "DB",
"8": "session",
"9": "session",
"10": "Handler",
"11": "session",
"12": "writeErr",
"13": "Client",
"14": "Sign",
"15": "Worker",
"16": "session",
"17": "models.go",
"18": "Store",
"19": "uuidNew",
"20": "oauth2.go",
"21": "Go Web App No-Deps Pattern (skill)",
"22": "GoMail Action Plan v4 Overview",
"23": "QuarantineEntry",
"24": "ical.go",
"25": ".Run",
"26": "vcard.go",
"27": "Phase 11: Admin Portal",
"28": "app.js",
"29": "Server",
"30": "Suggested Next Session Scope",
"31": "Domain",
"32": "checkSPF",
"33": "Limiter",
"34": ".Run",
"35": ".Run",
"36": ".Run",
"37": "Core Principle: Compiles is Not Correct",
"38": "Phase 13: TLS + ACME + DANE/MTA-STS",
"39": "GraphAPIProvider",
"40": ".Run",
"41": "Phase 12: Auth Hardening (TOTP/App Passwords/Reset)",
"42": "gomail",
"43": "SieveScript",
"44": "MailContext",
"45": "CalendarObject",
"46": "OutboundQueueEntry",
"47": "Shared api() Fetch Helper Convention",
"48": "Checkpoint Working State as Durable Artifact",
"49": "Prioritize by Risk Reduction Over Task Order",
"50": "migration",
"51": "esc() HTML-escape helper (admin)",
"52": "login() (admin)",
"53": "showApp()/showLogin() (admin)",
"54": "graphify Project Rules",
"55": "admin/embed.go",
"56": "handlers.go",
"57": "loadDashboard",
"58": "showPage() router (admin)",
"59": "bootstrap.go",
"60": "webmail/embed.go",
"61": "bodyOf() raw MIME body extractor",
"62": "loadMessages()/viewMessage()/deleteMessage",
"63": "ListRule",
"64": ".GetContact",
"65": "dnssec.go",
"66": "totp.go",
"67": "StageResult",
"68": "pipeline.go",
"70": ".GetTLSCert"
}
+332
View File
@@ -0,0 +1,332 @@
# Graph Report - webmail (2026-08-10)
## Corpus Check
- 85 files · ~82,056 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 1169 nodes · 2612 edges · 70 communities (52 shown, 18 thin omitted)
- Extraction: 92% EXTRACTED · 8% INFERRED · 0% AMBIGUOUS · INFERRED: 201 edges (avg confidence: 0.81)
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `d7ca591b`
- 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)
- User
- Client
- webauthn.go
- session
- GmailAPIProvider
- config.go
- parser
- DB
- session
- session
- Handler
- session
- writeErr
- Client
- Sign
- Worker
- session
- models.go
- Store
- uuidNew
- oauth2.go
- Go Web App No-Deps Pattern (skill)
- GoMail Action Plan v4 Overview
- QuarantineEntry
- ical.go
- .Run
- vcard.go
- Phase 11: Admin Portal
- app.js
- Server
- Suggested Next Session Scope
- Domain
- checkSPF
- Limiter
- .Run
- .Run
- .Run
- Core Principle: Compiles is Not Correct
- Phase 13: TLS + ACME + DANE/MTA-STS
- GraphAPIProvider
- .Run
- Phase 12: Auth Hardening (TOTP/App Passwords/Reset)
- gomail
- SieveScript
- MailContext
- CalendarObject
- OutboundQueueEntry
- Shared api() Fetch Helper Convention
- Checkpoint Working State as Durable Artifact
- Prioritize by Risk Reduction Over Task Order
- migration
- esc() HTML-escape helper (admin)
- login() (admin)
- showApp()/showLogin() (admin)
- graphify Project Rules
- showPage() router (admin)
- bodyOf() raw MIME body extractor
- ListRule
- .GetContact
- dnssec.go
- totp.go
- StageResult
- pipeline.go
- .GetTLSCert
## God Nodes (most connected - your core abstractions)
1. `DB` - 81 edges
2. `User` - 67 edges
3. `Handler` - 50 edges
4. `writeErr()` - 36 edges
5. `writeJSON()` - 35 edges
6. `Store` - 28 edges
7. `api()` - 28 edges
8. `MasterKey` - 27 edges
9. `session` - 25 edges
10. `session` - 25 edges
## Surprising Connections (you probably didn't know these)
- `base.html Flask-style Block Layout` --conceptually_related_to--> `GoMail Webmail SPA (index.html)` [AMBIGUOUS]
.claude/go-web-app-no-deps-SKILL.md → internal/webmail/static/index.html
- `Dark Tailwind CSS Custom-Property Palette` --semantically_similar_to--> `GoMail Admin SPA (index.html)` [INFERRED] [semantically similar]
.claude/go-web-app-no-deps-SKILL.md → internal/admin/static/index.html
- `Dark Tailwind CSS Custom-Property Palette` --semantically_similar_to--> `GoMail Webmail SPA (index.html)` [INFERRED] [semantically similar]
.claude/go-web-app-no-deps-SKILL.md → internal/webmail/static/index.html
- `Shared api() Fetch Helper Convention` --semantically_similar_to--> `api() fetch helper (admin)` [INFERRED] [semantically similar]
.claude/go-web-app-no-deps-SKILL.md → internal/admin/static/index.html
- `Shared api() Fetch Helper Convention` --semantically_similar_to--> `api() fetch helper (webmail)` [INFERRED] [semantically similar]
.claude/go-web-app-no-deps-SKILL.md → internal/webmail/static/index.html
## Import Cycles
- None detected.
## Hyperedges (group relationships)
- **GoMail Project Documentation Set** — gomail_handover_overview, readme_gomail, gomail_action_plan_v4_overview, _claude_iterative_build_discipline_skill_gomail_project [INFERRED 0.85]
- **Admin Portal CRUD Feature Set** — internal_admin_static_index_domains_crud, internal_admin_static_index_users_crud, internal_admin_static_index_rules_crud, internal_admin_static_index_queue_crud, internal_admin_static_index_quarantine [EXTRACTED 1.00]
- **Recurring Bug-Pattern Documentation Across GoMail Docs** — _claude_iterative_build_discipline_skill_sqlite_single_conn, gomail_handover_sqlite_deadlock_bug, gomail_action_plan_v4_sqlite_deadlock_bug, _claude_iterative_build_discipline_skill_tcp_read_pattern, gomail_handover_tcp_bug, gomail_action_plan_v4_tcp_bug [INFERRED 0.85]
## Communities (70 total, 18 thin omitted)
### Community 0 - "User"
Cohesion: 0.10
Nodes (36): MailProvider, User, GenerateSecret(), NewChallenge(), Config, DB, Duration, HandlerFunc (+28 more)
### Community 1 - "Client"
Cohesion: 0.06
Nodes (31): AccountKey, Authorization, Challenge, ChallengeResponder, Client, directory, jwk, Order (+23 more)
### Community 2 - "webauthn.go"
Cohesion: 0.17
Nodes (16): cborDecode(), cborDecodeWithLength(), DecodePublicKey(), EncodePublicKey(), Time, ParseAttestationObject(), ParseAuthData(), parseCOSEKey() (+8 more)
### Community 3 - "session"
Cohesion: 0.11
Nodes (15): addFlag(), expandFetchItems(), extractHeaders(), flagsToIMAP(), session, indexOf(), matchesSearch(), parseSeqNum() (+7 more)
### Community 4 - "GmailAPIProvider"
Cohesion: 0.07
Nodes (36): CalendarEvent, CalendarProvider, Contact, ContactProvider, Folder, FullMessage, GmailAPIProvider, gmailDateTime (+28 more)
### Community 5 - "config.go"
Cohesion: 0.07
Nodes (36): buildOAuthConfigs(), Config, Handler, ipAllowlistMiddleware(), main(), Config, DatabaseConfig, JMAPConfig (+28 more)
### Community 6 - "parser"
Cohesion: 0.12
Nodes (21): evalTest(), execStatements(), Execute(), lookupHeader(), newLexer(), Parse(), FuzzParse(), F (+13 more)
### Community 8 - "session"
Cohesion: 0.12
Nodes (17): Config, Context, DB, Duration, Listener, WaitGroup, NewServer(), escapeQuoted() (+9 more)
### Community 9 - "session"
Cohesion: 0.13
Nodes (16): connHost(), Addr, Config, Conn, Context, DB, Duration, Limiter (+8 more)
### Community 10 - "Handler"
Cohesion: 0.19
Nodes (14): Context, DB, Request, ResponseWriter, ServeMux, jmapRole(), NewHandler(), splitCompositeID() (+6 more)
### Community 11 - "session"
Cohesion: 0.09
Nodes (28): connHost(), Addr, Config, Conn, Context, DB, Duration, Limiter (+20 more)
### Community 12 - "writeErr"
Cohesion: 0.20
Nodes (14): filterDomainsByTenant(), Handler, DB, HandlerFunc, Request, ResponseWriter, ServeMux, NewHandler() (+6 more)
### Community 13 - "Client"
Cohesion: 0.15
Nodes (12): Client, FetchedMessage, FolderInfo, SelectedInfo, Dial(), Config, Conn, Duration (+4 more)
### Community 14 - "Sign"
Cohesion: 0.14
Nodes (20): KeyPair, ExtractSignatureInfo(), GenerateKeyPair(), PrivateKey, ParseDNSPublicKey(), ParsePrivateKey(), buildDKIMHeader(), canonicalizeBodyRelaxed() (+12 more)
### Community 15 - "Worker"
Cohesion: 0.10
Nodes (25): TLSARecord, Certificate, Context, Lookup(), VerifyPeerCertificate(), Discover(), Context, Duration (+17 more)
### Community 16 - "session"
Cohesion: 0.12
Nodes (14): Scope, state, Authenticate(), checkAppPassword(), DB, Config, Conn, Context (+6 more)
### Community 17 - "models.go"
Cohesion: 0.15
Nodes (13): Addressbook, Alias, AppPassword, Calendar, Contact, LinkedAccountAuthType, MailboxEntry, MFABackupCode (+5 more)
### Community 18 - "Store"
Cohesion: 0.07
Nodes (46): IMAPCredential, OAuth2Credential, keyCacheKey, MasterKey, Handler, multistatusResponse, propSet, LinkedAccount (+38 more)
### Community 19 - "uuidNew"
Cohesion: 0.25
Nodes (3): MTASTSPolicy, Stats, uuidNew()
### Community 20 - "oauth2.go"
Cohesion: 0.20
Nodes (10): Context, Reader, Request, Time, NewAuthedRequest(), truncate(), Config, Token (+2 more)
### Community 21 - "Go Web App No-Deps Pattern (skill)"
Cohesion: 0.21
Nodes (13): go-web-app-no-deps Packaged Skill (.skill zip), base.html Flask-style Block Layout, Template Block Bleeding Bug (ParseGlob shared namespace), Static Asset Cache-Busting via Version Query Param, Dark Tailwind CSS Custom-Property Palette, JS Function-in-Conditional Scoping Bug, No-Third-Party-Dependencies Principle, Go Web App No-Deps Pattern (skill) (+5 more)
### Community 22 - "GoMail Action Plan v4 Overview"
Cohesion: 0.21
Nodes (12): GoMail (referenced project), Wire-Format Structs Need Explicit Serialization Tags, cmd/e2etestN Disposable Test Pattern, GoMail Action Plan v4 Overview, Phase 5: IMAP/POP3/Auth, Phase 7: CalDAV/CardDAV, Phase 8: Webmail (JWT + REST API + SPA), Phase 9: JMAP Core/Mail Subset (+4 more)
### Community 23 - "QuarantineEntry"
Cohesion: 0.22
Nodes (3): QuarantineEntry, QuarantineStatus, Time
### Community 24 - "ical.go"
Cohesion: 0.24
Nodes (9): Event, escape(), FuzzParse(), F, Time, Parse(), splitProperty(), unescape() (+1 more)
### Community 25 - ".Run"
Cohesion: 0.29
Nodes (7): extractLeadingDigits(), Context, Duration, chatCompletionRequest, chatCompletionResponse, chatMessage, LLMStage
### Community 26 - "vcard.go"
Cohesion: 0.27
Nodes (8): escape(), FuzzParse(), F, Parse(), splitProperty(), unescape(), unfold(), Card
### Community 27 - "Phase 11: Admin Portal"
Cohesion: 0.29
Nodes (10): Admin Domain Creation Missing Tenant Fallback Bug, Admin User Creation Missing domain_id Bug, Phase 11: Admin Portal, Quarantine: Admin Global Discard vs Webmail Per-User Release, Domains CRUD (loadDomains/createDomain/rotateDkim/deleteDomain), Quarantine Discard (admin), Outbound Queue Actions (retry/cancel), List Rules CRUD (+2 more)
### Community 28 - "app.js"
Cohesion: 0.10
Nodes (56): accounts, acctQuery(), addPasskey(), api(), b64urlToBuf(), bodyOf(), boot(), bufToB64url() (+48 more)
### Community 29 - "Server"
Cohesion: 0.18
Nodes (11): Server, connHost(), Addr, Config, Context, DB, Duration, Limiter (+3 more)
### Community 30 - "Suggested Next Session Scope"
Cohesion: 0.25
Nodes (9): bufio.Reader + io.ReadFull for TCP Protocol Boundaries, Genuine EICAR Byte-Level ClamAV Verification, Phase 10: OAuth2 + Gmail/M365 Multi-Account, Phase 14: Optional External Services (ClamAV/Rspamd/LLM), Phase 15: Hardening + Deploy, Token-Bucket Per-IP Rate Limiter, Fake clamd Server TCP Over-Read Bug, Suggested Next Session Scope (+1 more)
### Community 32 - "checkSPF"
Cohesion: 0.40
Nodes (7): checkSPF(), evaluateSPF(), Context, IP, matchCIDR(), spfOutcome, SPFStage
### Community 33 - "Limiter"
Cohesion: 0.33
Nodes (5): Mutex, Limiter, Time, New(), bucket
### Community 34 - ".Run"
Cohesion: 0.36
Nodes (5): Context, Duration, rspamdResponse, RspamdStage, rspamdSymbol
### Community 35 - ".Run"
Cohesion: 0.39
Nodes (4): Context, Duration, parseClamAddr(), ClamAVStage
### Community 36 - ".Run"
Cohesion: 0.22
Nodes (7): dmarcTag(), extractDomainFromHeader(), Context, orgDomain(), Context, DMARCStage, HeaderStage
### Community 37 - "Core Principle: Compiles is Not Correct"
Cohesion: 0.33
Nodes (6): iterative-build-discipline Packaged Skill (.skill zip), Core Principle: Compiles is Not Correct, Disposable Real End-to-End Test Pattern, Genuinely-Enforcing Fake Protocol Server Pattern, Negative-Path Tests as Non-Optional, Verify Against Published Test Vectors (RFC 6238)
### Community 38 - "Phase 13: TLS + ACME + DANE/MTA-STS"
Cohesion: 0.47
Nodes (6): Phase 13: TLS + ACME + DANE/MTA-STS, Sandbox Network/Toolchain Constraints, Immediate First Steps Setup, DNS Setup (MX/SPF/DKIM/DMARC), GoMail (Self-Hosted Email Server), TLS / ACME Quick Setup
### Community 39 - "GraphAPIProvider"
Cohesion: 0.17
Nodes (14): GraphAPIProvider, graphDateTimeTZ, graphFolder, graphMessage, graphRecipient, Config, Contact, Context (+6 more)
### Community 40 - ".Run"
Cohesion: 0.47
Nodes (3): dedupe(), Context, URLStage
### Community 41 - "Phase 12: Auth Hardening (TOTP/App Passwords/Reset)"
Cohesion: 0.50
Nodes (5): SQLite Single-Connection-Pool Query/Exec Deadlock Pattern, Phase 12: Auth Hardening (TOTP/App Passwords/Reset), Rationale: Phase 13 Pulled Forward, ConsumeBackupCode SQLite Deadlock Bug, SQLite Query+Exec Deadlock Bug (documented)
### Community 44 - "MailContext"
Cohesion: 0.31
Nodes (5): Message, MessageVerdict, domainOf(), IP, MailContext
### Community 47 - "Shared api() Fetch Helper Convention"
Cohesion: 1.00
Nodes (3): Shared api() Fetch Helper Convention, api() fetch helper (admin), api() fetch helper (webmail)
### Community 65 - "dnssec.go"
Cohesion: 0.38
Nodes (15): DNSKEY, DS, Context, query(), resolvers(), rrsetOf(), rrsigsOf(), Validate() (+7 more)
### Community 66 - "totp.go"
Cohesion: 0.48
Nodes (6): decodeSecret(), Generate(), Time, hotp(), ProvisioningURI(), Validate()
### Community 67 - "StageResult"
Cohesion: 0.40
Nodes (4): CheckResult, MessageCheck, injectSpamHeaders(), StageResult
### Community 68 - "pipeline.go"
Cohesion: 0.40
Nodes (8): DefaultStages(), Config, Context, NewOrchestrator(), StagesFromConfig(), verdictFor(), Orchestrator, Stage
## Ambiguous Edges - Review These
- `Template Renderer (fresh-instance-per-page)``GoMail Admin SPA (index.html)` [AMBIGUOUS]
.claude/go-web-app-no-deps-SKILL.md · relation: conceptually_related_to
- `base.html Flask-style Block Layout``GoMail Webmail SPA (index.html)` [AMBIGUOUS]
.claude/go-web-app-no-deps-SKILL.md · relation: conceptually_related_to
- `Security Basics: CSRF/Path-Traversal/Atomic-Write/CSP``GoMail Admin SPA (index.html)` [AMBIGUOUS]
.claude/go-web-app-no-deps-SKILL.md · relation: conceptually_related_to
- `Security Basics: CSRF/Path-Traversal/Atomic-Write/CSP``GoMail Webmail SPA (index.html)` [AMBIGUOUS]
.claude/go-web-app-no-deps-SKILL.md · relation: conceptually_related_to
## Knowledge Gaps
- **33 isolated node(s):** `gomail`, `Contact`, `CalendarProvider`, `ContactProvider`, `gmailLabel` (+28 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **18 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **What is the exact relationship between `Template Renderer (fresh-instance-per-page)` and `GoMail Admin SPA (index.html)`?**
_Edge tagged AMBIGUOUS (relation: conceptually_related_to) - confidence is low._
- **What is the exact relationship between `base.html Flask-style Block Layout` and `GoMail Webmail SPA (index.html)`?**
_Edge tagged AMBIGUOUS (relation: conceptually_related_to) - confidence is low._
- **What is the exact relationship between `Security Basics: CSRF/Path-Traversal/Atomic-Write/CSP` and `GoMail Admin SPA (index.html)`?**
_Edge tagged AMBIGUOUS (relation: conceptually_related_to) - confidence is low._
- **What is the exact relationship between `Security Basics: CSRF/Path-Traversal/Atomic-Write/CSP` and `GoMail Webmail SPA (index.html)`?**
_Edge tagged AMBIGUOUS (relation: conceptually_related_to) - confidence is low._
- **Why does `User` connect `User` to `GmailAPIProvider`, `DB`, `session`, `session`, `Handler`, `session`, `writeErr`, `session`, `models.go`, `Store`?**
_High betweenness centrality (0.297) - this node is a cross-community bridge._
- **Why does `Store` connect `Store` to `User`, `GmailAPIProvider`, `session`, `Handler`, `session`, `Worker`, `Server`?**
_High betweenness centrality (0.105) - this node is a cross-community bridge._
- **Why does `DB` connect `DB` to `.GetContact`, `StageResult`, `.GetTLSCert`, `SieveScript`, `MailContext`, `CalendarObject`, `OutboundQueueEntry`, `models.go`, `uuidNew`, `QuarantineEntry`, `Domain`, `ListRule`?**
_High betweenness centrality (0.085) - this node is a cross-community bridge._
+12
View File
@@ -0,0 +1,12 @@
{
"runs": [
{
"date": "2026-08-09T13:36:33.949106+00:00",
"input_tokens": 134823,
"output_tokens": 0,
"files": 78
}
],
"total_input_tokens": 134823,
"total_output_tokens": 0
}
File diff suppressed because it is too large Load Diff
+432
View File
@@ -0,0 +1,432 @@
{
".claude/settings.json": {
"mtime": 1786281487.088728,
"ast_hash": "",
"semantic_hash": ""
},
"cmd/gomail/main.go": {
"mtime": 1786303371.9406705,
"ast_hash": "32c3d08429cc99b216f59edf3e0e4caa",
"semantic_hash": ""
},
"go.mod": {
"mtime": 1786304427.3009958,
"ast_hash": "4bbf418e44c141deba9e99f9d780ed9b",
"semantic_hash": ""
},
"internal/accounts/link.go": {
"mtime": 1786299069.1242821,
"ast_hash": "5eed8ecb5be6a1c35c6591dedad976d1",
"semantic_hash": ""
},
"internal/accounts/provider.go": {
"mtime": 1786303040.5896587,
"ast_hash": "7b4ccfea1a6fbad3e8b519a295cb520b",
"semantic_hash": ""
},
"internal/accounts/provider_gomail.go": {
"mtime": 1786297740.5829873,
"ast_hash": "ac0d507cba9953d85a44ce0506217587",
"semantic_hash": ""
},
"internal/accounts/provider_imap.go": {
"mtime": 1786298998.877657,
"ast_hash": "4825cd303e132e3179500afe0e9098bd",
"semantic_hash": ""
},
"internal/accounts/provider_smtp_helper.go": {
"mtime": 1786289886.1606128,
"ast_hash": "4fec96778cdaa94b1ab2264236af8b48",
"semantic_hash": ""
},
"internal/acme/challenge.go": {
"mtime": 1786189310.0,
"ast_hash": "ec3bcb998b34bc2c8a43cb8f3880e112",
"semantic_hash": "ec3bcb998b34bc2c8a43cb8f3880e112"
},
"internal/acme/client.go": {
"mtime": 1786189290.0,
"ast_hash": "830b78389d159a75e48f1a0076b6275b",
"semantic_hash": "830b78389d159a75e48f1a0076b6275b"
},
"internal/acme/jws.go": {
"mtime": 1786189220.0,
"ast_hash": "e5aa7cbbea33d9971f1577e4c976cb8c",
"semantic_hash": "e5aa7cbbea33d9971f1577e4c976cb8c"
},
"internal/acme/obtain.go": {
"mtime": 1786189332.0,
"ast_hash": "d2f78794831ad67ba64fb79cb7eb1c00",
"semantic_hash": "d2f78794831ad67ba64fb79cb7eb1c00"
},
"internal/admin/api.go": {
"mtime": 1786281901.2009063,
"ast_hash": "14fbb199cccd839edb6cf98392226b03",
"semantic_hash": "14fbb199cccd839edb6cf98392226b03"
},
"internal/admin/embed.go": {
"mtime": 1786188384.0,
"ast_hash": "55b64461208f9449c417bddf49e686cc",
"semantic_hash": "55b64461208f9449c417bddf49e686cc"
},
"internal/admin/handlers.go": {
"mtime": 1786281901.8545587,
"ast_hash": "06aad8456678b41905ac6787e50fb15a",
"semantic_hash": "06aad8456678b41905ac6787e50fb15a"
},
"internal/auth/auth.go": {
"mtime": 1786281903.3781548,
"ast_hash": "c74ed7b257b2272dcfb860b8a60746a0",
"semantic_hash": "c74ed7b257b2272dcfb860b8a60746a0"
},
"internal/config/config.go": {
"mtime": 1786289818.8781466,
"ast_hash": "68fd6f093c4ba00106bdbbe59786a269",
"semantic_hash": ""
},
"internal/crypto/crypto.go": {
"mtime": 1786297602.7221303,
"ast_hash": "8de4f9714d1c3e73a4322080d6b1a2ca",
"semantic_hash": ""
},
"internal/dav/dav.go": {
"mtime": 1786281900.5555487,
"ast_hash": "9dc713615ff99b713ad2879fca2b28dd",
"semantic_hash": "9dc713615ff99b713ad2879fca2b28dd"
},
"internal/db/bootstrap.go": {
"mtime": 1786281902.3275623,
"ast_hash": "922a08de72be0ef63409ed402d01e098",
"semantic_hash": "922a08de72be0ef63409ed402d01e098"
},
"internal/db/db.go": {
"mtime": 1786297548.1684437,
"ast_hash": "aed0290af4025c8c84089356f8746f08",
"semantic_hash": ""
},
"internal/db/migrations.go": {
"mtime": 1786300065.1340663,
"ast_hash": "2eb17b13bdc6bd5a954c82b4503aa8f9",
"semantic_hash": ""
},
"internal/db/models.go": {
"mtime": 1786300091.6301413,
"ast_hash": "12f132efac1ac74ab13ce8bfce0bfc69",
"semantic_hash": ""
},
"internal/db/queries.go": {
"mtime": 1786301261.1620972,
"ast_hash": "684ba8ac79df6845b0f0571ee6ff67a3",
"semantic_hash": ""
},
"internal/dkim/keys.go": {
"mtime": 1785566243.0,
"ast_hash": "e8d336df9cba3a8f69c70962f8a75579",
"semantic_hash": "e8d336df9cba3a8f69c70962f8a75579"
},
"internal/dkim/sign.go": {
"mtime": 1785472923.0,
"ast_hash": "ba6dd425f253aac61b386a8aea0d2061",
"semantic_hash": "ba6dd425f253aac61b386a8aea0d2061"
},
"internal/dkim/verify.go": {
"mtime": 1785472944.0,
"ast_hash": "4e58aca20a4874dac789bc0a844bfba6",
"semantic_hash": "4e58aca20a4874dac789bc0a844bfba6"
},
"internal/ical/ical.go": {
"mtime": 1785905665.0,
"ast_hash": "2de79f76c377508c20caa2e8683e920a",
"semantic_hash": "2de79f76c377508c20caa2e8683e920a"
},
"internal/ical/ical_fuzz_test.go": {
"mtime": 1786207598.0,
"ast_hash": "5518fd86059d729048685e2bc39c24b2",
"semantic_hash": "5518fd86059d729048685e2bc39c24b2"
},
"internal/imap/commands.go": {
"mtime": 1786294683.3800013,
"ast_hash": "584a4c4fa7ad664aaec36bc404825512",
"semantic_hash": ""
},
"internal/imap/parser.go": {
"mtime": 1785638411.0,
"ast_hash": "687b7788b077688b9081f958b669a0e6",
"semantic_hash": "687b7788b077688b9081f958b669a0e6"
},
"internal/imap/server.go": {
"mtime": 1786289824.8942587,
"ast_hash": "50a8a0f58edd9d9bb6cafa385f3c97b2",
"semantic_hash": ""
},
"internal/imap/session.go": {
"mtime": 1786281910.5246246,
"ast_hash": "f06bd7a253f498fbe197951537bc589e",
"semantic_hash": "f06bd7a253f498fbe197951537bc589e"
},
"internal/imap/tokenize_fuzz_test.go": {
"mtime": 1786207631.0,
"ast_hash": "4920db9f0c2beaa06a7393ab027d3c2b",
"semantic_hash": "4920db9f0c2beaa06a7393ab027d3c2b"
},
"internal/imapclient/client.go": {
"mtime": 1786169633.0,
"ast_hash": "f9671c971ff9f39a2ed82af7ed3e87df",
"semantic_hash": "f9671c971ff9f39a2ed82af7ed3e87df"
},
"internal/jmap/jmap.go": {
"mtime": 1786281904.3499777,
"ast_hash": "2484a0bccd56908627cee4c769b689e5",
"semantic_hash": "2484a0bccd56908627cee4c769b689e5"
},
"internal/mailstore/maildir.go": {
"mtime": 1786297713.2183998,
"ast_hash": "ca8749979e4a1ca9ada23c072945189c",
"semantic_hash": ""
},
"internal/managesieve/server.go": {
"mtime": 1786281899.3706038,
"ast_hash": "4ebc166b83227affe5171026b8012876",
"semantic_hash": "4ebc166b83227affe5171026b8012876"
},
"internal/managesieve/session.go": {
"mtime": 1786281899.9771776,
"ast_hash": "ab69e22b6add70fdb6c18f056c474e8d",
"semantic_hash": "ab69e22b6add70fdb6c18f056c474e8d"
},
"internal/oauth2/oauth2.go": {
"mtime": 1786298531.0961437,
"ast_hash": "4e1c7abbe92feb151acecfec03229c50",
"semantic_hash": ""
},
"internal/pipeline/pipeline.go": {
"mtime": 1786281906.8561504,
"ast_hash": "2b0b026fc13ce700c083960df7bc7857",
"semantic_hash": "2b0b026fc13ce700c083960df7bc7857"
},
"internal/pipeline/stage_clamav.go": {
"mtime": 1786281905.5831316,
"ast_hash": "6a5c073d349a49e2cbe75863945a663b",
"semantic_hash": "6a5c073d349a49e2cbe75863945a663b"
},
"internal/pipeline/stage_dkim.go": {
"mtime": 1786281908.573951,
"ast_hash": "3f92da867d5b128398a8ffc70b6fa475",
"semantic_hash": "3f92da867d5b128398a8ffc70b6fa475"
},
"internal/pipeline/stage_dmarc.go": {
"mtime": 1786294688.9970334,
"ast_hash": "fc9ece401684fb950771b70db7a54d9d",
"semantic_hash": ""
},
"internal/pipeline/stage_headers.go": {
"mtime": 1786281909.176789,
"ast_hash": "e7777ff0afde0baa97bd458060e7c002",
"semantic_hash": "e7777ff0afde0baa97bd458060e7c002"
},
"internal/pipeline/stage_llm.go": {
"mtime": 1786281906.2809672,
"ast_hash": "c0a1d11888d0f32083b0e90d32018ec1",
"semantic_hash": "c0a1d11888d0f32083b0e90d32018ec1"
},
"internal/pipeline/stage_rspamd.go": {
"mtime": 1786281907.8549173,
"ast_hash": "6b7c65df77472ef32c96782db5d98d07",
"semantic_hash": "6b7c65df77472ef32c96782db5d98d07"
},
"internal/pipeline/stage_spf.go": {
"mtime": 1786281916.382805,
"ast_hash": "7e1eda77e5ba190bc50dda977b0c3723",
"semantic_hash": "7e1eda77e5ba190bc50dda977b0c3723"
},
"internal/pipeline/stage_url.go": {
"mtime": 1786281905.1305835,
"ast_hash": "f954d508ac085f560928c06171779db5",
"semantic_hash": "f954d508ac085f560928c06171779db5"
},
"internal/pop3/pop3.go": {
"mtime": 1786289853.1900737,
"ast_hash": "e4756d72c5bc2bd89fd41a2205ca3d14",
"semantic_hash": ""
},
"internal/queue/queue.go": {
"mtime": 1786300256.943359,
"ast_hash": "5e9631b0601474ed28f3626a293e8e08",
"semantic_hash": ""
},
"internal/ratelimit/http.go": {
"mtime": 1786289690.9789355,
"ast_hash": "039681ec4aef1340ab4ba8bf83baa679",
"semantic_hash": ""
},
"internal/ratelimit/ratelimit.go": {
"mtime": 1786207185.0,
"ast_hash": "4d5bf0b77d390cf3e71abb4d022cf0aa",
"semantic_hash": "4d5bf0b77d390cf3e71abb4d022cf0aa"
},
"internal/sieve/interp.go": {
"mtime": 1786169049.0,
"ast_hash": "6f13e1891ef551ffebba37e759742aca",
"semantic_hash": "6f13e1891ef551ffebba37e759742aca"
},
"internal/sieve/lexer.go": {
"mtime": 1786168959.0,
"ast_hash": "3d8d9f9f203855eaf8d638935f65f7bb",
"semantic_hash": "3d8d9f9f203855eaf8d638935f65f7bb"
},
"internal/sieve/parser.go": {
"mtime": 1786168977.0,
"ast_hash": "cbcd550894b5c473a160481098151605",
"semantic_hash": "cbcd550894b5c473a160481098151605"
},
"internal/sieve/sieve_fuzz_test.go": {
"mtime": 1786207613.0,
"ast_hash": "fa017deb29e67fa5264e3ecc59ede127",
"semantic_hash": "fa017deb29e67fa5264e3ecc59ede127"
},
"internal/smtp/auth.go": {
"mtime": 1786281931.1489654,
"ast_hash": "9220929f9afd4b5b8c39ee7401ea3ecd",
"semantic_hash": "9220929f9afd4b5b8c39ee7401ea3ecd"
},
"internal/smtp/server.go": {
"mtime": 1786281931.153782,
"ast_hash": "30d88aa535f6ee39072f35fa6c1fd108",
"semantic_hash": "30d88aa535f6ee39072f35fa6c1fd108"
},
"internal/smtp/session.go": {
"mtime": 1786281931.1489654,
"ast_hash": "41aae3368dc4be4eba559f0d732e9a37",
"semantic_hash": "41aae3368dc4be4eba559f0d732e9a37"
},
"internal/tlsutil/acme_manager.go": {
"mtime": 1786281902.8497763,
"ast_hash": "5e7aa10c39162f5d95f927ba4efc30fb",
"semantic_hash": "5e7aa10c39162f5d95f927ba4efc30fb"
},
"internal/tlsutil/selfsigned.go": {
"mtime": 1786193053.0,
"ast_hash": "9c58f78ed11e4c7bf208306285f0b32e",
"semantic_hash": "9c58f78ed11e4c7bf208306285f0b32e"
},
"internal/totp/totp.go": {
"mtime": 1786193280.0,
"ast_hash": "48f2c9db1c1307f13d78726aa3b24f6a",
"semantic_hash": "48f2c9db1c1307f13d78726aa3b24f6a"
},
"internal/vcard/vcard.go": {
"mtime": 1785905650.0,
"ast_hash": "8b0043626bac3cacc11b6ce76259445b",
"semantic_hash": "8b0043626bac3cacc11b6ce76259445b"
},
"internal/vcard/vcard_fuzz_test.go": {
"mtime": 1786207583.0,
"ast_hash": "5aeab637a3c3357bb2c13cacc21508c6",
"semantic_hash": "5aeab637a3c3357bb2c13cacc21508c6"
},
"internal/webmail/api.go": {
"mtime": 1786303416.0629382,
"ast_hash": "c3894a16e34ac088b8e9922fa14c91c5",
"semantic_hash": ""
},
"internal/webmail/embed.go": {
"mtime": 1786295803.857812,
"ast_hash": "78663d0210a610d1777c4b4151390cf1",
"semantic_hash": ""
},
"internal/webtoken/webtoken.go": {
"mtime": 1786289648.699828,
"ast_hash": "b9be7cc5ea74ce6b82de79ef3644cb52",
"semantic_hash": ""
},
".claude/go-web-app-no-deps-SKILL.md": {
"mtime": 1786206554.0,
"ast_hash": "eb54ace954e819a069a9f1284485d213",
"semantic_hash": "eb54ace954e819a069a9f1284485d213"
},
".claude/go-web-app-no-deps.skill": {
"mtime": 1786206554.0,
"ast_hash": "de820100f8ad2da76d57884262c9f5f0",
"semantic_hash": "de820100f8ad2da76d57884262c9f5f0"
},
".claude/iterative-build-discipline-SKILL.md": {
"mtime": 1786206504.0,
"ast_hash": "d0e94862b77af5f6ac99c3f2668db3c9",
"semantic_hash": "d0e94862b77af5f6ac99c3f2668db3c9"
},
".claude/iterative-build-discipline.skill": {
"mtime": 1786206504.0,
"ast_hash": "87a25b626d37a9dfe5c037ae409fecad",
"semantic_hash": "87a25b626d37a9dfe5c037ae409fecad"
},
"CLAUDE.md": {
"mtime": 1786281487.0884602,
"ast_hash": "82efb97a359f5c7290bf2513d14686be",
"semantic_hash": "82efb97a359f5c7290bf2513d14686be"
},
"GOMAIL_HANDOVER.md": {
"mtime": 1786206496.0,
"ast_hash": "81fbcb0478fce27c6b6e8c6646eed44a",
"semantic_hash": "81fbcb0478fce27c6b6e8c6646eed44a"
},
"README.md": {
"mtime": 1786208021.0,
"ast_hash": "257dbe428b6a41b51d4d8efcd2431615",
"semantic_hash": "257dbe428b6a41b51d4d8efcd2431615"
},
"gomail-action-plan-v4.md": {
"mtime": 1786206496.0,
"ast_hash": "203046a9566fb3c392ed2e51aa178805",
"semantic_hash": "203046a9566fb3c392ed2e51aa178805"
},
"internal/admin/static/index.html": {
"mtime": 1786188708.0,
"ast_hash": "77b0b0e42cf45a961571ee5e3a3a219a",
"semantic_hash": "77b0b0e42cf45a961571ee5e3a3a219a"
},
"internal/webmail/static/index.html": {
"mtime": 1786302422.3206468,
"ast_hash": "240f0802126ee6142b639b0c3d1fd749",
"semantic_hash": ""
},
"internal/webmail/static/app.js": {
"mtime": 1786302477.0202506,
"ast_hash": "8b8643e290174bcaab0192971680383d",
"semantic_hash": ""
},
"internal/accounts/provider_gmailapi.go": {
"mtime": 1786303230.0544362,
"ast_hash": "991624e71e139cb871a1c549e7b2583a",
"semantic_hash": ""
},
"internal/accounts/provider_graphapi.go": {
"mtime": 1786303329.356412,
"ast_hash": "4c7aca4b1ab67e5629fdd094e59caae4",
"semantic_hash": ""
},
"internal/dane/dane.go": {
"mtime": 1786304412.353843,
"ast_hash": "077c045db0d9c08bcb1c91fda5f095ce",
"semantic_hash": ""
},
"internal/mtasts/mtasts.go": {
"mtime": 1786300014.9348822,
"ast_hash": "832952ea8843b31f4f8a01ffa3cfeb7f",
"semantic_hash": ""
},
"internal/webauthn/cbor.go": {
"mtime": 1786301093.0761018,
"ast_hash": "79612ad8167cf6a9e6e18977f1d90f0f",
"semantic_hash": ""
},
"internal/webauthn/webauthn.go": {
"mtime": 1786301194.5917418,
"ast_hash": "f9abf441c2637cdb4bdfd28b358417a3",
"semantic_hash": ""
},
"internal/dnssec/dnssec.go": {
"mtime": 1786338656.3355203,
"ast_hash": "0041911983b254c6ba9b78906f3055c3",
"semantic_hash": ""
}
}