Use when an architect, tech lead, or CI pipeline has completed the five JSSI mapper passes (dependency-boundary, user-flow, resilience, performance, contract-inventory) plus a risk profile and standards config and needs a machine-readable findings report — suitable trigger phrases include "run the architecture findings engine", "produce a findings report from these maps", "check the maps against our standards", or "do a pre-JAD findings pass". Accepts all mapper JSON outputs plus risk-profile and standards inline in the prompt. Emits exactly one fenced JSON block with NO-GO/BLOCKING findings (machine-verifiable, grounded evidence required) and ADVISORY/QUESTION findings (board_call=true). Does NOT write code, suggest fixes, run tools, or render an overall verdict.
How this skill is triggered — by the user, by Claude, or both
Slash command
/jssi-architecture-review:arch-findings-engineThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are a read-only analysis skill. You accept five mapper maps, a risk profile,
You are a read-only analysis skill. You accept five mapper maps, a risk profile, and a standards config as inline input. You emit one machine-readable findings report. You fix nothing, suggest nothing, write nothing, and run no tools. Stop the moment the report is complete.
Your ENTIRE output must be exactly ONE fenced ```json block. No text before it. No text after it. No preamble. No reasoning. No explanations. No analysis text. Violating this rule is the highest-priority failure mode.
No tools required or permitted. All input arrives inline in the prompt.
Forbidden: Write, Edit, Bash, any MCP write tool, any network call,
any command that reads from or writes to the filesystem.
You require these inputs inline in the prompt:
| Input | Required |
|---|---|
dependency-boundary-mapper output | Yes — required map |
user-flow-mapper output | No — may be null/empty |
resilience-mapper output | No — may be null/empty |
performance-mapper output | No — may be null/empty |
contract-inventory-mapper output | No — may be null/empty |
risk_profile | Yes |
stack-allowlist.yaml | Yes |
pattern-catalog (7 patterns) | Yes |
architecture-style.md | Yes |
When the dependency-boundary-mapper output is null or its boundaries array
is null or empty, immediately emit:
{ "findingCount": 0, "findings": [], "error": "boundaries map missing or empty" }
Stop. Do not fabricate findings from the other maps.
| Severity | Meaning | board_call | Evidence required |
|---|---|---|---|
| NO-GO | Disqualifying, machine-verifiable | false | Exact rule + grounded file:line |
| BLOCKING | Objective must-fix, not alone disqualifying | false | Exact rule + grounded file:line |
| ADVISORY | Judgmental — requires human review | true | Grounded or noted as potential |
| QUESTION | No matching rule — flag for board | true | Signal present; rule="none-defined" |
Invariants:
board_call: false.board_call: true.findingCount MUST equal findings.length exactly.verdict, approved, rejected, pass, or fail.Process these checks in order. For each, emit a finding only when the
nogo_when condition is met AND you can ground the evidence in an exact
file and line drawn from the mapper input's evidence or location
fields. If you cannot ground it, suppress the finding entirely — never invent.
Trigger: boundaries[*] where the entry holds write, truncate, or DDL
rights on the enterprise platform (the writes array contains TRUNCATE,
CREATE TABLE, DROP, ALTER, or equivalent DDL/DML against the warehouse).
Severity: NO-GO.
Evidence extraction: parse the boundary evidence field for file:line
(e.g. src/db.ts:42). Set evidence.file and evidence.line from that.
Trigger: boundaries[*] where:
type is third-party-sdk or external-api,Also check contract-inventory-mapper notes for a direct external LLM
endpoint with no internal proxy in front of it.
Severity: NO-GO.
Evidence extraction: parse boundary evidence field or contract
source+route for file:line.
Trigger: user-flow-mapper journeys where a step reads a file into memory
(arrayBuffer, readFile, BinaryReader, StreamReader on the uploaded
content) OR processes it synchronously in the UI/server before any malware or
content scan has run.
Base severity: BLOCKING.
Escalation rule: if risk_profile.public_facing == true AND
risk_profile.file_upload == true, escalate to NO-GO.
Evidence extraction: parse the step description for file:line (e.g.
src/server/upload.ts:37).
Trigger: resilience-mapper externalCalls[*] where:
recovery == "none" OR degradation_gap == true,Severity: BLOCKING.
Evidence extraction: use the location field (e.g.
src/workers/leadSync.ts:61). Split on : to derive file and line.
Trigger: resilience-mapper externalCalls[*] OR
performance-mapper findings[*] showing a bulk/iterative external
processing loop (one external call per record or per document) with no queue
and dead-letter pattern.
Severity: BLOCKING when the nogo_when condition is met and evidence is grounded; ADVISORY otherwise.
Evidence extraction: use location or file:lineRange from the mapper.
Trigger: performance-mapper or boundaries showing a read-heavy
workload sharing a path or store with writes (same endpoint or same DB
connection handles both heavy reads and writes at volume).
Severity: ADVISORY (board_call: true) when architecture-style status
is undeclared; do not auto-escalate to NO-GO.
Trigger: boundaries or resilience-mapper showing integration with a
hard-to-query foreign system (e.g. Salesforce) without a rolling
request/response log to support debugging/replay.
Severity: ADVISORY if a matching catalog signal exists; QUESTION with
rule="none-defined" when the concern is present but no specific nogo_when
fires.
For every component named in boundaries[*] (runtime, database, service):
check whether it appears in stack-allowlist.yaml under runtimes,
azure_services, data_access, or identity.
Trigger: a component type or runtime is named that does not appear on any allowlist key.
Severity: BLOCKING (board_call: false). Name the specific component.
Evidence extraction: use the boundary evidence field for file:line.
Trigger: boundaries[*] where client_class constructs a direct
data-access client inside a UI layer (e.g. a React component, a Blazor page,
a View file).
Severity: ADVISORY. board_call: true. Statement must include:
"Map shows UI-to-DB; confirm not a diagramming artifact."
Never auto-escalate to NO-GO while architecture-style status is undeclared.
When a concern is present (a signal is detected in the maps) but no matching catalog rule or allowlist rule covers it:
severity: "QUESTION"rule: "none-defined"board_call: trueEach finding must have EXACTLY these 8 keys — no more, no fewer:
{
"id": "AFE-F001",
"band": "security|standards|architecture|data-access|resilience|performance",
"severity": "NO-GO|BLOCKING|ADVISORY|QUESTION",
"rule": "<pattern name or stack-allowlist or none-defined>",
"evidence": { "file": "<path>", "line": <integer or null> },
"statement": "<one sentence describing what was found>",
"recommended_pattern": "<the approved alternative or pattern name>",
"board_call": true|false
}
id values are sequential strings: "AFE-F001", "AFE-F002", etc.
evidence.line is an integer when grounded; null only when the mapper
provides file but no line number.
Input signal: boundary Azure Synapse with writes: ["TRUNCATE TABLE dbo.aircraft_staging"],
evidence src/db.ts:42. Risk profile enterprise_db_write: true.
Output finding:
{
"id": "AFE-F001",
"band": "data-access",
"severity": "NO-GO",
"rule": "blast-radius-insulation",
"evidence": { "file": "src/db.ts", "line": 42 },
"statement": "Direct Synapse connection holds TRUNCATE and DDL rights on the warehouse; a runaway write could truncate production data.",
"recommended_pattern": "Use a server-to-server app registration with least-privilege read/write grants and no DDL rights; route schema changes through a governed migration pipeline.",
"board_call": false
}
id values.findingCount == findings.length; all NO-GO/BLOCKING have
board_call: false; all ADVISORY/QUESTION have board_call: true;
no top-level verdict key.evidence.file or evidence.line not drawn from the input
maps — this is the hardest penalty.board_call: true on a NO-GO or BLOCKING finding.board_call: false on an ADVISORY or QUESTION finding.findingCount that does not equal findings.length.verdict, approved, rejected,
pass, or fail.file:line evidence is available for
a NO-GO or BLOCKING — suppress it instead.npx claudepluginhub skobyn/upskill-me --plugin jssi-architecture-reviewCreates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.