agentleFS
portable-genaiportable-genai/nl2sql-analytics/.agents/skills/vertical-slice-delivery/SKILL.md

vertical-slice-delivery

Skill0 starsChanged 49 days agoApache-2.0View on GitHub

Deliver a comprehensive repo feature-by-feature as isolated vertical slices: analyze what's missing, use AskUserQuestion to let the user choose scope, implement ONE slice end-to-end (model -> service -> orchestrator -> output view -> demo -> docs -> tests), get the gate green, open a PR per slice, watch CI, and merge when green, then repeat. Use when building out a multi-feature system over many iterations, or when the user says "what else is missing", "add the next feature", or "continue".

2 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

7 rules. About 0 are common, 3 are distinctive, and 4 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈3

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 4

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    When asked "what's missing" or "what next", first do a real gap analysis against the domain's standards/best-practices and the current code.

    line 24
  2. Distinctive:

    Keep slices small and independent.

    line 57
  3. Very specific:

    Run the full gate (ruff check, ruff format --check, mypy, pytest -m 'not integration', python eval/run_eval.py) and fix until clean.

    line 62
  4. Very specific:

    Run the iterative-code-review pass (independent reviewer -> fix -> re-verify until converged) on the slice.

    line 68
  5. Distinctive:

    Commit with a clear message: what + why + the gate result.

    line 74
  6. Distinctive:

    After merge, sync main and start the next slice.

    line 81
  7. Very specific:

    Docs style: no em-dashes in .md or .html files, commit messages, or PR bodies.

    line 119

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Vertical-slice delivery

How to grow a repo into something comprehensive without a big-bang rewrite: each feature is one vertical slice that goes all the way from domain model to a demoable output, ships as its own green PR, and leaves main releasable at every step. This is the delivery loop that complements the ports-and-adapters-repo architecture and the deterministic-domain-service pattern.

The loop

1. Analyze, then let the user decide scope

When asked "what's missing" or "what next", first do a real gap analysis against the domain's standards/best-practices and the current code. Then use the AskUserQuestion tool to turn your analysis into concrete choices; do not silently pick. Good questions:

  • Which feature(s) to build next (offer the analyzed options; allow multi-select).
  • A consequential design fork (e.g. "hard-block vs soft-escalate?", "live calls vs synced snapshot?", "scheduled pull vs event-driven?").
  • Reference-data / integration approach where it materially changes the design.

Investigate any sub-question the user raises (e.g. "check if X can be synced") with real sources before re-asking. Once you have clarity, implement.

2. Implement ONE slice, end to end

A slice is not done until every layer is touched:

  1. Domain model: new frozen dataclasses in models.py; add the new optional field to the case/result aggregate and the output view.
  2. Deterministic service: build it with the deterministic-domain-service skill.
  3. Orchestrator wiring: an attach_<feature> method; carry the field through analyze.
  4. Output view + renderer: a new panel (use the audit-first-demo skill).
  5. Demo: wire the feature into the synthetic demo script so it's runnable.
  6. Docs: a new design-doc section and a DEMO section; if the slice adds a port, add a row (named) to the architecture port table and a binding to settings.yaml, and update the COMPLIANCE.md control map if it adds or changes a control. Do NOT bump a hardcoded count anywhere ("the N ports", "13 Protocols"): those rot silently as slices land. The ports/__init__.py __all__ plus the parity test are the source of truth for the count; docs enumerate by name (one row per port), never by number. Also update the scripts README if scripts changed. Write the docs, the commit message, and the PR body in plain prose (docs style at the foot of this skill).
  7. Tests: unit tests for the service (the spec); update contract tests if a port was added.

Keep slices small and independent. If a feature is big, split it into sub-slices that each ship green.

3. Get the gate green locally

Run the full gate (ruff check, ruff format --check, mypy, pytest -m 'not integration', python eval/run_eval.py) and fix until clean. Pin the linter version so local matches CI. Re-render the demo / re-take screenshots if the output changed.

4. Review before you ship

Run the iterative-code-review pass (independent reviewer -> fix -> re-verify until converged) on the slice. Cheap, and it catches the edge cases tests miss.

5. One PR per slice; watch CI; merge when green

  • Branch per slice (e.g. feat/<slice-name>), never push straight to the default branch.
  • Commit with a clear message: what + why + the gate result. Honor the user's authorship preferences exactly (e.g. single author, no co-author trailers, if they asked).
  • Push, open a PR ready for review (not draft), with a body that lists the changes, a table of any new finding/trigger kinds, and the gate status.
  • Watch CI. Webhooks deliver failures but NOT success, so after pushing, re-check CI status explicitly (or arm a timed self check-in) and merge (squash) when all checks are green, per the user's standing instruction.
  • After merge, sync main and start the next slice.

6. Repeat until the selected scope is done

Track the selected features as a checklist; report status after each slice (done / in-flight / pending). Surface housekeeping that needs the user (e.g. deleting merged remote branches if the tooling can't).

Why slices (not one mega-PR)

  • Each PR is small enough to review properly and revert cleanly.
  • main is always green and demoable.
  • The user steers scope between slices instead of after a huge diff.
  • The architecture (pure domain + ports) makes slices genuinely independent: a new service
    • a new optional field rarely touches existing code.

Worked example (any domain)

Performance-marketing repo, after the scaffold:

  1. Analyze gaps -> AskUserQuestion: "Which next? [attribution view] [bid optimizer] [budget pacing] [anomaly alerts]" (multi-select) + "Apply changes automatically or escalate for approval?"
  2. User picks pacing + anomaly alerts, soft-escalate.
  3. Slice 1 = budget-pacing service (deterministic) -> orchestrator -> pacing panel -> demo -> docs -> tests -> gate -> review -> PR -> merge.
  4. Slice 2 = anomaly-alert service, same loop.
  5. Report: pacing ✅ merged, anomaly ✅ merged; suggest next candidates.

Checklist per slice

  • Gap analysis done; scope chosen via AskUserQuestion (not silently).
  • All layers touched: model, service, orchestrator, view/renderer, demo, docs, tests.
  • Full gate green locally; demo/screenshots refreshed.
  • Iterative code review converged.
  • Branch per slice; commit message honors authorship prefs.
  • PR ready-for-review with a descriptive body; CI watched; merged when green.
  • Status reported; next candidates surfaced.

Docs style: no em-dashes in .md or .html files, commit messages, or PR bodies. See skills/README.md.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.