Contributor checklist
Single hub for adding or updating a language, config/markup plugins, and shipping a feature change — including which tests to run before opening a PR.
This doc does not replace the deep guides it links to. Use it to pick a path, run the right tests, and paste the commands you ran in your PR.
Setup and clone: CONTRIBUTING.md · Crate map: Code_structure.md
0. Before you code
| Step | Action |
|---|---|
| Issue | Open or claim an issue (language: Language Support Request; feature: Feature request). |
| Tier / path | Decide Tier 1 vs 2 vs 3, markup, config, or feature — see §1. |
| Design | Large features: skim or add a note under design/. Tier 1 languages: read tier-1-language-support.md Layers A–F first. |
| Crate map | Know where your change lives — Code_structure.md. |
| Commits | Include DCO sign-off on every commit — §6. |
1. Choose your path
| Path | When | Deep guide |
|---|---|---|
| Tier 1 language | Custom LanguagePlugin, full CFG/PDG/taint + Layer F CPG | tier-1-language-support.md |
| Tier 2 language | Generic tree-sitter + LanguageConfig | languages.md · scaffold in tier-1 §3–4 (Tier 2 uses config.rs) |
| Tier 3 language | Regex patterns only | languages.md |
| Config formats | JSON, YAML, TOML, properties, … | crates/rgctl-config-formats |
| Markup (Markdown) | Doc context graph (not Tier 1/2) | markdown-context.md |
| Feature change | CLI, analysis, graph, dashboard, semantic, … | §4 + matching design/ doc |
2. Programming languages
Scaffold (all tiers)
- Add
crates/rgctl-lang-{id}/and register incrates/rgctl-languages/. - Update
languages.toml(extensions,handler, kinds). - Wire workspace
Cargo.toml.
Full layout and naming: tier-1-language-support.md §3–4.
Tier 2 / Tier 3 — minimum tests
| Tier | Run before PR |
|---|---|
| Tier 2 | Plugin unit tests in crates/rgctl-lang-{id}/; cargo test on touched crates; optional fixture under tests/fixtures/ |
| Tier 3 | Same as Tier 2; no CFG/taint/dashboard gates |
Promoting Tier 2 → Tier 1: tier-1 §5.
Tier 1 — test matrix (Layers E + F)
Layer definitions (A–F prose, F1–F7 table, honesty limits): tier-1 §2.
Copy-paste PR checklist block: tier-1 §7.
| Gate | Layer | Command / location |
|---|---|---|
E1 Plugin symbols + Calls | E | cargo test -p rgctl-lang-{id} |
| E2 CFG branching + loop | E | cargo test -p rgctl-analysis cfg_builder |
| E3 Taint source→sink | E | cargo test --test taint_analysis or tests/{lang}_taint.rs |
| E4 Fixture integration | E | e.g. cargo test --test go_cfg_analysis |
| E5 Dashboard bundle | E | cargo test --release --test dashboard_ecommerce_{lang} + shared dashboard_harness.rs |
| E6 Workspace clean | E | §5 standard test workflow |
| F6 Field-write golden | F | crates/rgctl-analysis/src/field_write.rs — {id}_cfg_captures_field_write_and_query |
| Langfeature GQL probes | E/F | cargo test --test java_langfeatures · cargo test --test go_langfeatures (see go-language-coverage.md) |
Dashboard gates by language (release mode; external fixture repos — set RGCTL_*_REPO if needed):
| Language | Test target |
|---|---|
| Go | dashboard_ecommerce_go |
| Java | dashboard_gbuilder (gbuilder golden) |
| C# | dashboard_ecommerce_csharp |
| C | dashboard_ecommerce_c |
| C++ | dashboard_ecommerce_cpp |
| Python | dashboard_ecommerce_python |
| Rust | dashboard_ecommerce_rust |
| JavaScript | dashboard_ecommerce_javascript |
| TypeScript | dashboard_ecommerce_typescript |
Fast dashboard smoke (tiny in-tree fixture): cargo test --test dashboard_bundle.
Parity snapshot: tier-1 §8.
3. Config / markup
Config format plugins
- Code:
crates/rgctl-config-formats - Tier table: languages.md (config formats do not run CFG/PDG)
Run workspace tests touching the format crate; add fixture tests if you change extraction behavior.
Markdown context graph
Deep guide: markdown-context.md. Fixture: tests/fixtures/markdown-context/.
| Gate | Command |
|---|---|
| CLI discover + GQL | cargo test --test markdown_context_cli |
| In-memory spec matrix | cargo test -p rgctl-extraction markdown_spec_coverage |
| Extraction unit tests | cargo test -p rgctl-lang-markdown · cargo test -p rgctl-extraction markdown_context_gql |
Optional cold profile (large corpus): markdown-context.md § Cold profile.
4. Feature updates
Map what you touched → tests to run. Design detail lives in design/README.md.
| Touch area | Primary tests | Notes |
|---|---|---|
| CLI JSON serializers | cargo test --test cli_output | cli-io-sanity-qe.md Layer 1 |
| CLI subprocess / flags | cargo test --release --test subprocess_golden_path · --test all_commands_sanity | Layers 2–3 |
| Blast radius / policy | cargo test --test blast_radius · --release --test blast_radius_perf | blast-radius-design.md |
| GQL | cargo test --test gql_integration · --test gql_optimizer | gql-design.md |
| Semantic search | cargo test --test semantic_search_qe · semantic_audit · semantic_boundary | semantic-search-design.md |
| Graph / metrics / communities | cargo test --test graph_correctness · map_collision_qe · cross_feature_qe · community_audit | QE suite |
| CFG / PDG / slice | cargo test --test slicing · with_cfg_cli · dominance | cfg-design.md · pdg-design.md |
| Taint | cargo test --test taint_analysis · language *_taint.rs | taint-analysis-design.md |
Hybrid CPG (cpg CLI) | field_write unit tests · with_cfg_cli | hybrid-cpg-plan.md |
| Migration planner | cargo test --test migration_plan_cli · with_dashboard_cli | migration-planner-design.md |
CI policy check | subprocess golden paths · graph_projections | ci-policy-checks-design.md |
HTTP serve | cargo test --test http_serve | http-api.md |
| Dashboard export / UI | cargo test dashboard_harness · ./scripts/test-dashboard-golden.sh | dashboard-design.md |
| User-guide workflow | cargo test --test user_guide_scenarios (needs release rgctl, jq) | user-guide.md |
| Core integration | cargo test --test integration_core_features · bundles | Edge extraction + persistence |
Dashboard PR checklist
When changing dashboard/ or crates/rgctl-dashboard/:
- Update dashboard-design.md implementation status
-
./scripts/test-dashboard-golden.shpasses - Full checklist: dashboard-design § PR checklist
5. Standard test workflow
Run before opening a PR (add path-specific targets from §2, §3, or §4):
cargo fmt --all -- --check
cargo clippy --lib --bins -- -D warnings
cargo clippy -p rgctl-analysis -- -D warnings
cargo clippy -p rgctl-graph -p rgctl-core -- -D warnings
cargo test --workspace --lib --bins --tests
cargo build --release -p rgctl
CARGO_BIN_EXE_rgctl="$PWD/target/release/rgctl" \
cargo test --test user_guide_scenarios
cargo test --test map_collision_qe
cargo test --test graph_correctness
cargo test --test semantic_search_qe
cargo test --test cross_feature_qe
cargo test --test cli_output
cargo test --release --test subprocess_golden_path
cargo test --release --test all_commands_sanity
cargo test --release --test blast_radius_perf
Optional release-mode dashboard gates: add --release --test dashboard_* targets from §2.
CLI I/O layer reference: cli-io-sanity-qe.md. Workflow mirror: .github/workflows/ci.yml.
6. Documentation & PR
Doc updates
| Change type | Update |
|---|---|
| User CLI | user-guide.md · validate with cargo test --test user_guide_scenarios |
| Agent / JSON | AGENTS.md · json-api.md · agent-recipes.md |
| Languages list | languages.md |
| Dashboard UX | dashboard-user-guide.md |
| New capability | Matching doc in design/ |
Signed commits and DCO
Every commit in a PR must include DCO sign-off — use -s / --signoff so the commit message contains:
Signed-off-by: Your Name <your.email@example.com>
The sign-off certifies agreement with the Developer Certificate of Origin (DCO).
One-shot:
git commit -s -m "your message"
Verify before push:
git log -1 --format=%B | grep -i '^Signed-off-by:'
Open the PR
- Branch from
main. - Fill in .github/PULL_REQUEST_TEMPLATE.md.
- List exact commands you ran (see §5).
- Tier 1 language PRs: paste the checklist from tier-1 §7.
7. Decision tree
┌─────────────────┐
│ What changed? │
└────────┬────────┘
│
┌───────────────────┼───────────────────┐
▼ ▼ ▼
┌───────────┐ ┌─────────────┐ ┌─────────────┐
│ Language │ │ Markup / │ │ Feature / │
│ plugin │ │ config │ │ infra │
└─────┬─────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
Tier 1? Markdown? See §4 table
├─ yes → §2 ├─ yes → §3 + design doc
│ Tier 1 matrix │ markdown_* │
└─ no → §2 └─ else config Dashboard?
Tier 2/3 min formats │
crate tests §4 dashboard
checklist
│ │ │
└───────────────────┴───────────────────┘
│
▼
§5 standard test workflow
│
▼
§6 signed commits + DCO + PR template
See also
- CONTRIBUTING.md — clone, build, test overview
- tier-1-language-support.md — Layer A–F depth
- cli-io-sanity-qe.md — CLI test layers
- dashboard-design.md — WASM export pipeline