Roadmap: making dit the best form-detection and classification tool
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 8/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Necesita aclaración
- Estado de actividad
- Activo
- Stack tecnológico
- go
- Área
- cli, machine-learning, security
Línea de trabajo
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.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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
- Lenguaje dominante
- Go
- Estrellas
- 19
- Forks
- 4
- Merge medio
- 15 min
- PR fusionados (30 d)
- 2
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de HappyHackingSpace/dit
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
HappyHackingSpace/dit#85 ·
Los mantenedores suelen responder en 1 día
-
Support reading HTML from stdinPosiblemente ocupada @dogancanbakir la tomó hace 4 días. Abiertoenhancement good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
HappyHackingSpace/dit#3 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 48/100
HappyHackingSpace/dit#84 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 58/100
HappyHackingSpace/dit#83 ·
Los mantenedores suelen responder en 1 día
-
feat: `dit model pull` — first-class model managementPosiblemente ocupada @dogancanbakir la tomó hace 4 días. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 18/100
HappyHackingSpace/dit#81 ·
Los mantenedores suelen responder en 1 día
Todos los issues de HappyHackingSpace/dit
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
CycloneDX/cyclonedx-go#304 ·
-
[Bug]: snowflake_share fails to read a share attached to a listing with target accounts ('TARGETED ACCOUNTS' in the "to" column)Posiblemente ocupada @akhil9tiet la tomó hoy. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
snowflakedb/terraform-provider-snowflake#5366 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
txn2/mcp-data-platform#2493 ·
Los mantenedores suelen responder en 1 día
-
fix(doctor): format MongoDB URI and UNIX socket addresses correctly in doctor diagnostic outputAbiertobug good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
oscarbol09/branchbase#178 ·
Los mantenedores suelen responder en 4 días