state-manager-761998 — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited state-manager-761998 (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
.arch/state.jsonThis file is the single source of truth for project progress. ALWAYS read it before responding to any architecture query. NEVER rely on conversation memory for phase state. ALWAYS update it after every state change.
current_phase to know where we aresub_phase and individual acceptance flags (pattern_accepted, components_overview_accepted, cross_cutting_accepted)components object for per-component statusreopens.count and reopens.max for reopen availabilityExample – read state (pseudocode; use the Read tool, not code execution):
state = Read(".arch/state.json") → parse JSON
current_phase = state["current_phase"]not_started → evaluation (when /analyze-prd runs)
evaluation → methodology (when Phase 1 is accepted)
methodology → components (when Phase 2 is fully accepted: pattern + components + cross-cutting)
components → finalization (when ALL components accepted)Backward transitions are ONLY allowed via /reopen (max 2 per project).
pattern → components_overview → cross_cuttingEach sub-phase is accepted independently via /accept. All three must be accepted for Phase 2 to be complete.
pending → in_progress (when /design-component starts)
in_progress → awaiting_acceptance (when design is presented)
awaiting_acceptance → accepted (when user accepts)
awaiting_acceptance → in_progress (when user refines)
needs-review → in_progress (after a reopen cascades)When updating state.json:
decision_count if a decision was madeExample – validate and write state (pseudocode; use Read/Write tools, not code execution):
VALID_TRANSITIONS = {
"not_started" → ["evaluation"],
"evaluation" → ["methodology"],
"methodology" → ["components"],
"components" → ["finalization"],
}
state = Read(".arch/state.json") → parse JSON
current = state["current_phase"]
if new_phase not in VALID_TRANSITIONS[current]:
# Invalid transition: do NOT write state.
# Report the error to the user and stop.
raise error: "Invalid transition: '{current}' → '{new_phase}'"
state["current_phase"] = new_phase
state["decision_count"] += 1
Write(".arch/state.json", JSON.stringify(state, indent=2))If validation fails:
state.json./reopen (subject to reopens.count < reopens.max).decisions.md under category Process if the invalid attempt was user-initiated..arch/decisions.mdAppend-only file. Never edit previous entries. Format:
### [DEC-NNN] Phase X | Category
- **Decision:** [What was decided]
- **Rationale:** [Why this choice]
- **Alternatives:** [What else was considered]
- **Trade-offs:** [What was sacrificed]
- **Risk:** [Any residual risk]
- **Supersedes:** [DEC-NNN — only if this replaces a previous decision]
- **References:** [FR-NNN, DEC-NNN — only if tracing to requirements or cross-cutting decisions]
- **Date:** [ISO timestamp]Categories: Requirements | Pattern | Technology | Integration | Security | Infrastructure | Process | Reopen
Supersedes and References are optional. Omit the line entirely when not applicable.
Supersedes — Use when a decision replaces a previous one:
/reopen creates a new decision that supersedes the original acceptance decision for the reopened target/alternative creates a new decision that supersedes the previous proposal's decision**Supersedes:** DEC-003 (single reference) or **Supersedes:** DEC-003, DEC-007 (multiple)References — Use when a decision traces to requirements or earlier decisions:
**References:** FR-001, FR-003, DEC-005Example — supersession (reopen scenario):
### [DEC-012] Phase 2A | Reopen
- **Decision:** Reopened architecture pattern selection
- **Rationale:** New compliance requirement invalidates serverless approach
- **Alternatives:** Could have added compliance layer on top of existing pattern
- **Trade-offs:** Progress reset on 5 items
- **Risk:** Reopens remaining: 1 of 2
- **Supersedes:** DEC-004
- **Date:** 2026-03-11T14:00:00ZExample — traceability (component design):
### [DEC-015] Phase 3 | Technology
- **Decision:** Selected PostgreSQL 16 for order-service data store
- **Rationale:** ACID compliance required for financial transactions; team has production experience
- **Alternatives:** MongoDB 7 (flexible schema but lacks native ACID), CockroachDB 24 (distributed but overkill)
- **Trade-offs:** Schema migrations required; less flexibility than document store
- **Risk:** Single-node bottleneck if order volume exceeds 50K TPS
- **References:** FR-003, FR-012, DEC-008, DEC-009
- **Date:** 2026-03-11T15:30:00ZExample – append a decision entry (pseudocode; use the Edit/Write tool to append, not code execution):
entry = """
### [DEC-001] Phase 1 | Pattern
- **Decision:** Adopt hexagonal architecture
- **Rationale:** Decouples domain from infrastructure
- **Alternatives:** Layered monolith
- **Trade-offs:** Higher initial complexity
- **Risk:** Team familiarity required
- **Date:** 2024-06-01T10:00:00Z
"""
Append entry to ".arch/decisions.md" using Write toolLog a decision entry for:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.