Roadmap: making dit the best form-detection and classification tool
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 8/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Da chiarire
- Stato di attività
- Attiva
- Stack tecnologico
- go
- Ambito
- cli, machine-learning, security
Direzione di ricerca
This is a multi-phase roadmap, not a single task, so do not start here. Read the Phases checklist and the linked child issues (#3, #4, #5 for CLI work; #10, #11, #13 for detections), then pick one concrete child issue. Relevant code lives in crf/, classifier/ and captcha/. Done means that child issue's acceptance criteria are met, not this roadmap's checkboxes.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Where we are
dît is a Go library + CLI that classifies page types (login, error, landing, ...), form types (login, registration, search, password recovery, contact, order, ...) and individual field types (username, password, email, ...) with an in-repo CRF implementation (crf/: forward-backward, Viterbi, trainer) and linear classifiers (classifier/), with zero external ML dependencies. It ships train/evaluate/cross-validation tooling, a dit-collect data collector, a pretrained model auto-downloaded from Hugging Face (~93 MB), and an early captcha/ package. Honest caveats: the model is large for a CLI tool, there's no published accuracy comparison against prior art, CLI ergonomics are still minimal (no stdin, no batch, single output format), and three open PRs (#75, #76, #77) literally titled "PR title" need triage.
Landscape
| Project | Strengths | Link |
|---|---|---|
| Formasaurus | The direct prior art: Python form/field classifier (LogReg form types + CRF field types), trained on 1000+ annotated forms — but Python-only, heavy sklearn/sklearn-crfsuite deps, and effectively dormant | https://github.com/scrapinghub/Formasaurus |
| urlscan.io | Renders pages in a real browser, records DOM/network/screenshot, community verdicts — but SaaS, no structural form/field classification, rate-limited API | https://urlscan.io |
| PhishTank | Crowd-sourced phishing URL feed — reactive blocklist, zero structural analysis of unseen pages | https://phishtank.org |
| Playwright/headless scrapers | Can find forms on JS-rendered pages, but classify nothing; users hand-roll selectors | https://playwright.dev |
Formasaurus proved the approach (docs, PyPI) and then stalled. Nobody offers a single-binary, dependency-free form/field/page classifier usable in security pipelines — that is exactly dît's lane.
What "best" means
- Beat the prior art, provably: publish cross-validated accuracy vs Formasaurus on a shared/annotated corpus (target: ≥ its reported form-type accuracy, with per-class F1 in the README).
- Pipeline-native:
cat page.html | dit run -anddit run -l urls.txt --jsonwork, so dît composes with httpx/katana/nuclei-style toolchains (#3, #4, #5). - Fast and self-contained: classify a page in <100 ms on commodity hardware after one-time model download, with no Python, no network.
- Detections nobody else does structurally: honeypot fields (#10), CAPTCHA presence/type (#11), and phishing-form signals (#13) as first-class outputs, benchmarked against labeled sets rather than blocklists.
- Model you can retrain in an afternoon: documented
dit trainpath with custom labels (#9) and a model ≤ 25 MB (quantized/pruned) as the default download.
Phases
Phase 1 — CLI & pipeline ergonomics
- Read HTML from stdin (#3)
- Batch mode for multiple URLs (#4)
- Multiple output formats: table, csv, json (#5)
- pre-commit config (#26) and triage/rename placeholder PRs #75, #76, #77
Phase 2 — Security detections (the differentiator)
- Honeypot field detection (#10)
- CAPTCHA detection (#11) — build on the existing
captcha/package - Phishing form detection (#13)
- Form change monitoring (#12) — turns dît from a classifier into a monitoring primitive
Phase 3 — Reach & model quality
- Server mode with HTTP API (#6)
- JavaScript rendering for SPA forms (#7)
- Multi-language form support (#8) — Formasaurus is English-biased; this is an open gap
- Custom label support for training (#9)
- Published benchmark vs Formasaurus + model-size reduction (claims 1 and 5)
Open questions
- Can the 93 MB model.json be quantized/pruned (or split per-task: page/form/field) without losing accuracy, so
go installusers aren't surprised by the download? - What is the licensing/provenance story for the Hugging Face training data — can we accept community-contributed annotations?
- Should JS rendering (#7) live in core (chromedp dependency) or as a separate
dit-rendercompanion to keep the zero-dep promise?
🤖 Filed by Claude Code
Generated by Claude Code
- Lingua principale
- Go
- Stelle
- 19
- Fork
- 4
- Merge medio
- 15m
- PR unite (30g)
- 2
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di HappyHackingSpace/dit
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
HappyHackingSpace/dit#85 ·
I maintainer di solito rispondono entro 1 giorno
-
Support reading HTML from stdinForse già presa @dogancanbakir l’ha presa 5 giorni fa. Apertaenhancement good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
HappyHackingSpace/dit#3 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 48/100
HappyHackingSpace/dit#84 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 58/100
HappyHackingSpace/dit#83 ·
I maintainer di solito rispondono entro 1 giorno
-
feat: `dit model pull` — first-class model managementForse già presa @dogancanbakir l’ha presa 5 giorni fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 18/100
HappyHackingSpace/dit#81 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di HappyHackingSpace/dit
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
adrianbrad/queue#92 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
agent-ready area:skills
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
jmbarzee/temporal-architect#444 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement needs:sonnet ready-for-agent
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno