update
This commit is contained in:
@@ -1 +1,72 @@
|
||||
{"0": "TOTP & Web Token Auth", "1": "ACME/JWS Client", "2": "CalDAV/CardDAV Handlers", "3": "IMAP Command Parser", "4": "Mail Provider Abstraction", "5": "Server Config & Bootstrap", "6": "Sieve Filter Interpreter", "7": "DB Mutation Queries", "8": "IMAP Server Loop", "9": "POP3 Server Loop", "10": "JMAP Auth & Sessions", "11": "SMTP Session Header Parsing", "12": "Admin API Handlers", "13": "IMAP Client", "14": "DKIM Key Signing", "15": "Outbound Delivery Queue", "16": "SMTP Server Networking", "17": "Linked Account & Alias Queries", "18": "TCP Server Lifecycle", "19": "Calendar/Contact/TLS Queries", "20": "OAuth2 Config", "21": "Go-No-Deps Web App Pattern", "22": "GoMail Build Phases Overview", "23": "Quarantine & Message Queries", "24": "iCal Parsing & Fuzzing", "25": "LLM Spam Stage", "26": "vCard Parsing & Fuzzing", "27": "Admin Portal Bugs & CRUD", "28": "Spam Pipeline Orchestrator", "29": "SPF Stage", "30": "TCP Boundary & Rate-Limit Findings", "31": "Domain/Tenant Queries", "32": "Rspamd Stage", "33": "Per-IP Rate Limiter", "34": "ClamAV Stage", "35": "DMARC Stage", "36": "Spam Header Injection Stage", "37": "Iterative Build Discipline Skill", "38": "Deployment & DNS Setup", "39": "HTTP Middleware", "40": "URL Extraction Stage", "41": "SQLite Deadlock Findings", "42": "List Rule Queries", "43": "Sieve Script Queries", "44": "Mail Context Domain Helpers", "45": "Calendar Object Queries", "46": "Contact Queries", "47": "Shared api() Fetch Convention", "48": "Session Continuity Practices", "49": "Scope Prioritization Practices", "50": "DB Migrations", "51": "Shared esc() Helper", "52": "SPA Login/Logout", "53": "SPA App Boot/Routing", "54": "Graphify Project Rules", "55": "Embedded Assets (admin)", "56": "Admin Handlers Entry", "57": "Admin Dashboard Loader", "58": "Admin SPA Router", "59": "Webmail Bootstrap", "60": "Embedded Assets (webmail)", "61": "Raw MIME Body Extractor", "62": "Webmail Message Actions", "63": "Go Module Root"}
|
||||
{
|
||||
"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"
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{"0": "0601ba4c5ef570af", "1": "5563ceee816586bc", "2": "0065d9d7243491e5", "3": "5a4df2f471849b12", "4": "6b4a79ebdda6140e", "5": "398e7091e6710da5", "6": "43a892bf7f0137c1", "7": "9283dc7e174690b2", "8": "d19e0c173fbbd4cf", "9": "3aa8996b24118c33", "10": "c8f99b1d2797f728", "11": "743c756b0b4bdd9f", "12": "97a2f0692d97dc15", "13": "96bddd22ac12459b", "14": "ed1a75d8c2b19f50", "15": "5262c99718288789", "16": "fa3d5f16594f61cb", "17": "9f781490485c0586", "18": "8f35d32c03fe029b", "19": "c6941ea4d56538e3", "20": "1b0277c6dd12c83d", "21": "235c5b1d72f73e69", "22": "8299b1df0460d7a7", "23": "3468ea389b4941d0", "24": "ef3ef42ae2afbb2a", "25": "7489b031b1317de1", "26": "beb24c4d9ea79e3a", "27": "77bf2d2bfc22381b", "28": "b44f08f7bce825f4", "29": "b646f402108351cc", "30": "75e7934ab0b830de", "31": "b262509efd80d18b", "32": "5c44e1875cf3126a", "33": "67463d38582b6682", "34": "c6f4ee03c5881a2a", "35": "e04cacd1ed78efd5", "36": "6e9034dba552d1f5", "37": "57923a62fb5c83d6", "38": "2df20c00f5d849c4", "39": "9dd21636e0545a77", "40": "de7344ceee589455", "41": "fac8947f14f3076b", "42": "c6fbcadd0820177d", "43": "62afd540692951ef", "44": "4641c95c0f510d93", "45": "2a0d6510b94d201c", "46": "3b4aae9299fc2f7b", "47": "d0591e2bdecf97f9", "48": "279552eb69e8368b", "49": "75b9dab7ee74ca0c", "50": "3bad9ca60eedcd79", "51": "f9086d8302936834", "52": "63e3d2ab37f32156", "53": "302d78947e3d3db7", "54": "9b40c2d1b4a4feb2", "55": "ba1fd9dfea0b4665", "56": "0aea46458306bbdc", "57": "6148e60f6e7a4cef", "58": "91aebaec8cfa4ba0", "59": "89e311c1f6a17b74", "60": "a6635b6fb2421b76", "61": "237ba03f8b2be5a5", "62": "7594a8e28f35b921", "63": "c2f1ef3116de9154", "64": "1fdb13184fd71fdf", "65": "c5492aaa900554f3", "66": "9766cf03802f7b1b", "67": "2d28c20804038a71", "68": "2bd2f5cacb74baa4", "70": "e351c7db6c083440"}
|
||||
@@ -1 +1 @@
|
||||
/home/haku/projects/webmail
|
||||
.
|
||||
@@ -0,0 +1,73 @@
|
||||
{
|
||||
"0": "User",
|
||||
"1": "Client",
|
||||
"2": "webauthn.go",
|
||||
"3": "session",
|
||||
"4": "GoMailProvider",
|
||||
"5": "config.go",
|
||||
"6": "parser",
|
||||
"7": "DB",
|
||||
"8": "session",
|
||||
"9": "session",
|
||||
"10": "Handler",
|
||||
"11": "session",
|
||||
"12": "writeErr",
|
||||
"13": "Client",
|
||||
"14": "Sign",
|
||||
"15": "Worker",
|
||||
"16": "Server",
|
||||
"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": "dnsutil.go",
|
||||
"30": "Suggested Next Session Scope",
|
||||
"31": "Domain",
|
||||
"32": "checkSPF",
|
||||
"33": "Limiter",
|
||||
"34": ".Run",
|
||||
"35": ".Run",
|
||||
"36": "StageResult",
|
||||
"37": "Core Principle: Compiles is Not Correct",
|
||||
"38": "Phase 13: TLS + ACME + DANE/MTA-STS",
|
||||
"39": "Server",
|
||||
"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": "Contact",
|
||||
"65": "session",
|
||||
"66": "MailboxEntry",
|
||||
"67": "Server",
|
||||
"68": "pipeline.go",
|
||||
"69": "expandFetchItems",
|
||||
"70": ".GetTLSCert"
|
||||
}
|
||||
@@ -0,0 +1,337 @@
|
||||
# Graph Report - webmail (2026-08-09)
|
||||
|
||||
## Corpus Check
|
||||
- 85 files · ~80,564 words
|
||||
- Verdict: corpus is large enough that graph structure adds value.
|
||||
|
||||
## Summary
|
||||
- 1144 nodes · 2550 edges · 71 communities (53 shown, 18 thin omitted)
|
||||
- Extraction: 92% EXTRACTED · 8% INFERRED · 0% AMBIGUOUS · INFERRED: 205 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
|
||||
- GoMailProvider
|
||||
- config.go
|
||||
- parser
|
||||
- DB
|
||||
- session
|
||||
- session
|
||||
- Handler
|
||||
- session
|
||||
- writeErr
|
||||
- Client
|
||||
- Sign
|
||||
- Worker
|
||||
- Server
|
||||
- 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
|
||||
- dnsutil.go
|
||||
- Suggested Next Session Scope
|
||||
- Domain
|
||||
- checkSPF
|
||||
- Limiter
|
||||
- .Run
|
||||
- .Run
|
||||
- StageResult
|
||||
- Core Principle: Compiles is Not Correct
|
||||
- Phase 13: TLS + ACME + DANE/MTA-STS
|
||||
- Server
|
||||
- .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
|
||||
- Contact
|
||||
- session
|
||||
- MailboxEntry
|
||||
- Server
|
||||
- pipeline.go
|
||||
- expandFetchItems
|
||||
- .GetTLSCert
|
||||
|
||||
## God Nodes (most connected - your core abstractions)
|
||||
1. `DB` - 81 edges
|
||||
2. `User` - 64 edges
|
||||
3. `Handler` - 47 edges
|
||||
4. `writeErr()` - 34 edges
|
||||
5. `writeJSON()` - 33 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 (71 total, 18 thin omitted)
|
||||
|
||||
### Community 0 - "User"
|
||||
Cohesion: 0.09
|
||||
Nodes (42): User, NewGoMailProvider(), decodeSecret(), Generate(), GenerateSecret(), Time, hotp(), ProvisioningURI() (+34 more)
|
||||
|
||||
### Community 1 - "Client"
|
||||
Cohesion: 0.06
|
||||
Nodes (30): AccountKey, Authorization, Challenge, ChallengeResponder, Client, directory, jwk, Order (+22 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.19
|
||||
Nodes (8): state, Config, Conn, Context, session, ReadWriter, Server, newSession()
|
||||
|
||||
### Community 4 - "GoMailProvider"
|
||||
Cohesion: 0.06
|
||||
Nodes (38): Folder, FullMessage, GmailAPIProvider, gmailLabel, GoMailProvider, GraphAPIProvider, graphFolder, graphMessage (+30 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.13
|
||||
Nodes (19): evalTest(), execStatements(), Execute(), lookupHeader(), newLexer(), Parse(), FuzzParse(), F (+11 more)
|
||||
|
||||
### Community 8 - "session"
|
||||
Cohesion: 0.14
|
||||
Nodes (15): Scope, Authenticate(), checkAppPassword(), DB, escapeQuoted(), Conn, Context, ReadWriter (+7 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.15
|
||||
Nodes (16): applySieve(), extractHeader(), extractHeaderMap(), extractMessageID(), extractSubject(), Conn, Context, IP (+8 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.12
|
||||
Nodes (20): Discover(), Context, Duration, Matches(), parsePolicy(), backoffDuration(), domainOf(), Config (+12 more)
|
||||
|
||||
### Community 16 - "Server"
|
||||
Cohesion: 0.19
|
||||
Nodes (14): connHost(), Addr, Config, Conn, Context, DB, Duration, Limiter (+6 more)
|
||||
|
||||
### Community 17 - "models.go"
|
||||
Cohesion: 0.17
|
||||
Nodes (12): Addressbook, Alias, AppPassword, Calendar, CheckResult, MessageCheck, MFABackupCode, OwnerType (+4 more)
|
||||
|
||||
### Community 18 - "Store"
|
||||
Cohesion: 0.06
|
||||
Nodes (46): IMAPCredential, MailProvider, OAuth2Credential, keyCacheKey, MasterKey, Handler, multistatusResponse, propSet (+38 more)
|
||||
|
||||
### Community 19 - "uuidNew"
|
||||
Cohesion: 0.25
|
||||
Nodes (3): MTASTSPolicy, Stats, uuidNew()
|
||||
|
||||
### Community 20 - "oauth2.go"
|
||||
Cohesion: 0.18
|
||||
Nodes (11): Context, Reader, Request, Time, NewAuthedRequest(), truncate(), WellKnownEndpoints(), Config (+3 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 - "dnsutil.go"
|
||||
Cohesion: 0.20
|
||||
Nodes (18): TLSARecord, Response, RR, Certificate, Context, Lookup(), VerifyPeerCertificate(), buildQuery() (+10 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 - "StageResult"
|
||||
Cohesion: 0.19
|
||||
Nodes (9): dmarcTag(), extractDomainFromHeader(), Context, orgDomain(), Context, injectSpamHeaders(), DMARCStage, HeaderStage (+1 more)
|
||||
|
||||
### 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 - "Server"
|
||||
Cohesion: 0.18
|
||||
Nodes (11): Server, connHost(), Addr, Config, Context, DB, Duration, Limiter (+3 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 - "session"
|
||||
Cohesion: 0.20
|
||||
Nodes (3): session, matchesSearch(), quoteIfNeeded()
|
||||
|
||||
### Community 66 - "MailboxEntry"
|
||||
Cohesion: 0.26
|
||||
Nodes (7): MailboxEntry, addFlag(), extractHeaders(), flagsToIMAP(), indexOf(), parseSeqNum(), removeFlag()
|
||||
|
||||
### Community 67 - "Server"
|
||||
Cohesion: 0.26
|
||||
Nodes (8): Config, Context, DB, Duration, Listener, WaitGroup, NewServer(), Server
|
||||
|
||||
### Community 68 - "pipeline.go"
|
||||
Cohesion: 0.40
|
||||
Nodes (8): DefaultStages(), Config, Context, NewOrchestrator(), StagesFromConfig(), verdictFor(), Orchestrator, Stage
|
||||
|
||||
### Community 69 - "expandFetchItems"
|
||||
Cohesion: 0.32
|
||||
Nodes (6): expandFetchItems(), isList(), splitList(), tokenize(), FuzzTokenize(), F
|
||||
|
||||
## 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
|
||||
- **29 isolated node(s):** `gomail`, `gmailLabel`, `graphFolder`, `IMAPCredential`, `keyCacheKey` (+24 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 `session`, `GoMailProvider`, `DB`, `session`, `session`, `Handler`, `session`, `writeErr`, `models.go`, `Store`?**
|
||||
_High betweenness centrality (0.297) - this node is a cross-community bridge._
|
||||
- **Why does `Store` connect `Store` to `User`, `GoMailProvider`, `Server`, `session`, `Handler`, `Worker`, `Server`?**
|
||||
_High betweenness centrality (0.150) - this node is a cross-community bridge._
|
||||
- **Why does `DB` connect `DB` to `Contact`, `MailboxEntry`, `.GetTLSCert`, `SieveScript`, `MailContext`, `CalendarObject`, `OutboundQueueEntry`, `models.go`, `Store`, `uuidNew`, `QuarantineEntry`, `Domain`, `ListRule`?**
|
||||
_High betweenness centrality (0.095) - this node is a cross-community bridge._
|
||||
@@ -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
@@ -0,0 +1,432 @@
|
||||
{
|
||||
".claude/settings.json": {
|
||||
"mtime": 1786281487.088728,
|
||||
"ast_hash": "",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"cmd/gomail/main.go": {
|
||||
"mtime": 1786301328.7600007,
|
||||
"ast_hash": "9bc7ad461922c990788c456f84817a9f",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"go.mod": {
|
||||
"mtime": 1786283185.2691686,
|
||||
"ast_hash": "93100fd0185e78288141d5ed0b2c8b19",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/accounts/link.go": {
|
||||
"mtime": 1786299069.1242821,
|
||||
"ast_hash": "5eed8ecb5be6a1c35c6591dedad976d1",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/accounts/provider.go": {
|
||||
"mtime": 1786168320.0,
|
||||
"ast_hash": "4a180151e798601f43bda25bd1a80410",
|
||||
"semantic_hash": "4a180151e798601f43bda25bd1a80410"
|
||||
},
|
||||
"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": 1786302351.1001678,
|
||||
"ast_hash": "08cd2e43bf56f9b24d49fb5c75dfe90f",
|
||||
"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": 1786298739.5325413,
|
||||
"ast_hash": "a80e81ac8b519d6512decda32e7a7708",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/accounts/provider_graphapi.go": {
|
||||
"mtime": 1786298907.5633397,
|
||||
"ast_hash": "2780f65f9cfd9dda29fdfcdb6286c6b8",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/dane/dane.go": {
|
||||
"mtime": 1786299961.3714652,
|
||||
"ast_hash": "3ef099496960a4e2be04aae071be357c",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/dnsutil/dnsutil.go": {
|
||||
"mtime": 1786300340.0186586,
|
||||
"ast_hash": "6433e7754901f5eeb8e12d88342265b1",
|
||||
"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": ""
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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._
|
||||
@@ -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
@@ -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": ""
|
||||
}
|
||||
}
|
||||
+197
-170
@@ -1,85 +1,96 @@
|
||||
# Graph Report - . (2026-08-09)
|
||||
# Graph Report - webmail (2026-08-10)
|
||||
|
||||
## Corpus Check
|
||||
- 78 files · ~64,934 words
|
||||
- 85 files · ~82,339 words
|
||||
- Verdict: corpus is large enough that graph structure adds value.
|
||||
|
||||
## Summary
|
||||
- 953 nodes · 2017 edges · 64 communities (48 shown, 16 thin omitted)
|
||||
- Extraction: 91% EXTRACTED · 8% INFERRED · 0% AMBIGUOUS · INFERRED: 170 edges (avg confidence: 0.82)
|
||||
- Token cost: 134,823 input · 0 output
|
||||
- 1169 nodes · 2614 edges · 70 communities (52 shown, 18 thin omitted)
|
||||
- Extraction: 92% EXTRACTED · 8% INFERRED · 0% AMBIGUOUS · INFERRED: 203 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)
|
||||
- TOTP & Web Token Auth
|
||||
- ACME/JWS Client
|
||||
- CalDAV/CardDAV Handlers
|
||||
- IMAP Command Parser
|
||||
- Mail Provider Abstraction
|
||||
- Server Config & Bootstrap
|
||||
- Sieve Filter Interpreter
|
||||
- DB Mutation Queries
|
||||
- IMAP Server Loop
|
||||
- POP3 Server Loop
|
||||
- JMAP Auth & Sessions
|
||||
- SMTP Session Header Parsing
|
||||
- Admin API Handlers
|
||||
- IMAP Client
|
||||
- DKIM Key Signing
|
||||
- Outbound Delivery Queue
|
||||
- SMTP Server Networking
|
||||
- Linked Account & Alias Queries
|
||||
- TCP Server Lifecycle
|
||||
- Calendar/Contact/TLS Queries
|
||||
- OAuth2 Config
|
||||
- Go-No-Deps Web App Pattern
|
||||
- GoMail Build Phases Overview
|
||||
- Quarantine & Message Queries
|
||||
- iCal Parsing & Fuzzing
|
||||
- LLM Spam Stage
|
||||
- vCard Parsing & Fuzzing
|
||||
- Admin Portal Bugs & CRUD
|
||||
- Spam Pipeline Orchestrator
|
||||
- SPF Stage
|
||||
- TCP Boundary & Rate-Limit Findings
|
||||
- Domain/Tenant Queries
|
||||
- Rspamd Stage
|
||||
- Per-IP Rate Limiter
|
||||
- ClamAV Stage
|
||||
- DMARC Stage
|
||||
- Spam Header Injection Stage
|
||||
- Iterative Build Discipline Skill
|
||||
- Deployment & DNS Setup
|
||||
- HTTP Middleware
|
||||
- URL Extraction Stage
|
||||
- SQLite Deadlock Findings
|
||||
- List Rule Queries
|
||||
- Sieve Script Queries
|
||||
- Mail Context Domain Helpers
|
||||
- Calendar Object Queries
|
||||
- Contact Queries
|
||||
- Shared api() Fetch Convention
|
||||
- Session Continuity Practices
|
||||
- Scope Prioritization Practices
|
||||
- DB Migrations
|
||||
- Shared esc() Helper
|
||||
- SPA Login/Logout
|
||||
- SPA App Boot/Routing
|
||||
- Graphify Project Rules
|
||||
- Admin SPA Router
|
||||
- Raw MIME Body Extractor
|
||||
- Go Module Root
|
||||
- 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` - 77 edges
|
||||
2. `User` - 56 edges
|
||||
3. `Handler` - 35 edges
|
||||
4. `Store` - 27 edges
|
||||
5. `session` - 25 edges
|
||||
6. `session` - 25 edges
|
||||
7. `writeJSON()` - 24 edges
|
||||
8. `writeErr()` - 24 edges
|
||||
9. `MasterKey` - 23 edges
|
||||
10. `session` - 20 edges
|
||||
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]
|
||||
@@ -101,176 +112,192 @@
|
||||
- **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 (64 total, 16 thin omitted)
|
||||
## Communities (70 total, 18 thin omitted)
|
||||
|
||||
### Community 0 - "TOTP & Web Token Auth"
|
||||
### Community 0 - "User"
|
||||
Cohesion: 0.10
|
||||
Nodes (34): User, decodeSecret(), Generate(), GenerateSecret(), Time, hotp(), ProvisioningURI(), Validate() (+26 more)
|
||||
Nodes (37): MailProvider, User, NewGoMailProvider(), GenerateSecret(), NewChallenge(), Config, DB, Duration (+29 more)
|
||||
|
||||
### Community 1 - "ACME/JWS Client"
|
||||
### Community 1 - "Client"
|
||||
Cohesion: 0.06
|
||||
Nodes (31): AccountKey, Authorization, Challenge, ChallengeResponder, Client, directory, jwk, Order (+23 more)
|
||||
|
||||
### Community 2 - "CalDAV/CardDAV Handlers"
|
||||
Cohesion: 0.08
|
||||
Nodes (34): MailProvider, MasterKey, Handler, multistatusResponse, propSet, LinkedAccountProvider, Config, DB (+26 more)
|
||||
### Community 2 - "webauthn.go"
|
||||
Cohesion: 0.17
|
||||
Nodes (16): cborDecode(), cborDecodeWithLength(), DecodePublicKey(), EncodePublicKey(), Time, ParseAttestationObject(), ParseAuthData(), parseCOSEKey() (+8 more)
|
||||
|
||||
### Community 3 - "IMAP Command Parser"
|
||||
Cohesion: 0.06
|
||||
Nodes (24): MailboxEntry, state, addFlag(), expandFetchItems(), extractHeaders(), flagsToIMAP(), session, indexOf() (+16 more)
|
||||
### Community 3 - "session"
|
||||
Cohesion: 0.11
|
||||
Nodes (15): addFlag(), expandFetchItems(), extractHeaders(), flagsToIMAP(), session, indexOf(), matchesSearch(), parseSeqNum() (+7 more)
|
||||
|
||||
### Community 4 - "Mail Provider Abstraction"
|
||||
Cohesion: 0.09
|
||||
Nodes (25): Folder, FullMessage, GoMailProvider, IMAPCredential, IMAPProvider, ListOpts, MessageHeader, OAuth2Credential (+17 more)
|
||||
### Community 4 - "GmailAPIProvider"
|
||||
Cohesion: 0.07
|
||||
Nodes (35): CalendarEvent, CalendarProvider, Contact, ContactProvider, Folder, FullMessage, GmailAPIProvider, gmailDateTime (+27 more)
|
||||
|
||||
### Community 5 - "Server Config & Bootstrap"
|
||||
Cohesion: 0.09
|
||||
Nodes (30): buildOAuthConfigs(), Config, main(), Config, DatabaseConfig, JMAPConfig, LinkedAccountsConfig, NotifyConfig (+22 more)
|
||||
### Community 5 - "config.go"
|
||||
Cohesion: 0.07
|
||||
Nodes (36): buildOAuthConfigs(), Config, Handler, ipAllowlistMiddleware(), main(), Config, DatabaseConfig, JMAPConfig (+28 more)
|
||||
|
||||
### Community 6 - "Sieve Filter Interpreter"
|
||||
### Community 6 - "parser"
|
||||
Cohesion: 0.12
|
||||
Nodes (20): evalTest(), execStatements(), Execute(), lookupHeader(), newLexer(), Parse(), FuzzParse(), F (+12 more)
|
||||
Nodes (21): evalTest(), execStatements(), Execute(), lookupHeader(), newLexer(), Parse(), FuzzParse(), F (+13 more)
|
||||
|
||||
### Community 8 - "IMAP Server Loop"
|
||||
### Community 8 - "session"
|
||||
Cohesion: 0.12
|
||||
Nodes (17): Config, Context, DB, Duration, Listener, WaitGroup, NewServer(), escapeQuoted() (+9 more)
|
||||
|
||||
### Community 9 - "POP3 Server Loop"
|
||||
Cohesion: 0.15
|
||||
Nodes (13): Config, Conn, Context, DB, Duration, Listener, ReadWriter, WaitGroup (+5 more)
|
||||
### Community 9 - "session"
|
||||
Cohesion: 0.13
|
||||
Nodes (16): connHost(), Addr, Config, Conn, Context, DB, Duration, Limiter (+8 more)
|
||||
|
||||
### Community 10 - "JMAP Auth & Sessions"
|
||||
Cohesion: 0.12
|
||||
Nodes (20): Scope, Authenticate(), checkAppPassword(), DB, Context, DB, Request, ResponseWriter (+12 more)
|
||||
### Community 10 - "Handler"
|
||||
Cohesion: 0.19
|
||||
Nodes (14): Context, DB, Request, ResponseWriter, ServeMux, jmapRole(), NewHandler(), splitCompositeID() (+6 more)
|
||||
|
||||
### Community 11 - "SMTP Session Header Parsing"
|
||||
Cohesion: 0.16
|
||||
Nodes (15): extractHeader(), extractHeaderMap(), extractMessageID(), extractSubject(), Conn, Context, IP, ReadWriter (+7 more)
|
||||
### Community 11 - "session"
|
||||
Cohesion: 0.09
|
||||
Nodes (28): connHost(), Addr, Config, Conn, Context, DB, Duration, Limiter (+20 more)
|
||||
|
||||
### Community 12 - "Admin API Handlers"
|
||||
### Community 12 - "writeErr"
|
||||
Cohesion: 0.20
|
||||
Nodes (14): filterDomainsByTenant(), Handler, DB, HandlerFunc, Request, ResponseWriter, ServeMux, NewHandler() (+6 more)
|
||||
|
||||
### Community 13 - "IMAP Client"
|
||||
### Community 13 - "Client"
|
||||
Cohesion: 0.15
|
||||
Nodes (12): Client, FetchedMessage, FolderInfo, SelectedInfo, Dial(), Config, Conn, Duration (+4 more)
|
||||
|
||||
### Community 14 - "DKIM Key Signing"
|
||||
### Community 14 - "Sign"
|
||||
Cohesion: 0.14
|
||||
Nodes (20): KeyPair, ExtractSignatureInfo(), GenerateKeyPair(), PrivateKey, ParseDNSPublicKey(), ParsePrivateKey(), buildDKIMHeader(), canonicalizeBodyRelaxed() (+12 more)
|
||||
|
||||
### Community 15 - "Outbound Delivery Queue"
|
||||
Cohesion: 0.18
|
||||
Nodes (11): backoffDuration(), domainOf(), DB, Duration, isPermanentError(), lookupMXHosts(), NewWorker(), Deliverer (+3 more)
|
||||
### Community 15 - "Worker"
|
||||
Cohesion: 0.10
|
||||
Nodes (25): TLSARecord, Certificate, Context, Lookup(), VerifyPeerCertificate(), Discover(), Context, Duration (+17 more)
|
||||
|
||||
### Community 16 - "SMTP Server Networking"
|
||||
Cohesion: 0.19
|
||||
Nodes (14): connHost(), Addr, Config, Conn, Context, DB, Duration, Limiter (+6 more)
|
||||
### Community 16 - "session"
|
||||
Cohesion: 0.12
|
||||
Nodes (14): Scope, state, Authenticate(), checkAppPassword(), DB, Config, Conn, Context (+6 more)
|
||||
|
||||
### Community 17 - "Linked Account & Alias Queries"
|
||||
Cohesion: 0.14
|
||||
Nodes (11): Alias, AppPassword, CheckResult, LinkedAccount, LinkedAccountAuthType, MessageCheck, MFABackupCode, ReleaseToken (+3 more)
|
||||
### Community 17 - "models.go"
|
||||
Cohesion: 0.15
|
||||
Nodes (13): Addressbook, Alias, AppPassword, Calendar, Contact, LinkedAccountAuthType, MailboxEntry, MFABackupCode (+5 more)
|
||||
|
||||
### Community 18 - "TCP Server Lifecycle"
|
||||
### 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 (11): Server, connHost(), Addr, Config, Context, DB, Duration, Limiter (+3 more)
|
||||
Nodes (10): Context, Reader, Request, Time, NewAuthedRequest(), truncate(), Config, Token (+2 more)
|
||||
|
||||
### Community 19 - "Calendar/Contact/TLS Queries"
|
||||
Cohesion: 0.19
|
||||
Nodes (6): Addressbook, Calendar, OwnerType, Stats, TLSCert, uuidNew()
|
||||
|
||||
### Community 20 - "OAuth2 Config"
|
||||
Cohesion: 0.23
|
||||
Nodes (9): Context, Time, truncate(), WellKnownEndpoints(), XOAUTH2SASLString(), Config, Token, tokenResponse (+1 more)
|
||||
|
||||
### Community 21 - "Go-No-Deps Web App Pattern"
|
||||
### 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 Build Phases Overview"
|
||||
### 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 - "Quarantine & Message Queries"
|
||||
Cohesion: 0.15
|
||||
Nodes (5): Message, MessageVerdict, QuarantineEntry, QuarantineStatus, Time
|
||||
### Community 23 - "QuarantineEntry"
|
||||
Cohesion: 0.22
|
||||
Nodes (3): QuarantineEntry, QuarantineStatus, Time
|
||||
|
||||
### Community 24 - "iCal Parsing & Fuzzing"
|
||||
### Community 24 - "ical.go"
|
||||
Cohesion: 0.24
|
||||
Nodes (9): Event, escape(), FuzzParse(), F, Time, Parse(), splitProperty(), unescape() (+1 more)
|
||||
|
||||
### Community 25 - "LLM Spam Stage"
|
||||
### Community 25 - ".Run"
|
||||
Cohesion: 0.29
|
||||
Nodes (7): extractLeadingDigits(), Context, Duration, chatCompletionRequest, chatCompletionResponse, chatMessage, LLMStage
|
||||
|
||||
### Community 26 - "vCard Parsing & Fuzzing"
|
||||
### Community 26 - "vcard.go"
|
||||
Cohesion: 0.27
|
||||
Nodes (8): escape(), FuzzParse(), F, Parse(), splitProperty(), unescape(), unfold(), Card
|
||||
|
||||
### Community 27 - "Admin Portal Bugs & CRUD"
|
||||
### 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 - "Spam Pipeline Orchestrator"
|
||||
Cohesion: 0.40
|
||||
Nodes (8): DefaultStages(), Config, Context, NewOrchestrator(), StagesFromConfig(), verdictFor(), Orchestrator, Stage
|
||||
### Community 28 - "app.js"
|
||||
Cohesion: 0.10
|
||||
Nodes (56): accounts, acctQuery(), addPasskey(), api(), b64urlToBuf(), bodyOf(), boot(), bufToB64url() (+48 more)
|
||||
|
||||
### Community 29 - "SPF Stage"
|
||||
Cohesion: 0.40
|
||||
Nodes (7): checkSPF(), evaluateSPF(), Context, IP, matchCIDR(), spfOutcome, SPFStage
|
||||
### Community 29 - "Server"
|
||||
Cohesion: 0.18
|
||||
Nodes (11): Server, connHost(), Addr, Config, Context, DB, Duration, Limiter (+3 more)
|
||||
|
||||
### Community 30 - "TCP Boundary & Rate-Limit Findings"
|
||||
### 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 - "Rspamd Stage"
|
||||
Cohesion: 0.36
|
||||
Nodes (5): Context, Duration, rspamdResponse, RspamdStage, rspamdSymbol
|
||||
### Community 32 - "checkSPF"
|
||||
Cohesion: 0.40
|
||||
Nodes (7): checkSPF(), evaluateSPF(), Context, IP, matchCIDR(), spfOutcome, SPFStage
|
||||
|
||||
### Community 33 - "Per-IP Rate Limiter"
|
||||
### Community 33 - "Limiter"
|
||||
Cohesion: 0.33
|
||||
Nodes (5): Mutex, Limiter, Time, New(), bucket
|
||||
|
||||
### Community 34 - "ClamAV Stage"
|
||||
### 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 35 - "DMARC Stage"
|
||||
Cohesion: 0.39
|
||||
Nodes (5): dmarcTag(), extractDomainFromHeader(), Context, orgDomain(), DMARCStage
|
||||
### Community 36 - ".Run"
|
||||
Cohesion: 0.22
|
||||
Nodes (7): dmarcTag(), extractDomainFromHeader(), Context, orgDomain(), Context, DMARCStage, HeaderStage
|
||||
|
||||
### Community 36 - "Spam Header Injection Stage"
|
||||
Cohesion: 0.33
|
||||
Nodes (4): Context, injectSpamHeaders(), HeaderStage, StageResult
|
||||
|
||||
### Community 37 - "Iterative Build Discipline Skill"
|
||||
### 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 - "Deployment & DNS Setup"
|
||||
### 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 - "HTTP Middleware"
|
||||
Cohesion: 0.33
|
||||
Nodes (4): Handler, clientIP(), Limiter, Request
|
||||
### Community 39 - "GraphAPIProvider"
|
||||
Cohesion: 0.17
|
||||
Nodes (14): GraphAPIProvider, graphDateTimeTZ, graphFolder, graphMessage, graphRecipient, Config, Contact, Context (+6 more)
|
||||
|
||||
### Community 40 - "URL Extraction Stage"
|
||||
### Community 40 - ".Run"
|
||||
Cohesion: 0.47
|
||||
Nodes (3): dedupe(), Context, URLStage
|
||||
|
||||
### Community 41 - "SQLite Deadlock Findings"
|
||||
### 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 - "Mail Context Domain Helpers"
|
||||
Cohesion: 0.50
|
||||
Nodes (3): domainOf(), IP, MailContext
|
||||
### Community 44 - "MailContext"
|
||||
Cohesion: 0.31
|
||||
Nodes (5): Message, MessageVerdict, domainOf(), IP, MailContext
|
||||
|
||||
### Community 47 - "Shared api() Fetch Convention"
|
||||
### 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
|
||||
@@ -282,9 +309,9 @@ Nodes (3): Shared api() Fetch Helper Convention, api() fetch helper (admin), api
|
||||
.claude/go-web-app-no-deps-SKILL.md · relation: conceptually_related_to
|
||||
|
||||
## Knowledge Gaps
|
||||
- **23 isolated node(s):** `webmail`, `IMAPCredential`, `DB`, `migration`, `response` (+18 more)
|
||||
- **33 isolated node(s):** `gomail`, `Contact`, `CalendarProvider`, `ContactProvider`, `gmailLabel` (+28 more)
|
||||
These have ≤1 connection - possible missing edges or undocumented components.
|
||||
- **16 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
|
||||
- **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:_
|
||||
@@ -297,9 +324,9 @@ _Questions this graph is uniquely positioned to answer:_
|
||||
_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 `TOTP & Web Token Auth` to `CalDAV/CardDAV Handlers`, `IMAP Command Parser`, `Mail Provider Abstraction`, `DB Mutation Queries`, `IMAP Server Loop`, `POP3 Server Loop`, `JMAP Auth & Sessions`, `SMTP Session Header Parsing`, `Admin API Handlers`, `Linked Account & Alias Queries`?**
|
||||
_High betweenness centrality (0.323) - this node is a cross-community bridge._
|
||||
- **Why does `Store` connect `CalDAV/CardDAV Handlers` to `TOTP & Web Token Auth`, `Mail Provider Abstraction`, `POP3 Server Loop`, `JMAP Auth & Sessions`, `Outbound Delivery Queue`, `SMTP Server Networking`, `TCP Server Lifecycle`?**
|
||||
_High betweenness centrality (0.109) - this node is a cross-community bridge._
|
||||
- **Why does `DB` connect `DB Mutation Queries` to `IMAP Command Parser`, `List Rule Queries`, `Sieve Script Queries`, `Calendar Object Queries`, `Contact Queries`, `Linked Account & Alias Queries`, `Calendar/Contact/TLS Queries`, `Quarantine & Message Queries`, `Domain/Tenant Queries`?**
|
||||
_High betweenness centrality (0.098) - this node is a cross-community bridge._
|
||||
- **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.104) - 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._
|
||||
graphify-out/cache/ast/v0.9.37/01cd9aa394dd401d0cb01c0ce6e81b7f32b409619d4933f7c0bef543a6925286.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/06757d9608c63ff4df0a478af7e05250a0b2b53621fbddddcf31a33e299cc634.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/09d74b7cb3808c9f909544b25a336fbe4f8c214e5623f222be6efac3034c4aa0.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/0c0d7de992f7b288c3e0bdcb28db4fff790563958a89b9388a7f322e3fa61758.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/0ebbb552529679ab009c0e0535872914cabc8738e2e2be5091663205537bc736.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/176b0aec8d85d28e991e20dcc89034f75764ffb8ce7121860dabf840119e36b9.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/18afbd3c5ddd66a9af98072d911048514d50a0dcdcdfe74f015567748f0240c0.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/1ba8a5315f9ace3bf5f36c10b21f75b70fb0d9866edcb646210a2c3d43f0a883.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/1d14a5637bc153c73c2542c5a20a1d609d432ab1a02b1180b5de479e3e75dcb4.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/1ff700a996535cbccf2ca4f39302bb54baa00db7fa58f01c30439fd01f8fe237.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/20545edc9168ac23efcda26fea9b777c0f3ad3b454c5e7411ca71a5ecc974937.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/2611091ae0acfb2e6dff5ba6edbb2b1b8611df757f787d6f77e584dac278c82e.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/2a4c4e13f473717cd36e3cfb88ecddfdf9f4ddc8d8b35f6f0de99b8f5362d9a9.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/400f963d914038abfd96952505fc94b3ea818f31a0994dcedb8e3a5d545b9679.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/40b53f58daf0fe7dcb02182693089493dc22b1f4560eddb088b8d79279e6a3fc.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/431484d73b1c7c3a4356593246d04668d2cc6bb2e2b14aa5404e36ce519b2374.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/48855b71a58f4eb81b43cd1edc8c3f1fb3d03125b82bb3b79ac4185ca3eec009.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/48fe453328d90095f930d257a1ca31e4521724926f3f123017f5574bb94a1eb0.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/4d51257324203a16b2c169ca735ec5657527ab763715095af09117bb52210dfd.json
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "$graphify-root$_internal_webmail_embed_go", "label": "embed.go", "file_type": "code", "source_file": "internal/webmail/embed.go", "source_location": "L1"}], "edges": [{"source": "$graphify-root$_internal_webmail_embed_go", "target": "go_pkg_embed", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "internal/webmail/embed.go", "source_location": "L3", "weight": 1.0, "context": "import"}], "raw_calls": []}
|
||||
graphify-out/cache/ast/v0.9.37/5f8d6cbd5032e092d50cf781b1a6c3fe8070df5662fda352dcdd0d1ca43268bb.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/6362e67230fb5fcfe68ca8aa7495ef9e7cb1989eb66f52ac90aed41138c10b7a.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/802a1586425dfbf4276a3bf5b35fa78fd9c8ff8dd0d519e4668c4c292dd81493.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/80fdd3d51caa00e9e565abd12c564e91dea4d90edf52e9cf5776fa281c5a8203.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/873991dec46b949403f9a33f9ae954a7069b7571e729bad0b7b2a36fc59df477.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/8a33cefa876cc28da6dedfbbb05a0fe82822d205b034b6e3835ea829bb4265e5.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/8de58371d6001b766609750d1baffbd1fc03eb6703edb6b559431678d10886a1.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/93356da52f141779fd2f06c04f6e58f59b558394d546f77e9ae4667692939e35.json
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "$graphify-root$_internal_db_migrations_go", "label": "migrations.go", "file_type": "code", "source_file": "internal/db/migrations.go", "source_location": "L1"}, {"id": "db_migration", "label": "migration", "file_type": "code", "source_file": "internal/db/migrations.go", "source_location": "L7"}], "edges": [{"source": "$graphify-root$_internal_db_migrations_go", "target": "db_migration", "relation": "contains", "confidence": "EXTRACTED", "source_file": "internal/db/migrations.go", "source_location": "L7", "weight": 1.0}], "raw_calls": []}
|
||||
graphify-out/cache/ast/v0.9.37/9575211ec503f514a1383376148f198fb41eac07fcff9a02490a5ebed9b26ca0.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/97f3db35e19c9bcf9601aa1c041835c2b3586f384f75a052cdcae1ff1f94ca49.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/9b7c6b4db73b526b27f3e51ff16f1fb9228974bfd0f0390b17e847c8f01d5ac3.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/9fc210601dbcf5bc577fd9660b06a2d0e1fe167ee36b7d02e3f82ff2d81ffd77.json
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "pkg_gomail", "label": "gomail", "file_type": "code", "type": "package", "ecosystem": "go", "source_file": "go.mod", "source_location": "L1"}], "edges": [{"source": "pkg_gomail", "target": "pkg_github_com_google_uuid", "relation": "depends_on", "context": "dependency", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "go.mod", "source_location": "L1", "weight": 1.0}, {"source": "pkg_gomail", "target": "pkg_github_com_mattn_go_sqlite3", "relation": "depends_on", "context": "dependency", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "go.mod", "source_location": "L1", "weight": 1.0}, {"source": "pkg_gomail", "target": "pkg_golang_org_x_crypto", "relation": "depends_on", "context": "dependency", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "go.mod", "source_location": "L1", "weight": 1.0}, {"source": "pkg_gomail", "target": "pkg_gopkg_in_yaml_v3", "relation": "depends_on", "context": "dependency", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "go.mod", "source_location": "L1", "weight": 1.0}]}
|
||||
graphify-out/cache/ast/v0.9.37/b283e117ff2c30abfaf0a84b2758dfeb3435d3173c75f1e2a6c71ab7ed5d66ce.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/b39028991019a4dfe1daad2ecefb9c6f86c8f5ef47d9800f062222db80f4f17a.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/b66d5956eac9e579f12eae9655e68ac3a2c50c3596d37342f49470d344b14ba8.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/b98c0c44afd27f47562c3da9cb76e58c4193d519ee9862d3ae1816f95feaa41f.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/c25c438d3bf155368898c7f70410f9e975757eed01f159f1d32d5daa9c839130.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/c7cad25d1890df4b9cac5620a0f1a95768ef8553a7427170aec05cbb09a22869.json
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "$graphify-root$_internal_db_migrations_go", "label": "migrations.go", "file_type": "code", "source_file": "internal/db/migrations.go", "source_location": "L1"}, {"id": "db_migration", "label": "migration", "file_type": "code", "source_file": "internal/db/migrations.go", "source_location": "L7"}], "edges": [{"source": "$graphify-root$_internal_db_migrations_go", "target": "db_migration", "relation": "contains", "confidence": "EXTRACTED", "source_file": "internal/db/migrations.go", "source_location": "L7", "weight": 1.0}], "raw_calls": []}
|
||||
graphify-out/cache/ast/v0.9.37/c81b85d428efba39e2e23373b8a3804a9a561c1ff244d01f76fb8422f32e77d2.json
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "pkg_gomail", "label": "gomail", "file_type": "code", "type": "package", "ecosystem": "go", "source_file": "go.mod", "source_location": "L1"}], "edges": [{"source": "pkg_gomail", "target": "pkg_github_com_google_uuid", "relation": "depends_on", "context": "dependency", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "go.mod", "source_location": "L1", "weight": 1.0}, {"source": "pkg_gomail", "target": "pkg_github_com_mattn_go_sqlite3", "relation": "depends_on", "context": "dependency", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "go.mod", "source_location": "L1", "weight": 1.0}, {"source": "pkg_gomail", "target": "pkg_github_com_miekg_dns", "relation": "depends_on", "context": "dependency", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "go.mod", "source_location": "L1", "weight": 1.0}, {"source": "pkg_gomail", "target": "pkg_golang_org_x_crypto", "relation": "depends_on", "context": "dependency", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "go.mod", "source_location": "L1", "weight": 1.0}, {"source": "pkg_gomail", "target": "pkg_gopkg_in_yaml_v3", "relation": "depends_on", "context": "dependency", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "go.mod", "source_location": "L1", "weight": 1.0}, {"source": "pkg_gomail", "target": "pkg_golang_org_x_mod", "relation": "depends_on", "context": "dependency", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "go.mod", "source_location": "L1", "weight": 1.0}, {"source": "pkg_gomail", "target": "pkg_golang_org_x_net", "relation": "depends_on", "context": "dependency", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "go.mod", "source_location": "L1", "weight": 1.0}, {"source": "pkg_gomail", "target": "pkg_golang_org_x_sync", "relation": "depends_on", "context": "dependency", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "go.mod", "source_location": "L1", "weight": 1.0}, {"source": "pkg_gomail", "target": "pkg_golang_org_x_sys", "relation": "depends_on", "context": "dependency", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "go.mod", "source_location": "L1", "weight": 1.0}, {"source": "pkg_gomail", "target": "pkg_golang_org_x_tools", "relation": "depends_on", "context": "dependency", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "go.mod", "source_location": "L1", "weight": 1.0}]}
|
||||
graphify-out/cache/ast/v0.9.37/ca29268c40cc5f65dbf45c8921364aa79bb5885caa7174dea556aedc90b8cd1a.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/cccdb86b85f35a922501056e6b223f359a9144dcb687c08ec9858b9b1250291a.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/cd56653b49713dec41e9d520421c67fd34885d76b5764d42936fc5085b732ab2.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/cfd994041d22932995ec2e05d09d3df3ac1721ee3373fa4a99553081d7b8ea33.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/d016244ae9165febb2d63142bbd216d99ecc42d639945a92dad23618d7070f56.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/d8927666f957c2535c17bd74b7e1215da12c0e2b3c518b4463584289466be595.json
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "$graphify-root$_internal_ratelimit_http_go", "label": "http.go", "file_type": "code", "source_file": "internal/ratelimit/http.go", "source_location": "L1"}, {"id": "ratelimit_limiter", "label": "Limiter", "file_type": "code", "source_file": "internal/ratelimit/http.go", "source_location": "L14"}, {"id": "ratelimit_limiter_httpmiddleware", "label": ".HTTPMiddleware()", "file_type": "code", "source_file": "internal/ratelimit/http.go", "source_location": "L14"}, {"id": "handler", "label": "Handler", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/internal/ratelimit/http.go"}, {"id": "$graphify-root$_internal_ratelimit_http_clientip", "label": "ClientIP()", "file_type": "code", "source_file": "internal/ratelimit/http.go", "source_location": "L30"}, {"id": "request", "label": "Request", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "$graphify-root$/internal/ratelimit/http.go"}], "edges": [{"source": "$graphify-root$_internal_ratelimit_http_go", "target": "go_pkg_net", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "internal/ratelimit/http.go", "source_location": "L4", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_internal_ratelimit_http_go", "target": "go_pkg_net_http", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "internal/ratelimit/http.go", "source_location": "L5", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_internal_ratelimit_http_go", "target": "go_pkg_strings", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "internal/ratelimit/http.go", "source_location": "L6", "weight": 1.0, "context": "import"}, {"source": "ratelimit_limiter", "target": "ratelimit_limiter_httpmiddleware", "relation": "method", "confidence": "EXTRACTED", "source_file": "internal/ratelimit/http.go", "source_location": "L14", "weight": 1.0}, {"source": "ratelimit_limiter_httpmiddleware", "target": "handler", "relation": "references", "confidence": "EXTRACTED", "source_file": "internal/ratelimit/http.go", "source_location": "L14", "weight": 1.0, "context": "parameter_type"}, {"source": "ratelimit_limiter_httpmiddleware", "target": "handler", "relation": "references", "confidence": "EXTRACTED", "source_file": "internal/ratelimit/http.go", "source_location": "L14", "weight": 1.0, "context": "return_type"}, {"source": "$graphify-root$_internal_ratelimit_http_go", "target": "$graphify-root$_internal_ratelimit_http_clientip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "internal/ratelimit/http.go", "source_location": "L30", "weight": 1.0}, {"source": "$graphify-root$_internal_ratelimit_http_clientip", "target": "request", "relation": "references", "confidence": "EXTRACTED", "source_file": "internal/ratelimit/http.go", "source_location": "L30", "weight": 1.0, "context": "parameter_type"}, {"source": "ratelimit_limiter_httpmiddleware", "target": "$graphify-root$_internal_ratelimit_http_clientip", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "internal/ratelimit/http.go", "source_location": "L16", "weight": 1.0}], "raw_calls": [{"caller_nid": "ratelimit_limiter_httpmiddleware", "callee": "HandlerFunc", "is_member_call": false, "language": "go", "source_file": "internal/ratelimit/http.go", "source_location": "L15"}, {"caller_nid": "ratelimit_limiter_httpmiddleware", "callee": "Allow", "is_member_call": true, "language": "go", "source_file": "internal/ratelimit/http.go", "source_location": "L17"}, {"caller_nid": "ratelimit_limiter_httpmiddleware", "callee": "Header", "is_member_call": true, "language": "go", "source_file": "internal/ratelimit/http.go", "source_location": "L18"}, {"caller_nid": "ratelimit_limiter_httpmiddleware", "callee": "ServeHTTP", "is_member_call": true, "language": "go", "source_file": "internal/ratelimit/http.go", "source_location": "L22"}, {"caller_nid": "$graphify-root$_internal_ratelimit_http_clientip", "callee": "Get", "is_member_call": true, "language": "go", "source_file": "internal/ratelimit/http.go", "source_location": "L32"}, {"caller_nid": "$graphify-root$_internal_ratelimit_http_clientip", "callee": "Split", "is_member_call": false, "language": "go", "source_file": "internal/ratelimit/http.go", "source_location": "L33"}, {"caller_nid": "$graphify-root$_internal_ratelimit_http_clientip", "callee": "TrimSpace", "is_member_call": false, "language": "go", "source_file": "internal/ratelimit/http.go", "source_location": "L34"}, {"caller_nid": "$graphify-root$_internal_ratelimit_http_clientip", "callee": "SplitHostPort", "is_member_call": false, "language": "go", "source_file": "internal/ratelimit/http.go", "source_location": "L37"}]}
|
||||
graphify-out/cache/ast/v0.9.37/d9555c876205fef227d3d7f19ab811333cdbbcb16f59f1f75a8089d063fd63b7.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/d9d9ff100e0f84f784c1715ccf7da38e1b06d6a73e67dc9066bfc9a4219f4a65.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/db0a8a9c1bcf894c5c6f18fc931e5308c74a43e38336b7c686b2eb157c2d1b93.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/ddc706c46bd8bcf6437fa62f76613325d8d696f73ceba933441e0f1ed68cfc5b.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/e84d5b5a257d77353bb2a3fa5ce3b5833d0803895c33356adcc9b6e9ef23c7e4.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/eb93e0278e15b026ffcab122588b7443695857c69fa8978aee2545fb0fb95163.json
Vendored
+1
File diff suppressed because one or more lines are too long
graphify-out/cache/ast/v0.9.37/f77ff7308cb2fed7d87d9930ff5cd187c180a8776e26329da5e7e7eb818e7b82.json
Vendored
+1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
@@ -1 +1 @@
|
||||
1786283404.4033368
|
||||
1786338980.5170527
|
||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+12425
-2829
File diff suppressed because it is too large
Load Diff
+117
-77
@@ -1,43 +1,43 @@
|
||||
{
|
||||
".claude/settings.json": {
|
||||
"mtime": 1786281487.088728,
|
||||
"ast_hash": "22d1c817e36c7eccf36bf30ee13299cc",
|
||||
"semantic_hash": "22d1c817e36c7eccf36bf30ee13299cc"
|
||||
"ast_hash": "",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"cmd/gomail/main.go": {
|
||||
"mtime": 1786281911.6889164,
|
||||
"ast_hash": "6a50dc1a9b0161c4c030b51307ff92cf",
|
||||
"semantic_hash": "6a50dc1a9b0161c4c030b51307ff92cf"
|
||||
"mtime": 1786303371.9406705,
|
||||
"ast_hash": "32c3d08429cc99b216f59edf3e0e4caa",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"go.mod": {
|
||||
"mtime": 1786281935.7638168,
|
||||
"ast_hash": "38e6ab128168a0a88095fec4523f2992",
|
||||
"semantic_hash": "38e6ab128168a0a88095fec4523f2992"
|
||||
"mtime": 1786304427.3009958,
|
||||
"ast_hash": "4bbf418e44c141deba9e99f9d780ed9b",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/accounts/link.go": {
|
||||
"mtime": 1786281887.2038412,
|
||||
"ast_hash": "4ffb8f5d3a6ac987d960c702f00f4e07",
|
||||
"semantic_hash": "4ffb8f5d3a6ac987d960c702f00f4e07"
|
||||
"mtime": 1786299069.1242821,
|
||||
"ast_hash": "5eed8ecb5be6a1c35c6591dedad976d1",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/accounts/provider.go": {
|
||||
"mtime": 1786168320.0,
|
||||
"ast_hash": "4a180151e798601f43bda25bd1a80410",
|
||||
"semantic_hash": "4a180151e798601f43bda25bd1a80410"
|
||||
"mtime": 1786303040.5896587,
|
||||
"ast_hash": "7b4ccfea1a6fbad3e8b519a295cb520b",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/accounts/provider_gomail.go": {
|
||||
"mtime": 1786281891.3509514,
|
||||
"ast_hash": "f0dd245cb144dca3f03520e632c1d5f5",
|
||||
"semantic_hash": "f0dd245cb144dca3f03520e632c1d5f5"
|
||||
"mtime": 1786297740.5829873,
|
||||
"ast_hash": "ac0d507cba9953d85a44ce0506217587",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/accounts/provider_imap.go": {
|
||||
"mtime": 1786281893.9837677,
|
||||
"ast_hash": "99587258525acd5ab4b20398a2d0d400",
|
||||
"semantic_hash": "99587258525acd5ab4b20398a2d0d400"
|
||||
"mtime": 1786298998.877657,
|
||||
"ast_hash": "4825cd303e132e3179500afe0e9098bd",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/accounts/provider_smtp_helper.go": {
|
||||
"mtime": 1786281896.5890837,
|
||||
"ast_hash": "188d01aeb8fe3fb73cb76a25ffda71b4",
|
||||
"semantic_hash": "188d01aeb8fe3fb73cb76a25ffda71b4"
|
||||
"mtime": 1786289886.1606128,
|
||||
"ast_hash": "4fec96778cdaa94b1ab2264236af8b48",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/acme/challenge.go": {
|
||||
"mtime": 1786189310.0,
|
||||
@@ -80,14 +80,14 @@
|
||||
"semantic_hash": "c74ed7b257b2272dcfb860b8a60746a0"
|
||||
},
|
||||
"internal/config/config.go": {
|
||||
"mtime": 1786189702.0,
|
||||
"ast_hash": "12cee16f6dcfa6971217dd104e86f4d6",
|
||||
"semantic_hash": "12cee16f6dcfa6971217dd104e86f4d6"
|
||||
"mtime": 1786289818.8781466,
|
||||
"ast_hash": "68fd6f093c4ba00106bdbbe59786a269",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/crypto/crypto.go": {
|
||||
"mtime": 1784360971.0,
|
||||
"ast_hash": "4567100200969235fd1559ad9be6f1b1",
|
||||
"semantic_hash": "4567100200969235fd1559ad9be6f1b1"
|
||||
"mtime": 1786297602.7221303,
|
||||
"ast_hash": "8de4f9714d1c3e73a4322080d6b1a2ca",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/dav/dav.go": {
|
||||
"mtime": 1786281900.5555487,
|
||||
@@ -100,24 +100,24 @@
|
||||
"semantic_hash": "922a08de72be0ef63409ed402d01e098"
|
||||
},
|
||||
"internal/db/db.go": {
|
||||
"mtime": 1784361005.0,
|
||||
"ast_hash": "64d527aad454dab7867ffd51aa3d72ca",
|
||||
"semantic_hash": "64d527aad454dab7867ffd51aa3d72ca"
|
||||
"mtime": 1786297548.1684437,
|
||||
"ast_hash": "aed0290af4025c8c84089356f8746f08",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/db/migrations.go": {
|
||||
"mtime": 1786193366.0,
|
||||
"ast_hash": "d67ddd29ab706ae5ce670da624e30b2c",
|
||||
"semantic_hash": "d67ddd29ab706ae5ce670da624e30b2c"
|
||||
"mtime": 1786300065.1340663,
|
||||
"ast_hash": "2eb17b13bdc6bd5a954c82b4503aa8f9",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/db/models.go": {
|
||||
"mtime": 1786193384.0,
|
||||
"ast_hash": "cf35e391db47a84bd0b4e05ba77b9a95",
|
||||
"semantic_hash": "cf35e391db47a84bd0b4e05ba77b9a95"
|
||||
"mtime": 1786300091.6301413,
|
||||
"ast_hash": "12f132efac1ac74ab13ce8bfce0bfc69",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/db/queries.go": {
|
||||
"mtime": 1786193758.0,
|
||||
"ast_hash": "c5f7a40030988031163220e54051b93d",
|
||||
"semantic_hash": "c5f7a40030988031163220e54051b93d"
|
||||
"mtime": 1786301261.1620972,
|
||||
"ast_hash": "684ba8ac79df6845b0f0571ee6ff67a3",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/dkim/keys.go": {
|
||||
"mtime": 1785566243.0,
|
||||
@@ -145,9 +145,9 @@
|
||||
"semantic_hash": "5518fd86059d729048685e2bc39c24b2"
|
||||
},
|
||||
"internal/imap/commands.go": {
|
||||
"mtime": 1786281888.6448092,
|
||||
"ast_hash": "e0a26bce9488a5d0bc680d5b11d15610",
|
||||
"semantic_hash": "e0a26bce9488a5d0bc680d5b11d15610"
|
||||
"mtime": 1786294683.3800013,
|
||||
"ast_hash": "584a4c4fa7ad664aaec36bc404825512",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/imap/parser.go": {
|
||||
"mtime": 1785638411.0,
|
||||
@@ -155,9 +155,9 @@
|
||||
"semantic_hash": "687b7788b077688b9081f958b669a0e6"
|
||||
},
|
||||
"internal/imap/server.go": {
|
||||
"mtime": 1786281911.0781865,
|
||||
"ast_hash": "13154da7fca4635077e377476aef64c8",
|
||||
"semantic_hash": "13154da7fca4635077e377476aef64c8"
|
||||
"mtime": 1786289824.8942587,
|
||||
"ast_hash": "50a8a0f58edd9d9bb6cafa385f3c97b2",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/imap/session.go": {
|
||||
"mtime": 1786281910.5246246,
|
||||
@@ -180,9 +180,9 @@
|
||||
"semantic_hash": "2484a0bccd56908627cee4c769b689e5"
|
||||
},
|
||||
"internal/mailstore/maildir.go": {
|
||||
"mtime": 1786281898.3165317,
|
||||
"ast_hash": "7224a5c029cdcdc63c0de93cb8a8eb51",
|
||||
"semantic_hash": "7224a5c029cdcdc63c0de93cb8a8eb51"
|
||||
"mtime": 1786297713.2183998,
|
||||
"ast_hash": "ca8749979e4a1ca9ada23c072945189c",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/managesieve/server.go": {
|
||||
"mtime": 1786281899.3706038,
|
||||
@@ -195,9 +195,9 @@
|
||||
"semantic_hash": "ab69e22b6add70fdb6c18f056c474e8d"
|
||||
},
|
||||
"internal/oauth2/oauth2.go": {
|
||||
"mtime": 1786169607.0,
|
||||
"ast_hash": "5ab8fd85a331f7f82470ee354e309ec4",
|
||||
"semantic_hash": "5ab8fd85a331f7f82470ee354e309ec4"
|
||||
"mtime": 1786298531.0961437,
|
||||
"ast_hash": "4e1c7abbe92feb151acecfec03229c50",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/pipeline/pipeline.go": {
|
||||
"mtime": 1786281906.8561504,
|
||||
@@ -215,9 +215,9 @@
|
||||
"semantic_hash": "3f92da867d5b128398a8ffc70b6fa475"
|
||||
},
|
||||
"internal/pipeline/stage_dmarc.go": {
|
||||
"mtime": 1786281917.6531692,
|
||||
"ast_hash": "2d73846ca47178c53a0ffb341b7d754e",
|
||||
"semantic_hash": "2d73846ca47178c53a0ffb341b7d754e"
|
||||
"mtime": 1786294688.9970334,
|
||||
"ast_hash": "fc9ece401684fb950771b70db7a54d9d",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/pipeline/stage_headers.go": {
|
||||
"mtime": 1786281909.176789,
|
||||
@@ -245,19 +245,19 @@
|
||||
"semantic_hash": "f954d508ac085f560928c06171779db5"
|
||||
},
|
||||
"internal/pop3/pop3.go": {
|
||||
"mtime": 1786281909.7660527,
|
||||
"ast_hash": "0e3685f20c9ca05d3a28729c8ad7a29f",
|
||||
"semantic_hash": "0e3685f20c9ca05d3a28729c8ad7a29f"
|
||||
"mtime": 1786289853.1900737,
|
||||
"ast_hash": "e4756d72c5bc2bd89fd41a2205ca3d14",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/queue/queue.go": {
|
||||
"mtime": 1786281808.0265675,
|
||||
"ast_hash": "71c0ce0211d61d37f51f19678dbcdeb4",
|
||||
"semantic_hash": "71c0ce0211d61d37f51f19678dbcdeb4"
|
||||
"mtime": 1786300256.943359,
|
||||
"ast_hash": "5e9631b0601474ed28f3626a293e8e08",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/ratelimit/http.go": {
|
||||
"mtime": 1786207203.0,
|
||||
"ast_hash": "c06b19193ad3c3159551966c05f48ea5",
|
||||
"semantic_hash": "c06b19193ad3c3159551966c05f48ea5"
|
||||
"mtime": 1786289690.9789355,
|
||||
"ast_hash": "039681ec4aef1340ab4ba8bf83baa679",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/ratelimit/ratelimit.go": {
|
||||
"mtime": 1786207185.0,
|
||||
@@ -325,19 +325,19 @@
|
||||
"semantic_hash": "5aeab637a3c3357bb2c13cacc21508c6"
|
||||
},
|
||||
"internal/webmail/api.go": {
|
||||
"mtime": 1786281903.8315737,
|
||||
"ast_hash": "3ccccaaef2a926a90919805f67173db2",
|
||||
"semantic_hash": "3ccccaaef2a926a90919805f67173db2"
|
||||
"mtime": 1786339172.9744284,
|
||||
"ast_hash": "fcc1ddeb2d5f749bee23623529d76b73",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/webmail/embed.go": {
|
||||
"mtime": 1786132251.0,
|
||||
"ast_hash": "441b827ff1643c3807b6efb92119a721",
|
||||
"semantic_hash": "441b827ff1643c3807b6efb92119a721"
|
||||
"mtime": 1786295803.857812,
|
||||
"ast_hash": "78663d0210a610d1777c4b4151390cf1",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/webtoken/webtoken.go": {
|
||||
"mtime": 1786193462.0,
|
||||
"ast_hash": "d94a2b905b20ccbd8a83e258245ba375",
|
||||
"semantic_hash": "d94a2b905b20ccbd8a83e258245ba375"
|
||||
"mtime": 1786289648.699828,
|
||||
"ast_hash": "b9be7cc5ea74ce6b82de79ef3644cb52",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
".claude/go-web-app-no-deps-SKILL.md": {
|
||||
"mtime": 1786206554.0,
|
||||
@@ -385,8 +385,48 @@
|
||||
"semantic_hash": "77b0b0e42cf45a961571ee5e3a3a219a"
|
||||
},
|
||||
"internal/webmail/static/index.html": {
|
||||
"mtime": 1786132285.0,
|
||||
"ast_hash": "3b77272b21933601eed33f3441d386cc",
|
||||
"semantic_hash": "3b77272b21933601eed33f3441d386cc"
|
||||
"mtime": 1786302422.3206468,
|
||||
"ast_hash": "240f0802126ee6142b639b0c3d1fd749",
|
||||
"semantic_hash": ""
|
||||
},
|
||||
"internal/webmail/static/app.js": {
|
||||
"mtime": 1786338964.959641,
|
||||
"ast_hash": "7905c891f2865aa88d99774efbad8c1d",
|
||||
"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": ""
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user