Single-commit clean baseline after security scrub of niche-tells, project codenames, internal jargon, and contributor-email leaks. Contents: - 100 Rust crates (_primitives/_rust/) - 37 agent manifests (_manifests/) + generated specs (_generated/) - 67 user-invocable skills (skills/) - 33 hooks (hooks/) - Composition blocks (_blocks/) - Documentation (docs/, README.md) - TS adapter packages (_ts_packages/) - Assembler (_assembler/) - Roles (_roles/) - Templates (_templates/) - Forgejo CI (.forgejo/) Author: Denis Parfionovich <info@greendragon.info> License: see LICENSE.
92 lines
4 KiB
Markdown
92 lines
4 KiB
Markdown
# Phase 1 — Intake (language, coverage, critical paths, CI)
|
|
|
|
One free-text paragraph + one AskUserQuestion multi-part batch.
|
|
|
|
## 1a — Ask for the testing-gap description
|
|
|
|
Emit a regular message (NOT AskUserQuestion):
|
|
|
|
> Describe in one paragraph: what are you testing (project name / stack),
|
|
> what gap is `/test-gen` not solving (fuzz? load? E2E? mutation? all?),
|
|
> and what failure mode would be worst (prod crash? data loss? latency
|
|
> regression? auth bypass?). Reply in one message.
|
|
|
|
Store verbatim as `INTAKE`.
|
|
|
|
If `INTAKE` mentions ONLY "unit tests" / "missing tests for function X"
|
|
(unit-level gap, not matrix gap), emit:
|
|
|
|
```
|
|
DETECTION: this is a /test-gen task, not /test-matrix.
|
|
Handing off to `skills/test-gen/SKILL.md`. Re-run /test-matrix later
|
|
when fuzz / property / load / E2E / mutation coverage is needed.
|
|
```
|
|
|
|
…and STOP. Do not proceed.
|
|
|
|
## 1b — Multi-part intake click (one AskUserQuestion call)
|
|
|
|
```json
|
|
{
|
|
"questions": [
|
|
{
|
|
"question": "Language(s) in scope?",
|
|
"header": "Languages",
|
|
"multiSelect": true,
|
|
"options": [
|
|
{"label": "Rust", "description": "cargo-fuzz, proptest, cargo-mutants, oha"},
|
|
{"label": "Python", "description": "hypothesis, atheris, mutmut, schemathesis"},
|
|
{"label": "JavaScript/TypeScript", "description": "fast-check, StrykerJS, Playwright"},
|
|
{"label": "Go", "description": "built-in fuzz (go test -fuzz), gopter, vegeta"},
|
|
{"label": "Swift", "description": "SwiftCheck, XCUITest — limited fuzz tooling"},
|
|
{"label": "Flutter/Dart", "description": "glados property, flutter integration_test"}
|
|
]
|
|
},
|
|
{
|
|
"question": "Baseline unit-test coverage?",
|
|
"header": "Coverage",
|
|
"multiSelect": false,
|
|
"options": [
|
|
{"label": "High (≥ 80%)", "description": "Matrix tests layer on top of solid unit base"},
|
|
{"label": "Medium (40-80%)", "description": "Run /test-gen in parallel, don't skip unit gaps"},
|
|
{"label": "Low (< 40%)", "description": "Strongly recommend /test-gen FIRST — fuzz+load on buggy code wastes CI"},
|
|
{"label": "Unknown — need to measure", "description": "Phase 3 will add a coverage job before scaffolding"}
|
|
]
|
|
},
|
|
{
|
|
"question": "Critical paths (multi-select)?",
|
|
"header": "Critical",
|
|
"multiSelect": true,
|
|
"options": [
|
|
{"label": "Auth / session / crypto", "description": "Fuzz + property mandatory on token parsers + signature verify"},
|
|
{"label": "Payment / money-in-motion", "description": "E2E + property (invariants: no negative balance, idempotency) mandatory"},
|
|
{"label": "Data integrity (DB / serialization)", "description": "Property-based round-trips + migration E2E"},
|
|
{"label": "Performance-sensitive (< 100ms SLO)", "description": "Load tests with k6/oha mandatory; set SLO thresholds in CI"},
|
|
{"label": "Untrusted-input parsing", "description": "Fuzz mandatory (cargo-fuzz / atheris / jsfuzz)"},
|
|
{"label": "User-facing UI flows", "description": "E2E with Playwright on 5-15 critical journeys"}
|
|
]
|
|
},
|
|
{
|
|
"question": "CI target?",
|
|
"header": "CI",
|
|
"multiSelect": false,
|
|
"options": [
|
|
{"label": "GitHub Actions", "description": "workflow file under .github/workflows/"},
|
|
{"label": "Forgejo Actions", "description": "workflow file under .forgejo/workflows/ (kit default — compatible)"},
|
|
{"label": "Self-hosted / custom", "description": "Emit portable YAML + shell scripts; wire manually"},
|
|
{"label": "None — local only", "description": "Generate Makefile / justfile targets, no CI"}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
Store as `LANGS`, `COVERAGE`, `CRITICAL`, `CI`.
|
|
|
|
## Verify-criterion
|
|
|
|
- `INTAKE` is non-empty.
|
|
- `LANGS` has ≥ 1 entry.
|
|
- `CRITICAL` has ≥ 1 entry (zero-critical-path tasks are unit-test-only — redirect to /test-gen).
|
|
- `CI` is exactly one value.
|
|
- On failure, re-ask the failing input only. Never fall through.
|