devcouncil 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -201
- package/README.md +197 -494
- package/package.json +9 -2
- package/pyproject.toml +62 -27
- package/src/devcouncil/__main__.py +4 -4
- package/src/devcouncil/app/__init__.py +28 -28
- package/src/devcouncil/app/config.py +297 -108
- package/src/devcouncil/app/errors.py +23 -23
- package/src/devcouncil/app/events.py +44 -44
- package/src/devcouncil/app/orchestrator.py +67 -67
- package/src/devcouncil/app/project_status.py +29 -0
- package/src/devcouncil/app/run_context.py +39 -39
- package/src/devcouncil/app/state_machine.py +108 -108
- package/src/devcouncil/artifacts/__init__.py +1 -1
- package/src/devcouncil/artifacts/coverage.py +96 -96
- package/src/devcouncil/artifacts/graph.py +163 -143
- package/src/devcouncil/artifacts/migrations.py +20 -20
- package/src/devcouncil/artifacts/schemas.py +23 -23
- package/src/devcouncil/artifacts/serializer.py +21 -21
- package/src/devcouncil/artifacts/validators.py +27 -27
- package/src/devcouncil/assets/__init__.py +1 -0
- package/src/devcouncil/assets/devcouncil-logo.svg +60 -0
- package/src/devcouncil/assets/devcouncil_logo_premium.png +0 -0
- package/src/devcouncil/cli/commands/agents.py +292 -0
- package/src/devcouncil/cli/commands/artifacts.py +54 -48
- package/src/devcouncil/cli/commands/ast.py +22 -0
- package/src/devcouncil/cli/commands/baseline.py +35 -32
- package/src/devcouncil/cli/commands/check.py +209 -0
- package/src/devcouncil/cli/commands/config.py +115 -54
- package/src/devcouncil/cli/commands/cost.py +57 -0
- package/src/devcouncil/cli/commands/dashboard.py +31 -0
- package/src/devcouncil/cli/commands/doctor.py +291 -47
- package/src/devcouncil/cli/commands/evidence.py +48 -0
- package/src/devcouncil/cli/commands/go.py +656 -0
- package/src/devcouncil/cli/commands/handoff.py +69 -0
- package/src/devcouncil/cli/commands/hook.py +209 -33
- package/src/devcouncil/cli/commands/init.py +204 -57
- package/src/devcouncil/cli/commands/integrate.py +1171 -76
- package/src/devcouncil/cli/commands/lsp.py +20 -0
- package/src/devcouncil/cli/commands/map.py +96 -22
- package/src/devcouncil/cli/commands/plan.py +422 -210
- package/src/devcouncil/cli/commands/prompt.py +48 -34
- package/src/devcouncil/cli/commands/repair.py +89 -69
- package/src/devcouncil/cli/commands/report.py +120 -54
- package/src/devcouncil/cli/commands/reset_demo_state.py +33 -28
- package/src/devcouncil/cli/commands/rollback.py +55 -54
- package/src/devcouncil/cli/commands/run.py +285 -220
- package/src/devcouncil/cli/commands/runs.py +223 -0
- package/src/devcouncil/cli/commands/scaffold.py +32 -0
- package/src/devcouncil/cli/commands/semantic.py +47 -0
- package/src/devcouncil/cli/commands/setup.py +300 -20
- package/src/devcouncil/cli/commands/shell.py +73 -0
- package/src/devcouncil/cli/commands/show.py +76 -57
- package/src/devcouncil/cli/commands/skills.py +88 -0
- package/src/devcouncil/cli/commands/status.py +141 -105
- package/src/devcouncil/cli/commands/tasks.py +55 -41
- package/src/devcouncil/cli/commands/trace.py +49 -4
- package/src/devcouncil/cli/commands/verify.py +293 -128
- package/src/devcouncil/cli/commands/version.py +20 -20
- package/src/devcouncil/cli/commands/watch.py +574 -0
- package/src/devcouncil/cli/commands/watch_fs.py +40 -0
- package/src/devcouncil/cli/main.py +92 -25
- package/src/devcouncil/council/prompts/arbiter.md +19 -19
- package/src/devcouncil/council/prompts/critic_a.md +10 -10
- package/src/devcouncil/council/prompts/critic_b.md +10 -10
- package/src/devcouncil/council/prompts/implementation_reviewer.md +16 -16
- package/src/devcouncil/council/prompts/planner_a.md +16 -16
- package/src/devcouncil/council/prompts/planner_b.md +16 -16
- package/src/devcouncil/council/prompts/rebuttal.md +10 -10
- package/src/devcouncil/council/prompts/spec_writer.md +12 -12
- package/src/devcouncil/domain/assumption.py +17 -17
- package/src/devcouncil/domain/critique.py +32 -32
- package/src/devcouncil/domain/evidence.py +47 -27
- package/src/devcouncil/domain/gap.py +52 -26
- package/src/devcouncil/domain/requirement.py +22 -22
- package/src/devcouncil/domain/task.py +55 -26
- package/src/devcouncil/execution/__init__.py +1 -1
- package/src/devcouncil/execution/checkpoints.py +246 -0
- package/src/devcouncil/execution/context_builder.py +54 -54
- package/src/devcouncil/execution/executor.py +15 -15
- package/src/devcouncil/execution/fs_watcher.py +180 -0
- package/src/devcouncil/execution/handoff.py +102 -0
- package/src/devcouncil/execution/hook_policy.py +186 -77
- package/src/devcouncil/execution/patch.py +77 -28
- package/src/devcouncil/execution/permissions.py +52 -59
- package/src/devcouncil/execution/policy_engine.py +343 -0
- package/src/devcouncil/execution/prompt_builder.py +650 -38
- package/src/devcouncil/execution/shell_session.py +225 -0
- package/src/devcouncil/execution/task_runner.py +68 -64
- package/src/devcouncil/executors/__init__.py +1 -1
- package/src/devcouncil/executors/agent_registry.py +575 -0
- package/src/devcouncil/executors/coding_cli.py +736 -0
- package/src/devcouncil/executors/mini_swe.py +63 -63
- package/src/devcouncil/executors/native/agent.py +186 -85
- package/src/devcouncil/executors/openhands.py +56 -56
- package/src/devcouncil/gating/__init__.py +1 -1
- package/src/devcouncil/gating/checks/clean_git.py +52 -45
- package/src/devcouncil/gating/checks/planned_files_check.py +32 -32
- package/src/devcouncil/gating/checks/requirement_coverage.py +26 -26
- package/src/devcouncil/gating/checks/secret_scan_check.py +53 -34
- package/src/devcouncil/gating/policy.py +315 -167
- package/src/devcouncil/hardware.py +184 -0
- package/src/devcouncil/indexing/__init__.py +1 -1
- package/src/devcouncil/indexing/ast_matcher.py +168 -0
- package/src/devcouncil/indexing/graph_index.py +48 -48
- package/src/devcouncil/indexing/lsp.py +161 -0
- package/src/devcouncil/indexing/repo_mapper.py +1455 -204
- package/src/devcouncil/indexing/semantic_index.py +205 -0
- package/src/devcouncil/integrations/actions.py +146 -0
- package/src/devcouncil/integrations/check.py +423 -0
- package/src/devcouncil/integrations/github.py +35 -35
- package/src/devcouncil/integrations/github_intent.py +142 -0
- package/src/devcouncil/integrations/gitnexus.py +62 -27
- package/src/devcouncil/integrations/graphify.py +34 -34
- package/src/devcouncil/integrations/mcp/server.py +2072 -96
- package/src/devcouncil/integrations/opencode_devcouncil_plugin.mjs +24 -0
- package/src/devcouncil/integrations/pr_comments.py +62 -0
- package/src/devcouncil/live/__init__.py +2 -0
- package/src/devcouncil/live/cards.py +349 -0
- package/src/devcouncil/live/models.py +63 -0
- package/src/devcouncil/live/repair_prompt.py +83 -0
- package/src/devcouncil/live/reviewer.py +70 -0
- package/src/devcouncil/live/signals.py +135 -0
- package/src/devcouncil/live/summary.py +34 -0
- package/src/devcouncil/live/tasks.py +18 -0
- package/src/devcouncil/live/transcripts.py +141 -0
- package/src/devcouncil/llm/__init__.py +1 -1
- package/src/devcouncil/llm/cache.py +42 -38
- package/src/devcouncil/llm/model_defaults.yaml +44 -0
- package/src/devcouncil/llm/provider.py +627 -125
- package/src/devcouncil/llm/router.py +303 -118
- package/src/devcouncil/optimization/__init__.py +1 -0
- package/src/devcouncil/optimization/gepa_agent.py +318 -0
- package/src/devcouncil/planning/__init__.py +1 -1
- package/src/devcouncil/planning/arbiter_service.py +57 -57
- package/src/devcouncil/planning/correction_manifest.py +303 -0
- package/src/devcouncil/planning/critique_service.py +71 -66
- package/src/devcouncil/planning/plan_service.py +60 -46
- package/src/devcouncil/planning/prompt_enhancer_service.py +167 -0
- package/src/devcouncil/planning/repair_service.py +39 -39
- package/src/devcouncil/planning/spec_service.py +70 -44
- package/src/devcouncil/repo/ci_scaffold.py +157 -0
- package/src/devcouncil/repo/gitignore.py +123 -0
- package/src/devcouncil/repo/sca.py +374 -0
- package/src/devcouncil/reporting/github_check.py +32 -32
- package/src/devcouncil/reporting/json_report.py +30 -17
- package/src/devcouncil/reporting/markdown_report.py +83 -46
- package/src/devcouncil/reporting/report_builder.py +14 -14
- package/src/devcouncil/skills/__init__.py +19 -0
- package/src/devcouncil/skills/library/README.md +46 -0
- package/src/devcouncil/skills/library/ai-training.md +50 -0
- package/src/devcouncil/skills/library/android.md +50 -0
- package/src/devcouncil/skills/library/backend.md +52 -0
- package/src/devcouncil/skills/library/core-engineering.md +95 -0
- package/src/devcouncil/skills/library/data-engineering.md +47 -0
- package/src/devcouncil/skills/library/desktop.md +46 -0
- package/src/devcouncil/skills/library/devops.md +48 -0
- package/src/devcouncil/skills/library/game-dev.md +46 -0
- package/src/devcouncil/skills/library/ios.md +48 -0
- package/src/devcouncil/skills/library/mobile-cross-platform.md +46 -0
- package/src/devcouncil/skills/library/security.md +48 -0
- package/src/devcouncil/skills/library/systems.md +48 -0
- package/src/devcouncil/skills/library/web.md +47 -0
- package/src/devcouncil/skills/library/windows.md +47 -0
- package/src/devcouncil/skills/registry.py +330 -0
- package/src/devcouncil/storage/db.py +147 -66
- package/src/devcouncil/storage/models.py +204 -83
- package/src/devcouncil/storage/native.py +557 -0
- package/src/devcouncil/storage/repositories.py +388 -249
- package/src/devcouncil/telemetry/cost.py +140 -34
- package/src/devcouncil/telemetry/model_pricing.yaml +48 -0
- package/src/devcouncil/telemetry/pricing.py +28 -0
- package/src/devcouncil/telemetry/traces.py +62 -7
- package/src/devcouncil/telemetry/tracker.py +52 -49
- package/src/devcouncil/ui/__init__.py +1 -0
- package/src/devcouncil/ui/dashboard.py +423 -0
- package/src/devcouncil/utils/__init__.py +1 -1
- package/src/devcouncil/utils/redaction.py +147 -141
- package/src/devcouncil/utils/subprocess_env.py +69 -0
- package/src/devcouncil/verification/__init__.py +1 -1
- package/src/devcouncil/verification/acceptance_compiler.py +125 -0
- package/src/devcouncil/verification/ad_hoc_check.py +129 -0
- package/src/devcouncil/verification/diff_coverage.py +353 -0
- package/src/devcouncil/verification/implementation_reviewer.py +55 -55
- package/src/devcouncil/verification/next_actions.py +189 -0
- package/src/devcouncil/verification/sandbox.py +178 -0
- package/src/devcouncil/verification/test_resolver.py +91 -0
- package/src/devcouncil/verification/verifier.py +1342 -307
- package/uv.lock +205 -64
- package/src/devcouncil/indexing/symbol_index.py +0 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# DevCouncil skills library
|
|
2
|
+
|
|
3
|
+
Each `*.md` file here (except this README) is a **skill**: reusable guidance that
|
|
4
|
+
DevCouncil selects for a goal/repo, embeds into `dev prompt` output, and scaffolds
|
|
5
|
+
into a target repo's `.claude/skills/<name>/SKILL.md`.
|
|
6
|
+
|
|
7
|
+
A skill is a markdown file with YAML frontmatter:
|
|
8
|
+
|
|
9
|
+
```markdown
|
|
10
|
+
---
|
|
11
|
+
name: my-domain # required — unique slug; files without a name are ignored
|
|
12
|
+
title: My Domain Intake # optional human title
|
|
13
|
+
description: One-line directive shown in `dev skills` and embedded into prompts.
|
|
14
|
+
always: false # true = always selected (only core-engineering uses this)
|
|
15
|
+
triggers: # how this skill is auto-selected (omit for always-on)
|
|
16
|
+
keywords: [foo, bar] # matched against the goal text (case-insensitive substring)
|
|
17
|
+
globs: ["*.foo", "build.bar"] # matched against repo file basenames
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Body
|
|
21
|
+
|
|
22
|
+
The full guidance the agent reads. For domain skills, write a "senior-dev intake":
|
|
23
|
+
what current versions, deprecations, recommended libraries, official guidelines, and
|
|
24
|
+
CLI/build tools to confirm *before* writing code.
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Adding a skill
|
|
28
|
+
|
|
29
|
+
1. Create `<name>.md` with the frontmatter above.
|
|
30
|
+
2. Choose triggers: `keywords` (goal text) and/or `globs` (repo files). Both are ORed.
|
|
31
|
+
3. Verify: `dev skills` lists it; `dev skills show <name>` prints it.
|
|
32
|
+
|
|
33
|
+
Selection is keyword-based inside `dev prompt` (fast, no repo walk) and
|
|
34
|
+
keyword-plus-file-based for `dev skills` / `dev skills scaffold` / init scaffolding.
|
|
35
|
+
Keep `description` actionable — it is what the agent sees inline in the task prompt.
|
|
36
|
+
|
|
37
|
+
## Repo-local skills
|
|
38
|
+
|
|
39
|
+
You don't have to edit this packaged library to add a skill. Drop your own
|
|
40
|
+
`SKILL.md` (same frontmatter) into a project's **`.claude/skills/<name>/SKILL.md`**
|
|
41
|
+
(or `.devcouncil/skills/*.md`) and DevCouncil discovers it automatically — it shows
|
|
42
|
+
up in `dev skills` (source `repo`), participates in selection, and is folded into the
|
|
43
|
+
codebase-aware prompt enhancer and the task prompts. A repo-local skill **overrides a
|
|
44
|
+
packaged skill with the same name**, so a team can keep its own house rules for
|
|
45
|
+
`android`/`web`/etc. Give it `triggers` (or `always: true`) if you want it
|
|
46
|
+
auto-selected; without triggers it stays available but dormant.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ai-training
|
|
3
|
+
title: AI / ML Model Training Intake
|
|
4
|
+
description: Before writing model-training code, retrieve current framework versions, hardware/driver constraints, deprecations, dataset/eval practices, and the right tooling — like a senior ML engineer.
|
|
5
|
+
triggers:
|
|
6
|
+
keywords: [train, training, model, pytorch, torch, tensorflow, keras, jax, huggingface, transformers, finetune, "fine-tune", dataset, llm, ml, cuda, embedding]
|
|
7
|
+
globs: ["*.ipynb", "train.py", "trainer.py", "requirements.txt", "environment.yml", "pyproject.toml", "accelerate*.yaml", "deepspeed*.json"]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# AI / ML Model Training Intake
|
|
11
|
+
|
|
12
|
+
Do this **before** writing or changing model-training code. Frameworks, hardware
|
|
13
|
+
drivers, and recommended recipes change frequently, and silent version mismatches
|
|
14
|
+
waste expensive compute. Confirm against the framework docs and the project's
|
|
15
|
+
environment files.
|
|
16
|
+
|
|
17
|
+
## Establish current state first
|
|
18
|
+
|
|
19
|
+
1. **Framework & environment** — read `requirements.txt` / `environment.yml` /
|
|
20
|
+
`pyproject.toml`: the framework (PyTorch, TensorFlow/Keras, JAX, Hugging Face
|
|
21
|
+
`transformers`/`accelerate`/`peft`), its version, Python version, and the
|
|
22
|
+
CUDA/cuDNN/ROCm requirement. Match the existing stack.
|
|
23
|
+
2. **Hardware & precision** — available accelerators (GPU/TPU), memory budget, and
|
|
24
|
+
the precision strategy (fp32/fp16/bf16, mixed precision, quantization). Confirm the
|
|
25
|
+
training approach fits the hardware (single-GPU vs distributed: DDP/FSDP/DeepSpeed).
|
|
26
|
+
3. **Deprecations & API shifts** — note moved/renamed APIs (e.g. `transformers`
|
|
27
|
+
trainer/argument changes, optimizer/scheduler APIs, dataset loaders) and avoid
|
|
28
|
+
patterns deprecated in the installed version.
|
|
29
|
+
4. **Recommended practices** — reproducibility (seed, deterministic flags, pinned
|
|
30
|
+
versions), data pipeline (streaming vs in-memory, tokenization), checkpointing and
|
|
31
|
+
resume, and evaluation (held-out split, the metric that actually matters, no leakage
|
|
32
|
+
between train/val/test).
|
|
33
|
+
5. **Cost & safety** — estimate compute/time before launching long runs; log metrics
|
|
34
|
+
(Weights & Biases / TensorBoard) and checkpoint so a crash isn't a total loss.
|
|
35
|
+
|
|
36
|
+
## Tools
|
|
37
|
+
|
|
38
|
+
- `python`/`accelerate launch`/`torchrun` for training entry points.
|
|
39
|
+
- Experiment tracking (W&B, MLflow, TensorBoard) and `nvidia-smi` for GPU monitoring.
|
|
40
|
+
- `datasets`/`dvc` for data, and a pinned environment (`uv`/`conda`/`pip-tools`).
|
|
41
|
+
|
|
42
|
+
## What to record before coding
|
|
43
|
+
|
|
44
|
+
- Framework + version, Python + CUDA versions, and the hardware/precision plan.
|
|
45
|
+
- Deprecated APIs to avoid and their current replacements.
|
|
46
|
+
- How the run is validated: the eval split, the metric, the checkpoint cadence, and a
|
|
47
|
+
short smoke run (a few steps) before the full training job.
|
|
48
|
+
|
|
49
|
+
Start with a tiny smoke run to validate the pipeline end-to-end before committing to a
|
|
50
|
+
long, expensive training run.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: android
|
|
3
|
+
title: Android App Development Intake
|
|
4
|
+
description: Before writing Android code, retrieve current SDK/AGP/Kotlin/Compose versions, platform behavior changes, deprecations, recommended Jetpack libraries, and the right CLI/build tools — like a senior Android engineer briefing themselves.
|
|
5
|
+
triggers:
|
|
6
|
+
keywords: [android, kotlin, jetpack, compose, gradle, agp, apk, aab, espresso, room, hilt]
|
|
7
|
+
globs: ["build.gradle", "build.gradle.kts", "settings.gradle", "settings.gradle.kts", "AndroidManifest.xml", "*.kt", "gradle/libs.versions.toml"]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Android App Development Intake
|
|
11
|
+
|
|
12
|
+
Do this **before** writing or changing Android code. Don't rely on training data —
|
|
13
|
+
Android moves fast and the answer that was right a year ago is often deprecated.
|
|
14
|
+
Confirm against `developer.android.com`, the AGP/Kotlin/Compose release notes, and
|
|
15
|
+
the project's own version catalog.
|
|
16
|
+
|
|
17
|
+
## Establish current state first
|
|
18
|
+
|
|
19
|
+
1. **Toolchain versions in use** — read `gradle/libs.versions.toml`, `build.gradle[.kts]`,
|
|
20
|
+
and `gradle-wrapper.properties`: `compileSdk` / `targetSdk` / `minSdk`, Android
|
|
21
|
+
Gradle Plugin (AGP), Kotlin, Gradle, Jetpack Compose / Compose Compiler, and core
|
|
22
|
+
Jetpack libraries.
|
|
23
|
+
2. **Latest platform & API level** — current stable Android release, its behavior
|
|
24
|
+
changes, and the newest `targetSdk` Google Play will require. Note anything that
|
|
25
|
+
affects this task.
|
|
26
|
+
3. **Deprecations & removals** — APIs deprecated or removed between the project's
|
|
27
|
+
`targetSdk` and current (e.g. background-execution limits, storage/scoped-storage
|
|
28
|
+
changes, notification/permission model, `AsyncTask`, `onBackPressed`, implicit
|
|
29
|
+
intents). List the ones this change touches and their replacements.
|
|
30
|
+
4. **Recommended libraries** — prefer current Jetpack: Compose (+ adaptive layouts),
|
|
31
|
+
Navigation, Room, WorkManager, Hilt, DataStore (not SharedPreferences for new code),
|
|
32
|
+
Lifecycle/ViewModel. Confirm the recommended artifact and version.
|
|
33
|
+
5. **Guidelines** — Material 3, adaptive/large-screen & foldable support, edge-to-edge,
|
|
34
|
+
the runtime permission model, and predictive back.
|
|
35
|
+
|
|
36
|
+
## Build & CLI tools
|
|
37
|
+
|
|
38
|
+
- `gradlew`/`gradlew.bat` for builds; `adb` for device/log work; `R8` for shrink/obfuscate.
|
|
39
|
+
- The `android` command-line tool and `sdkmanager`/`avdmanager` for SDK and emulator setup.
|
|
40
|
+
- Android Studio for profiling (Perfetto traces) and Compose preview.
|
|
41
|
+
|
|
42
|
+
## What to record before coding
|
|
43
|
+
|
|
44
|
+
- Effective `minSdk`/`targetSdk` and the version catalog entries you will use.
|
|
45
|
+
- Deprecated APIs to avoid and their modern replacements, with migration steps.
|
|
46
|
+
- The build/test commands you will run (`gradlew :app:assembleDebug`, `:app:testDebugUnitTest`,
|
|
47
|
+
connected/instrumented tests) so the change is verifiable.
|
|
48
|
+
|
|
49
|
+
If the project mixes Views and Compose, match the file you're editing; don't migrate
|
|
50
|
+
unrelated screens as a side effect (see the surgical-changes rule in core-engineering).
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: backend
|
|
3
|
+
title: Backend / API / Services Intake
|
|
4
|
+
description: Before writing server-side code, retrieve current framework and runtime versions, security and auth guidance, database/migration tooling, and the right CLI/build/test commands — like a senior backend engineer briefing themselves on the stack.
|
|
5
|
+
triggers:
|
|
6
|
+
keywords: [backend, server, api, rest, grpc, graphql, microservice, fastapi, django, flask, starlette, express, nestjs, rails, spring, laravel, gin, fiber, echo, axum, actix, sqlalchemy, alembic, prisma, postgres, postgresql, mysql, sqlite, redis, mongodb, celery, rabbitmq, kafka, docker, kubernetes, migration, webhook, jwt, oauth]
|
|
7
|
+
globs: ["manage.py", "wsgi.py", "asgi.py", "alembic.ini", "Dockerfile", "docker-compose.yml", "docker-compose.yaml", "go.mod", "Cargo.toml", "*.proto", "Gemfile", "Procfile", "main.go", "openapi.yaml", "openapi.json"]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Backend / API / Services Intake
|
|
11
|
+
|
|
12
|
+
Do this **before** writing or changing server-side code. Don't rely on training data —
|
|
13
|
+
frameworks, runtimes, and security guidance change, and a pattern that was fine a year
|
|
14
|
+
ago may now be deprecated or insecure. Confirm against the framework's current docs and
|
|
15
|
+
release notes, and against the project's own dependency manifests.
|
|
16
|
+
|
|
17
|
+
## Establish current state first
|
|
18
|
+
|
|
19
|
+
1. **Runtime & framework versions in use** — read the dependency manifest
|
|
20
|
+
(`pyproject.toml`/`requirements.txt`, `package.json`, `go.mod`, `Cargo.toml`, `Gemfile`,
|
|
21
|
+
`pom.xml`) and any lockfile: language runtime version, web framework (FastAPI/Django/
|
|
22
|
+
Flask/Express/NestJS/Gin/Axum/Spring/Rails), and ORM/data layer. Match what's already there.
|
|
23
|
+
2. **Current stable versions & deprecations** — the framework's latest stable release and
|
|
24
|
+
anything deprecated/removed between the project's version and current (routing, lifecycle
|
|
25
|
+
hooks, settings, async APIs). List the ones this change touches and their replacements.
|
|
26
|
+
3. **Data & migrations** — how schema changes are managed (Alembic, Django migrations,
|
|
27
|
+
Prisma Migrate, golang-migrate). Never hand-edit schema without a migration; generate one
|
|
28
|
+
and confirm it runs forward and back.
|
|
29
|
+
4. **Security & correctness** — input validation, authn/authz on every new endpoint, secrets
|
|
30
|
+
from config/env (never hard-coded), parameterized queries (no string-built SQL), safe
|
|
31
|
+
defaults for CORS/headers, and rate limits where relevant. Check the framework's current
|
|
32
|
+
security guidance for the version in use.
|
|
33
|
+
5. **Contracts** — if there's an API schema (OpenAPI, `.proto`, GraphQL SDL), update it with
|
|
34
|
+
the change and keep it the source of truth; note backward-compatibility for existing clients.
|
|
35
|
+
|
|
36
|
+
## Build & CLI tools
|
|
37
|
+
|
|
38
|
+
- Run/serve and migrate via the project's tooling: `uvicorn`/`gunicorn`, `python manage.py`,
|
|
39
|
+
`npm run`/`pnpm`, `go run`/`go build`, `cargo run`/`cargo build`, `rails`, `./gradlew`.
|
|
40
|
+
- Tests: `pytest`, `go test ./...`, `cargo test`, `npm test`, `python manage.py test` — prefer
|
|
41
|
+
the command the repo already uses so the change is verifiable.
|
|
42
|
+
- Containers: `docker build` / `docker compose up` when the service is containerized.
|
|
43
|
+
|
|
44
|
+
## What to record before coding
|
|
45
|
+
|
|
46
|
+
- The runtime/framework versions and the exact dependencies you will use.
|
|
47
|
+
- Deprecated APIs to avoid and their modern replacements, with migration steps.
|
|
48
|
+
- Any new migration to generate, and the auth/validation each new endpoint enforces.
|
|
49
|
+
- The build/test commands you will run so the change is provably correct.
|
|
50
|
+
|
|
51
|
+
Don't broaden the change beyond the task — no incidental framework upgrades or schema
|
|
52
|
+
churn on unrelated tables (see the surgical-changes rule in core-engineering).
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: core-engineering
|
|
3
|
+
title: Core Engineering Discipline
|
|
4
|
+
description: Always-on coding discipline for AI agents — think before coding, keep it simple, edit surgically, drive to a verifiable goal, and communicate like a senior engineer.
|
|
5
|
+
always: true
|
|
6
|
+
source: Merged from Andrej Karpathy's LLM coding guidelines and the Claude Fable 5 behavioral framework, distilled for DevCouncil-orchestrated coding work.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Core Engineering Discipline
|
|
10
|
+
|
|
11
|
+
This is the baseline contract for any change you make in this repository. It is
|
|
12
|
+
always in effect. The four principles come from Andrej Karpathy's observations
|
|
13
|
+
about how LLMs write code; the communication and honesty rules come from the
|
|
14
|
+
Claude Fable 5 framework. Together they describe how a senior engineer works.
|
|
15
|
+
|
|
16
|
+
## 1. Think before coding
|
|
17
|
+
|
|
18
|
+
Most bad LLM changes come from a wrong assumption made silently. Before writing
|
|
19
|
+
code:
|
|
20
|
+
|
|
21
|
+
- State the assumptions your solution depends on. If any are uncertain, surface
|
|
22
|
+
them instead of guessing.
|
|
23
|
+
- Read the surrounding code first. Match its existing patterns, naming, and
|
|
24
|
+
conventions rather than importing your own.
|
|
25
|
+
- If the request is ambiguous or has real tradeoffs, name them and recommend one
|
|
26
|
+
path — don't quietly pick one and hide the choice.
|
|
27
|
+
- Verify facts against the current codebase and current documentation, not from
|
|
28
|
+
memory. Library APIs, framework defaults, and best practices change; confirm
|
|
29
|
+
before relying on them. (For platform-specific work, the matching domain skill
|
|
30
|
+
tells you exactly what to confirm.)
|
|
31
|
+
|
|
32
|
+
## 2. Simplicity first
|
|
33
|
+
|
|
34
|
+
Write the minimal code that solves the stated problem.
|
|
35
|
+
|
|
36
|
+
- No speculative features, options, or abstractions for requirements that don't
|
|
37
|
+
exist yet. Do the simplest thing that works well.
|
|
38
|
+
- Don't add error handling, fallbacks, or validation for situations that cannot
|
|
39
|
+
occur. Trust internal code and framework guarantees; validate only at real
|
|
40
|
+
boundaries (user input, external APIs).
|
|
41
|
+
- Prefer a direct implementation over a clever or layered one. If you introduce
|
|
42
|
+
an abstraction, be able to justify why the direct version was insufficient.
|
|
43
|
+
- No feature flags or backwards-compatibility shims when you can just change the
|
|
44
|
+
code.
|
|
45
|
+
|
|
46
|
+
## 3. Surgical changes
|
|
47
|
+
|
|
48
|
+
Change only what the task requires.
|
|
49
|
+
|
|
50
|
+
- Touch the smallest set of lines that accomplishes the goal. Leave unrelated
|
|
51
|
+
code alone, even if you would have written it differently.
|
|
52
|
+
- Do not reformat, rename, or refactor code orthogonal to the task. Those are
|
|
53
|
+
separate changes with their own review.
|
|
54
|
+
- Preserve the existing style of each file you edit. Your diff should read like
|
|
55
|
+
the person who wrote the file made it.
|
|
56
|
+
- A bug fix does not need surrounding cleanup. A one-line change should produce a
|
|
57
|
+
one-line diff.
|
|
58
|
+
|
|
59
|
+
## 4. Goal-driven execution
|
|
60
|
+
|
|
61
|
+
Define what "done and correct" means before you start, then prove it.
|
|
62
|
+
|
|
63
|
+
- Write down the verifiable success criteria. In DevCouncil terms, these are the
|
|
64
|
+
acceptance checks and the tests that must pass.
|
|
65
|
+
- Prefer a tests-first loop: establish how you will check the work, make the
|
|
66
|
+
change, then run the check and iterate until it passes.
|
|
67
|
+
- Verify against evidence, not vibes. Run the tests, read the output, and only
|
|
68
|
+
then claim success.
|
|
69
|
+
|
|
70
|
+
## Communication & honesty (how you report the work)
|
|
71
|
+
|
|
72
|
+
- **Lead with the outcome.** Your first sentence should answer "what happened" or
|
|
73
|
+
"what did you find." Supporting detail comes after.
|
|
74
|
+
- **Be clear over terse.** Use plain, complete sentences. Avoid arrow-chains
|
|
75
|
+
(`A → B → fails`), stacked jargon, and invented shorthand. If you must choose
|
|
76
|
+
between short and clear, choose clear.
|
|
77
|
+
- **Don't over-format.** Use prose by default; reach for lists or tables only
|
|
78
|
+
when they genuinely aid scanning. Skip decorative bolding and meta-commentary.
|
|
79
|
+
- **Own mistakes plainly,** without excessive apology, and correct course.
|
|
80
|
+
- **Ground every progress claim in evidence** from this session. If tests fail,
|
|
81
|
+
say so with the output. If a step was skipped, say that. If something is done
|
|
82
|
+
and verified, state it plainly without hedging. Never report success you have
|
|
83
|
+
not observed.
|
|
84
|
+
- **Respect scope.** When the user is describing a problem, asking a question, or
|
|
85
|
+
thinking out loud, the deliverable is your assessment — report it and stop;
|
|
86
|
+
don't apply a fix until asked. For reversible actions clearly implied by the
|
|
87
|
+
request, proceed; for destructive or out-of-scope actions, confirm first.
|
|
88
|
+
|
|
89
|
+
## Before you reach for more capability
|
|
90
|
+
|
|
91
|
+
Check whether a relevant skill, helper, or existing convention already covers
|
|
92
|
+
the task before writing new code or pulling in a new dependency. Use the matching
|
|
93
|
+
domain skill (Android, iOS, Windows, web, AI training, …) to load current,
|
|
94
|
+
platform-specific guidance the way a senior engineer would brief themselves
|
|
95
|
+
before starting.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: data-engineering
|
|
3
|
+
title: Data Engineering / Pipelines / Warehouses Intake
|
|
4
|
+
description: Before changing data pipelines, transformations, or warehouse models, retrieve current engine/tool versions, schema and partitioning conventions, idempotency and backfill guidance, and the right run/test CLI commands — like a senior data engineer briefing themselves.
|
|
5
|
+
triggers:
|
|
6
|
+
keywords: [etl, elt, "data pipeline", "data engineering", airflow, dagster, prefect, dbt, spark, pyspark, flink, beam, snowflake, bigquery, redshift, databricks, "data warehouse", "data lake", lakehouse, iceberg, "delta lake", parquet, partition, backfill, ingestion]
|
|
7
|
+
globs: ["dbt_project.yml", "profiles.yml", "airflow.cfg", "dagster.yaml", "*.dbt", "dbt_packages", "great_expectations.yml", "*.avsc"]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Data Engineering / Pipelines / Warehouses Intake
|
|
11
|
+
|
|
12
|
+
Do this **before** changing pipelines, transformations, or warehouse models. Don't rely on
|
|
13
|
+
training data — engines, SQL dialects, and orchestration APIs change, and a careless change
|
|
14
|
+
can silently corrupt data or break downstream consumers. Confirm against the engine/tool's
|
|
15
|
+
current docs and the project's own conventions.
|
|
16
|
+
|
|
17
|
+
## Establish current state first
|
|
18
|
+
|
|
19
|
+
1. **Engine & tool versions in use** — read the manifests (`dbt_project.yml`, `requirements`,
|
|
20
|
+
cluster/runtime config): orchestrator (Airflow/Dagster/Prefect), transform tool (dbt/Spark),
|
|
21
|
+
warehouse/engine (Snowflake/BigQuery/Redshift/Databricks) and its SQL dialect. Match them.
|
|
22
|
+
2. **Schema, contracts & lineage** — the tables/models this touches, their schema, primary/unique
|
|
23
|
+
keys, and the downstream consumers (BI, models, other DAGs). A column rename or type change is
|
|
24
|
+
a breaking contract — coordinate it and update the dependents.
|
|
25
|
+
3. **Idempotency & partitioning** — pipelines must be safe to re-run: idempotent writes
|
|
26
|
+
(MERGE/upsert, partition overwrite), correct partition/cluster keys, and no duplicate or
|
|
27
|
+
out-of-order side effects. Confirm how backfills are run and bounded.
|
|
28
|
+
4. **Data quality** — null/uniqueness/referential tests, row-count and freshness checks, and
|
|
29
|
+
what happens on failure (block vs warn). Add or update tests for the change.
|
|
30
|
+
5. **Cost & scale** — scan/partition pruning, avoid full-table rewrites, and watch warehouse
|
|
31
|
+
compute/credits for big backfills.
|
|
32
|
+
|
|
33
|
+
## Build & CLI tools
|
|
34
|
+
|
|
35
|
+
- `dbt run`/`dbt test`/`dbt build` (with `--select` to scope), `airflow dags test`/`tasks test`,
|
|
36
|
+
`dagster job execute`, `spark-submit`/`pyspark`. Prefer the project's wrapper/Makefile.
|
|
37
|
+
- Validate transforms on a dev schema/sample before touching production datasets.
|
|
38
|
+
|
|
39
|
+
## What to record before coding
|
|
40
|
+
|
|
41
|
+
- The engine/dialect and the exact models/DAGs you will change.
|
|
42
|
+
- Schema/contract changes and the downstream consumers to coordinate with.
|
|
43
|
+
- The idempotency/partition strategy and how a backfill will be scoped and rolled back.
|
|
44
|
+
- The `dbt test`/DAG-test/data-quality commands that prove the change is correct.
|
|
45
|
+
|
|
46
|
+
Don't broaden the change beyond the task — no incidental model refactors or schema churn on
|
|
47
|
+
unrelated tables (see the surgical-changes rule in core-engineering).
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: desktop
|
|
3
|
+
title: Cross-Platform Desktop (Electron / Tauri / Qt) Intake
|
|
4
|
+
description: Before changing desktop-app code, retrieve current framework versions, the process/IPC and security model, packaging/auto-update guidance, and the right build/run CLI commands across OSes — like a senior desktop engineer briefing themselves.
|
|
5
|
+
triggers:
|
|
6
|
+
keywords: [electron, tauri, qt, qml, gtk, wxwidgets, "desktop app", "system tray", ipc, "main process", "renderer process", webview, "auto-update", "code signing", notarization]
|
|
7
|
+
globs: ["tauri.conf.json", "*.qml", "*.pro", "CMakeLists.txt.user", "electron-builder.yml", "electron-builder.json", "forge.config.js", "*.desktop"]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Cross-Platform Desktop (Electron / Tauri / Qt) Intake
|
|
11
|
+
|
|
12
|
+
Do this **before** writing or changing desktop-app code. Don't rely on training data — these
|
|
13
|
+
frameworks change their process and security models, and a desktop app must build, sign, and
|
|
14
|
+
behave correctly across Windows, macOS, and Linux. Confirm against the framework's current docs
|
|
15
|
+
and the project's own pinned versions.
|
|
16
|
+
|
|
17
|
+
## Establish current state first
|
|
18
|
+
|
|
19
|
+
1. **Framework & version in use** — Electron (version, `package.json`), Tauri (`tauri.conf.json`,
|
|
20
|
+
Rust + WebView2/WKWebView), or Qt (version, Widgets vs QML). Match what's there.
|
|
21
|
+
2. **Process & IPC model** — main/renderer (Electron) or core/WebView (Tauri) boundaries, and the
|
|
22
|
+
IPC surface. Keep the boundary explicit; validate everything crossing it.
|
|
23
|
+
3. **Security** — Electron: `contextIsolation` on, `nodeIntegration` off, a `contextBridge`
|
|
24
|
+
preload, and a strict CSP; Tauri: the allowlist/capabilities scoped to the minimum. Never
|
|
25
|
+
expose Node/shell/filesystem broadly to the renderer; treat loaded web content as untrusted.
|
|
26
|
+
4. **Platform integration** — file dialogs, tray, notifications, menus, deep links, and
|
|
27
|
+
permissions differ per OS. Implement and test the ones this change touches on each target.
|
|
28
|
+
5. **Packaging & updates** — code signing (Windows Authenticode, macOS notarization), the
|
|
29
|
+
installer format, and the auto-update channel. A change can silently break signing or updates.
|
|
30
|
+
|
|
31
|
+
## Build & CLI tools
|
|
32
|
+
|
|
33
|
+
- Electron: `npm`/`pnpm` scripts, `electron .`, `electron-builder`/`electron-forge make`, Spectron/
|
|
34
|
+
Playwright for e2e.
|
|
35
|
+
- Tauri: `cargo tauri dev`/`cargo tauri build`, plus the frontend's own build.
|
|
36
|
+
- Qt: `qmake`/`cmake` + `make`/`ninja`, `windeployqt`/`macdeployqt`, `ctest`.
|
|
37
|
+
|
|
38
|
+
## What to record before coding
|
|
39
|
+
|
|
40
|
+
- The framework + version and the OS targets you must support.
|
|
41
|
+
- The IPC surface touched and the security settings (isolation/allowlist/CSP) that must hold.
|
|
42
|
+
- The platform-integration features changed and how they're tested per OS.
|
|
43
|
+
- The build/sign/package commands and tests that prove the change works and still ships.
|
|
44
|
+
|
|
45
|
+
Don't broaden the change beyond the task — no incidental framework upgrades or weakening the
|
|
46
|
+
security model for convenience (see the surgical-changes rule in core-engineering).
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: devops
|
|
3
|
+
title: DevOps / Infrastructure-as-Code / CI-CD Intake
|
|
4
|
+
description: Before changing infrastructure, pipelines, or deployment config, retrieve current provider/tool versions, security and least-privilege guidance, state/secret handling, and the right plan/apply CLI commands — like a senior platform engineer briefing themselves.
|
|
5
|
+
triggers:
|
|
6
|
+
keywords: [devops, terraform, opentofu, kubernetes, helm, kustomize, ansible, pulumi, cloudformation, bicep, gitops, argocd, infrastructure, "infrastructure as code", iac, provisioning, deployment, "ci/cd", cicd, jenkins, "github actions", iam, "least privilege"]
|
|
7
|
+
globs: ["*.tf", "*.tfvars", "Chart.yaml", "kustomization.yaml", "kustomization.yml", "Jenkinsfile", "*.bicep", "playbook.yml", "ansible.cfg", "skaffold.yaml", "argocd*.yaml", "*.hcl"]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# DevOps / Infrastructure-as-Code / CI-CD Intake
|
|
11
|
+
|
|
12
|
+
Do this **before** changing infrastructure, pipelines, or deployment config. Don't rely
|
|
13
|
+
on training data — providers, modules, and runner images change fast, and an insecure or
|
|
14
|
+
deprecated default can be costly. Confirm against the provider/tool's current docs and the
|
|
15
|
+
project's own pinned versions and state.
|
|
16
|
+
|
|
17
|
+
## Establish current state first
|
|
18
|
+
|
|
19
|
+
1. **Tool & provider versions in use** — read the version pins (`required_version`,
|
|
20
|
+
`required_providers`, `Chart.yaml`/`appVersion`, action `uses: @vX`, runner image,
|
|
21
|
+
k8s API versions) and any lockfile (`.terraform.lock.hcl`). Match what's already there.
|
|
22
|
+
2. **State & backends** — where state lives (remote backend, workspace, locking). Never run
|
|
23
|
+
a destructive `apply`/`destroy` blindly; read the plan first and understand what changes.
|
|
24
|
+
3. **Deprecations & breaking changes** — between the pinned versions and current (provider
|
|
25
|
+
resource renames, removed k8s APIs, deprecated action inputs, runner image changes). List
|
|
26
|
+
the ones this change touches and their replacements.
|
|
27
|
+
4. **Security & least privilege** — IAM/roles scoped to the minimum needed, no wildcard
|
|
28
|
+
permissions, secrets from a vault/secret store (never committed), network/ingress locked
|
|
29
|
+
down, and encrypted state/storage. Check the provider's current security guidance.
|
|
30
|
+
5. **Blast radius** — what this change can take down (shared modules, prod vs staging
|
|
31
|
+
workspace, a pipeline that gates deploys). Prefer a dry run / plan and a staged rollout.
|
|
32
|
+
|
|
33
|
+
## Build & CLI tools
|
|
34
|
+
|
|
35
|
+
- `terraform`/`tofu plan|apply`, `kubectl`/`helm`/`kustomize`, `ansible-playbook --check`,
|
|
36
|
+
`pulumi preview`, `aws`/`gcloud`/`az` CLIs — use the project's wrapper/Makefile if present.
|
|
37
|
+
- Validate before applying: `terraform validate`/`fmt`, `helm lint`/`template`, `kubeval`,
|
|
38
|
+
`actionlint`, and a CI dry run.
|
|
39
|
+
|
|
40
|
+
## What to record before coding
|
|
41
|
+
|
|
42
|
+
- The pinned versions and provider/module sources you will use.
|
|
43
|
+
- Deprecated resources/APIs to avoid and their replacements, with migration steps.
|
|
44
|
+
- The plan/preview output and the blast radius, plus how you'll roll back.
|
|
45
|
+
- The validate/plan commands that prove the change is safe before apply.
|
|
46
|
+
|
|
47
|
+
Don't broaden the change beyond the task — no incidental provider upgrades or touching
|
|
48
|
+
unrelated modules/environments (see the surgical-changes rule in core-engineering).
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: game-dev
|
|
3
|
+
title: Game Development (Unity / Unreal / Godot) Intake
|
|
4
|
+
description: Before changing game code, retrieve current engine versions, the frame-loop and performance budget, asset/scene conventions, and the right build/play CLI commands — like a senior game engineer briefing themselves on the engine and project.
|
|
5
|
+
triggers:
|
|
6
|
+
keywords: [unity, unreal, "unreal engine", godot, gameplay, gamedev, "game engine", "game loop", shader, hlsl, glsl, ecs, dots, "frame rate", physics, collider, gdscript]
|
|
7
|
+
globs: ["*.unity", "*.uproject", "*.uplugin", "project.godot", "*.gd", "*.tscn", "*.tres", "Assets", "ProjectSettings"]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Game Development (Unity / Unreal / Godot) Intake
|
|
11
|
+
|
|
12
|
+
Do this **before** writing or changing game code. Don't rely on training data — engine APIs
|
|
13
|
+
and recommended patterns change between major versions, and gameplay code runs every frame so
|
|
14
|
+
small mistakes show up as stutter or crashes. Confirm against the engine's current docs and the
|
|
15
|
+
project's own version and conventions.
|
|
16
|
+
|
|
17
|
+
## Establish current state first
|
|
18
|
+
|
|
19
|
+
1. **Engine & version in use** — Unity (`ProjectSettings/ProjectVersion.txt`, render pipeline
|
|
20
|
+
URP/HDRP/Built-in, input system), Unreal (`.uproject` engine association, Blueprint vs C++),
|
|
21
|
+
or Godot (`project.godot`, Godot 3 vs 4, GDScript vs C#/GDExtension). Match it exactly.
|
|
22
|
+
2. **The frame loop & budget** — what runs per-frame (`Update`/`Tick`/`_process`) vs fixed-step
|
|
23
|
+
physics (`FixedUpdate`/`_physics_process`). Keep per-frame work cheap; respect the target
|
|
24
|
+
frame rate and platform budget (mobile/console/VR are tighter).
|
|
25
|
+
3. **Allocations & GC** — avoid per-frame allocations (no `new`/LINQ in `Update`, pool objects);
|
|
26
|
+
GC spikes cause hitches. In Unreal, mind UObject lifetime/GC and `TWeakObjectPtr`.
|
|
27
|
+
4. **Scenes, prefabs & assets** — follow the project's scene/prefab/asset layout; serialized
|
|
28
|
+
fields and `.meta`/GUID references are easy to break. Don't reformat scene/asset files by hand.
|
|
29
|
+
5. **Determinism & netcode** — if gameplay is networked or replay-based, keep simulation
|
|
30
|
+
deterministic and authority/replication correct.
|
|
31
|
+
|
|
32
|
+
## Build & CLI tools
|
|
33
|
+
|
|
34
|
+
- Unity: batch mode `Unity -batchmode -runTests`/`-buildTarget`, the Test Runner, the Profiler.
|
|
35
|
+
- Unreal: `UnrealBuildTool`/`RunUAT BuildCookRun`, Automation tests, Unreal Insights.
|
|
36
|
+
- Godot: `godot --headless --export-release`, `godot --headless --run-tests` / GUT.
|
|
37
|
+
|
|
38
|
+
## What to record before coding
|
|
39
|
+
|
|
40
|
+
- The engine + version, render pipeline / scripting backend, and target platform budget.
|
|
41
|
+
- The per-frame vs fixed-step work the change adds, and how you keep it allocation-light.
|
|
42
|
+
- The scenes/prefabs/assets touched and any serialized references at risk.
|
|
43
|
+
- The build/play/test commands (and a profiler check) that prove performance and correctness.
|
|
44
|
+
|
|
45
|
+
Don't broaden the change beyond the task — no incidental engine upgrades or scene-wide edits
|
|
46
|
+
(see the surgical-changes rule in core-engineering).
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ios
|
|
3
|
+
title: iOS / Apple Platform Development Intake
|
|
4
|
+
description: Before writing iOS/macOS code, retrieve current Swift/SwiftUI/Xcode versions, deployment targets, deprecations, recommended frameworks, and the right CLI/build tools — like a senior Apple-platform engineer.
|
|
5
|
+
triggers:
|
|
6
|
+
keywords: [ios, ipados, macos, swift, swiftui, uikit, xcode, cocoapods, spm, swiftpm, combine]
|
|
7
|
+
globs: ["*.swift", "*.xcodeproj", "*.xcworkspace", "Podfile", "Package.swift", "*.entitlements", "Info.plist"]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# iOS / Apple Platform Development Intake
|
|
11
|
+
|
|
12
|
+
Do this **before** writing or changing Swift/iOS code. Confirm against
|
|
13
|
+
`developer.apple.com`, the Xcode/Swift release notes, and the project's own settings —
|
|
14
|
+
Apple deprecates APIs aggressively and gates features on OS version.
|
|
15
|
+
|
|
16
|
+
## Establish current state first
|
|
17
|
+
|
|
18
|
+
1. **Toolchain & targets** — read the Xcode project / `Package.swift` / `Podfile`:
|
|
19
|
+
Swift language version, Xcode version, iOS/macOS **deployment target**, and the
|
|
20
|
+
dependency manager (Swift Package Manager vs CocoaPods — prefer SPM for new work).
|
|
21
|
+
2. **Latest OS & SDK** — the current iOS/macOS release, its SDK, and notable
|
|
22
|
+
behavior/privacy changes (App Tracking Transparency, privacy manifests, required
|
|
23
|
+
reason APIs). Note what gates this task.
|
|
24
|
+
3. **Deprecations & availability** — APIs deprecated or unavailable below the
|
|
25
|
+
deployment target. Use `@available` / `if #available` correctly rather than
|
|
26
|
+
assuming an API exists. Common shifts: UIKit → SwiftUI patterns, `NSUserActivity`,
|
|
27
|
+
completion handlers → `async/await`, Combine → Swift Concurrency / Observation.
|
|
28
|
+
4. **Recommended frameworks** — SwiftUI (+ Observation `@Observable`), Swift
|
|
29
|
+
Concurrency (`async/await`, actors), SwiftData vs Core Data, the current navigation
|
|
30
|
+
API. Confirm the recommended approach for the deployment target.
|
|
31
|
+
5. **Guidelines** — Human Interface Guidelines, accessibility (Dynamic Type,
|
|
32
|
+
VoiceOver), and App Store / privacy requirements relevant to the change.
|
|
33
|
+
|
|
34
|
+
## Build & CLI tools
|
|
35
|
+
|
|
36
|
+
- `xcodebuild` for builds/tests/archives; `xcrun simctl` for simulators.
|
|
37
|
+
- `swift build` / `swift test` for SwiftPM targets; `swiftformat`/`swiftlint` if configured.
|
|
38
|
+
- Instruments for profiling.
|
|
39
|
+
|
|
40
|
+
## What to record before coding
|
|
41
|
+
|
|
42
|
+
- Swift version, deployment target, and dependency-manager choice.
|
|
43
|
+
- Deprecated/unavailable APIs to avoid and their `@available`-guarded replacements.
|
|
44
|
+
- The build/test commands you will run (`xcodebuild test -scheme … -destination …`,
|
|
45
|
+
or `swift test`) so the change is verifiable.
|
|
46
|
+
|
|
47
|
+
Match the paradigm of the file you're editing (UIKit vs SwiftUI); don't rewrite
|
|
48
|
+
unrelated screens as a side effect.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mobile-cross-platform
|
|
3
|
+
title: Cross-Platform Mobile (Flutter / React Native) Intake
|
|
4
|
+
description: Before changing Flutter or React Native code, retrieve current SDK/framework versions, platform-channel and native-module guidance, deprecations, and the right build/run CLI commands for both iOS and Android — like a senior cross-platform mobile engineer briefing themselves.
|
|
5
|
+
triggers:
|
|
6
|
+
keywords: [flutter, dart, "react native", "react-native", expo, "cross-platform mobile", cupertino]
|
|
7
|
+
globs: ["pubspec.yaml", "pubspec.lock", "*.dart", "metro.config.js", "app.config.js", "app.config.ts", "react-native.config.js", "expo.json"]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Cross-Platform Mobile (Flutter / React Native) Intake
|
|
11
|
+
|
|
12
|
+
Do this **before** writing or changing Flutter/React Native code. Don't rely on training
|
|
13
|
+
data — these frameworks and their native toolchains move quickly, and a change that builds
|
|
14
|
+
on one platform can break the other. Confirm against the framework's current docs and the
|
|
15
|
+
project's own pinned versions.
|
|
16
|
+
|
|
17
|
+
## Establish current state first
|
|
18
|
+
|
|
19
|
+
1. **Framework & SDK versions in use** — Flutter/Dart SDK from `pubspec.yaml` and
|
|
20
|
+
`.fvm`/`flutter --version`; React Native / Expo from `package.json` and the RN/Expo release
|
|
21
|
+
notes. Note the JS engine (Hermes) and architecture (new arch / Fabric / TurboModules).
|
|
22
|
+
2. **Both native platforms** — iOS (CocoaPods/SPM, min iOS, Xcode) and Android (Gradle/AGP,
|
|
23
|
+
min/target SDK). A dependency or native change must build and run on **both**.
|
|
24
|
+
3. **Deprecations & breaking changes** — between the pinned versions and current (Flutter API
|
|
25
|
+
removals, RN bridge → JSI/TurboModules, deprecated Expo modules). List what this change touches.
|
|
26
|
+
4. **State & navigation** — match the project's existing approach (Riverpod/Bloc/Provider for
|
|
27
|
+
Flutter; Redux/Zustand/Context + React Navigation/Expo Router for RN); don't introduce a new one.
|
|
28
|
+
5. **Native interop** — if the change needs platform code, use the current channel/module API
|
|
29
|
+
(Flutter platform channels / Pigeon; RN TurboModules/native modules) and implement both sides.
|
|
30
|
+
|
|
31
|
+
## Build & CLI tools
|
|
32
|
+
|
|
33
|
+
- Flutter: `flutter pub get`, `flutter run`, `flutter build apk|ios`, `flutter test`,
|
|
34
|
+
`flutter analyze`, `dart format`.
|
|
35
|
+
- React Native / Expo: `npm`/`yarn`/`pnpm`, `npx react-native run-android|run-ios`,
|
|
36
|
+
`pod install` (iOS), `npx expo start`, `eas build`, `npm test`.
|
|
37
|
+
|
|
38
|
+
## What to record before coding
|
|
39
|
+
|
|
40
|
+
- The framework/SDK versions and the iOS/Android minimums you must support.
|
|
41
|
+
- Deprecated APIs to avoid and their modern replacements, with migration steps.
|
|
42
|
+
- The state/navigation libraries already in use, and any native-module work needed on both sides.
|
|
43
|
+
- The build/test/analyze commands you will run on both platforms to prove the change works.
|
|
44
|
+
|
|
45
|
+
If the project mixes platform-specific code, match the file you're editing; don't migrate
|
|
46
|
+
unrelated screens as a side effect (see the surgical-changes rule in core-engineering).
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: security
|
|
3
|
+
title: Application Security / Secure Coding Intake
|
|
4
|
+
description: Before writing security-sensitive code or assessing a vulnerability, retrieve current guidance for the relevant class (injection, authn/z, crypto, deserialization), the project's existing controls, and the right scanning/test commands — like a senior application-security engineer briefing themselves.
|
|
5
|
+
triggers:
|
|
6
|
+
keywords: [security, vulnerability, "secure coding", hardening, "security audit", pentest, "penetration test", owasp, xss, csrf, ssrf, "sql injection", sqli, rce, deserialization, "path traversal", cryptography, encryption, "threat model", sast, dast, cve, sandbox, "least privilege", "input validation"]
|
|
7
|
+
globs: [".semgrep.yml", ".semgrep.yaml", "bandit.yaml", ".bandit", "*.nuclei.yaml", "trivy.yaml", ".snyk"]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Application Security / Secure Coding Intake
|
|
11
|
+
|
|
12
|
+
Do this **before** writing security-sensitive code or judging a vulnerability. Don't rely on
|
|
13
|
+
training data — attack techniques and recommended mitigations evolve, and a plausible-looking
|
|
14
|
+
fix can be incomplete or introduce a new hole. Confirm against current guidance (OWASP, the
|
|
15
|
+
framework's security docs, the relevant CVE/advisory) and the project's existing controls.
|
|
16
|
+
|
|
17
|
+
## Establish current state first
|
|
18
|
+
|
|
19
|
+
1. **Trust boundaries & data flow** — where untrusted input enters and where it reaches a sink
|
|
20
|
+
(DB, shell, filesystem, deserializer, template, HTTP). Map the path this change touches.
|
|
21
|
+
2. **Vulnerability class & correct mitigation** — identify the class precisely and use the
|
|
22
|
+
*current* canonical defense: parameterized queries (not escaping) for SQLi; context-aware
|
|
23
|
+
output encoding for XSS; allow-lists + canonicalization for path/SSRF; safe deserializers;
|
|
24
|
+
constant-time comparison for secrets. Avoid blacklist/regex "sanitizers."
|
|
25
|
+
3. **AuthN / AuthZ** — every new entry point authenticates and authorizes (object-level too —
|
|
26
|
+
no IDOR); sessions/tokens follow the project's scheme; deny by default.
|
|
27
|
+
4. **Secrets & crypto** — secrets from a vault/env, never committed or logged; use vetted
|
|
28
|
+
libraries and current algorithms/parameters (no home-rolled crypto, no MD5/SHA1 for security).
|
|
29
|
+
5. **Dependencies & config** — check for known-vulnerable dependencies and insecure defaults
|
|
30
|
+
(CORS, headers, TLS, file permissions). Note anything in scope.
|
|
31
|
+
|
|
32
|
+
## Build & CLI tools
|
|
33
|
+
|
|
34
|
+
- Static/secret scanning: `semgrep`, `bandit` (Python), `gosec`, `npm audit`/`pip-audit`,
|
|
35
|
+
`gitleaks`/`trufflehog`, `trivy`/`grype` for images and deps.
|
|
36
|
+
- Dynamic/dependency: the project's DAST/`snyk`/`nuclei` flow where present.
|
|
37
|
+
- Add or update a test that *proves* the vulnerability is closed (a failing-then-passing case),
|
|
38
|
+
not just that the happy path still works.
|
|
39
|
+
|
|
40
|
+
## What to record before coding
|
|
41
|
+
|
|
42
|
+
- The vulnerability class, the trust boundary, and the exact sink involved.
|
|
43
|
+
- The current canonical mitigation chosen (and why a weaker one was rejected).
|
|
44
|
+
- The authz/secret/crypto requirements the change must satisfy.
|
|
45
|
+
- The scan/test commands and the regression test that prove the issue is fixed.
|
|
46
|
+
|
|
47
|
+
Stay surgical: fix the specific weakness without unrelated refactors, and never weaken an
|
|
48
|
+
existing control as a side effect (see core-engineering).
|