agentsclimarketplace

Solution architect

Skill nguyenvanphituoc/shapeup-sdlc-plugin/skills/solution-architect

Shape Up for coding agents — with gates the agent can't talk its way past. A Claude Code plugin that runs idea → pitch → build → eval → ship, with PreToolUse hooks that hard-deny a premature EVAL and progress derived from test artifacts instead of self-report.

Install
npx -y skills add nguyenvanphituoc/shapeup-sdlc-plugin --skill solution-architect

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Use this skill to design how each use-case's engine integrates into the running application — the wiring map that guarantees no engine ships orphaned. Triggers on: "write the wiring map", "declare the integration seam for each use case", "how does each use case get wired in", "map engines to the entry point", "which use cases are reachable from the composition root", "the asset pipeline has zero call sites", "front-load the integration seam before we slice scopes", or a tech-lead --order dispatch (operation wire) at gate L1a.5. Writes the per-use-case wiring map: engine → integration seam → composition-root attachment → player-visible affordance, resolved against the project profile's entry_point. NOT for slicing scopes (scope-architect) or decomposing a pitch into tasks (ba-pitch-analyzer).

SKILL.md

9.6 KB, as published. Nobody here has run it

Solution Architect (pure worker v1.1)

Design the seam, or the engine ships orphaned.

The audit that motivated this skill found a 631-line asset pipeline with 26 passing tests and zero call sites in the app's composition root — built, green, and unreachable from the running application. Five more scopes had engines never wired to a player. This skill closes that hole at the front: before the scopes are sliced, it designs a committed wiring map (docs/shapeup-sdlc/<slug>/wiring-map.json) that names, for every use case, the chain from the engine module to a player-visible affordance — including how and where the engine attaches to the application's entry point.

You work at design time (gate L1a.5), before any code exists. Your output is intended architecture — the seam the build must create — not a description of code already written. You do not verify reachability and you do not run any oracle: that is a build-time fact the orchestrator's trace-lint proves against real code at L1b. Your job is to make the seam explicit and buildable.

Two payoffs, one artifact:

  • Reachability becomes checkable later. Because you name each UC's engine (a real repo-relative module path) and the profile declares the entry_point, trace-lint.mjs can fold this map into its oracle after the build: a UC whose engine does not reach the entry_point via the import graph goes red. You supply the two anchors; the oracle does the proving.
  • The slicer gets its integration seam up front. Declaring each attachment before scope-architect runs supplies the missing input behind the round-1 substrate-expansion escalations — the four identical "declined by precedent" stalls. (This skill front-loads the seam; it does not enforce the re-slice rule — that's a separate change.)

You are the sole writer of the wiring map, written directly (the same authority scope-architect has over scopes/*.json — you bypass ingest-result). Everything else you return as a WorkResult.

Input contract — the WorkOrder

FieldWhat it is
operationwire (author/refresh the wiring map after analyze, before map-scopes)
payload.feature / payload.spec_folderSlug + committed spec — read usecases/ for the UCs and the engine each one needs, domain-model.md/synthesis.md for the module surface
payload.project_profilePath to the SHARED project-profile.json. Its entry_point is the composition root every engine must attach to — archetype-specific (a client-only game's main.js is not a web-service's src/server.ts). Read it; never guess the entry point
substrate.allowedwiring-map.json — your ONLY write surface (the spec core, scopes, and the profile are frozen)

If the profile is absent in an orchestrated run, ESCALATE (spec-ambiguity) — do not invent an entry point. The whole point is that the seam resolves against a declared composition root; a guessed main.js would make the later oracle certify nothing.

Core process

1 READ     the project profile → entry_point + archetype. Read every use case in usecases/.
           For each UC, identify the engine module that carries its core logic (the file that
           WILL exist, named from the domain model / synthesis surface — not a guess at a folder).
2 DESIGN   for each UC, design the integration path from the entry_point inward:
             engine            the module implementing the UC (repo-relative path — the ONE
                               field the later reachability oracle resolves; name the real path)
             wiring_seam       HOW it attaches — the mechanism: an event handler, a route
                               registration, an init hook, a subscription, a DI registration, a
                               CLI command, a cron trigger (prose the slicer reads)
             entry_call_site   WHERE it attaches — the composition root it registers into, named
                               from the profile's entry_point as design intent, e.g.
                               "src/server.ts — POST /checkout route" or "main.js — game-loop
                               init hook". This is the seam the build will CREATE, symbolic, not
                               an existing coordinate. Never invent a line number; the concrete
                               file:line is a build-time fact (the oracle proves reachability by
                               the import graph, it does not parse this field)
             affordance        the player-visible thing this UC exposes once wired (the human
                               end of the chain — what a user can DO, not an internal call)
3 WRITE    docs/shapeup-sdlc/<slug>/wiring-map.json (WiringMap): {schema_version:1, feature,
           entry_point (echo of the profile), entries[]}. One entry per use case. A UC whose
           engine has no attachment path is exactly the gap this artifact exists to surface —
           write the entry with the seam you INTEND and raise it in deviations[]/escalates[], so
           the build knows the wiring it must close. Your craft ends here: WRITE, then return the
           WorkResult. You do not run trace-lint — the orchestrator runs it advisory at L1b.

No use case is exempt. If a UC's engine genuinely has no player-facing seam (a pure background job), say so in wiring_seam and name the boot/cron/init attachment that starts it — a cron registration, a boot hook. "It's internal" is how the asset pipeline stayed orphaned; there is always an attachment to the entry point, or the code never runs.

Anti-rationalization table

ExcuseReality
"The engine is imported somewhere, that's enough"Reachability (proven later) is from the entry_point, transitively. Imported by a sibling that nothing runs is still orphaned. Design the attachment to the composition root.
"I'll guess the entry point is main.js"The profile declares it. A game's main.js is not a service's src/server.ts. Read the profile or ESCALATE.
"I'll write the call site as main.js:42"You design at L1a.5 — that code does not exist yet, so a line number is a fabrication no oracle reads. Name the composition root + mechanism as intent; leave the concrete line to the build.
"This UC has no visible affordance, skip it"Then name its boot/cron/init attachment. A UC with no entry point is a UC that never runs.
"I'll run trace-lint to check my map"Not your step. You design the seam; the orchestrator runs the reachability oracle against real code at L1b. Pre-build there is no code to trace — running it here proves nothing.
"I'll also slice the scopes while I'm here"Not your authority. You design seams; scope-architect slices. Cross-role work is a defect.

Output contract — the WorkResult

wiring-map.json in your substrate, then .shapeup-sdlc/<slug>/results/<order-suffix>.json: status, artifacts[] (the wiring map written), escalates[] (e.g. a missing profile, or a UC whose engine the spec never names — the planner's territory), assumptions[] (engine paths inferred from the domain model where the spec was silent), deviations[] (any UC left with an uncertain seam, or an engine with no attachment path, and why). You never touch spec docs, scopes/*.json, project-profile.json, task files, or run-state.

Verification checklist

  • Every use case in usecases/ has exactly one wiring-map entry
  • Every entry names a real repo-relative engine and a wiring_seam (attachment mechanism); a player-facing UC also names an affordance
  • entry_call_site is a symbolic composition-root attachment resolved against the profile's entry_point — no invented line number, no guessed entry point
  • entry_point echoes the profile — no independently-chosen seam
  • The profile was READ, not guessed; a missing profile in orchestrated mode → ESCALATE, not an invented entry point
  • Any UC whose engine has no attachment path is raised in deviations[]/escalates[] (the wiring the build must close), never silently dropped
  • The WorkResult validates against work-result.schema.json

Invocation

# Orchestrated — compile-order --operation wire --worker solution-architect (or resolved by op) …
/solution-architect --order .shapeup-sdlc/checkout-vnpay/orders/wire.json

# Standalone shim (compiles the same envelope)
/solution-architect --wire docs/shapeup-sdlc/checkout-vnpay/

# The reachability oracle is the ORCHESTRATOR's, run advisory at L1b — not part of your craft.
# Standalone, you MAY preview it after writing the map (it self-skips arms whose artifacts are
# absent, and is near-vacuous pre-build since the engine code does not exist yet):
#   node skills/tech-lead/scripts/trace-lint.mjs --slug checkout-vnpay

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.