sdd-propose — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited sdd-propose (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.
Create a change directory with all SDD artifacts. Generates artifacts in dependency order: proposal → delta specs → design → tasks.
SPECS_ROOTis resolved by thesddrouter before this skill runs. Replace.specs/with your project's actual specs root in all paths below.
Write the proposal, delta specs, design, and tasks in the voice of a professional technical writer. Prefer ASD-STE100 Simplified Technical English: short sentences, one instruction per sentence, active voice, and one term per concept. Keep identifiers, commands, paths, and RFC 2119 keywords exact.
sdd-translatesdd-derivesdd-applysdd-explore firstsdd-propose.Skip the notice when the user asked for the skill by name or slash command; spelling and spacing need not match. A phrase from this skill's own trigger list is not a name — naming the work is not naming the skill.
Ask the user:
— feature, bugfix, refactor, migration?
user-auth-refresh, payment-retry)— which existing specs are affected?
— capture as one or more user stories (_As a {role}, I want {goal}, so that {value}_); see references/sdd-change-formats.md § 1.1.
Check .specs/NORTH-STAR.md. If it is missing, offer to draft a candidate product north star (a 2–4 sentence elevator pitch) from the README and existing specs for the user to ratify — the change's user stories ladder up to it. Do not invent or finalize it silently; the north star is a product decision the user owns.
Read .specs/specs/ to understand existing baseline specs before generating deltas. If .specs/specs/ is empty or does not exist, generate delta specs using only ADDED sections — all behavior is new.
If the user isn't sure about scope, offer sdd-explore first.
Create .specs/changes/<name>/proposal.md.
See references/sdd-change-formats.md for the proposal format.
Write with the user's input:
NORTH-STAR.md (see references/sdd-change-formats.md § 1.1)Present to user and confirm before continuing.
If .specs/.sdd/schema-config.yaml exists:
.specs/changes/<name>/schemas/before/.## Schema Impact section to proposal.md describing expected schema changes — new endpoints, new or modified models, removed operations.See references/sdd-schema.md § 2 for the format.
.specs/changes/<name>/schemas/expected.md with a prose description of the expected schema diff. sdd-verify uses this to cross-check actual changes at verify time.If no schema config exists but .specs/schemas/ contains files, emit a visible warning:
WARNING: Found schema artifacts in.specs/schemas/but no.specs/.sdd/schema-config.yaml. Schema snapshots will not be captured for this change. Runsdd-deriveor create the config manually to enable schema tracking.
If no schema config exists and .specs/schemas/ is empty or absent, skip silently.
Create .specs/changes/<name>/specs/<capability>/spec.md for each affected capability.
Order capabilities by build dependency — contract-defining and foundation capabilities before consumers — and use the same order in proposal.md's Scope list, in design.md's Decisions and Architecture, and in tasks.md's task groups. See references/sdd-change-formats.md § 4 for the principle and worked example.
Read `references/sdd-spec-formats.md` § 1 before writing any requirement. It defines what a requirement is (contract shapes, authoring primitive, artifact separation) and is the primary guidance for this phase.
For each affected capability, ask: what new contract are we adding, changing, or removing? State each requirement as a contract statement (guarantee, invariant, prohibition, precondition-consequence, or observable-state relationship — see § 1.1). Lean toward universal claims where they apply.
For each universal SHALL claim, apply the partition heuristic in references/sdd-spec-formats.md § 1.6: ask whether the claim's input space splits along semantic lines the spec already names (lifecycle states, identity/equivalence, multi-source composition, derived-pair invariants). If yes, write one scenario per partition; if no, a single scenario is fine. Use spec vocabulary only — never partition along code paths or write-sites.
Mechanism thinking is expected here — algorithms, thresholds, strategies, data structures. Park those thoughts in the proposal's ## Approach section as they surface; they formalize in Phase 5 (design.md). Do not put mechanism into the spec itself.
Restate a signature (function, method, endpoint, or command) in spec prose only where its shape is the contract. The shape is the contract when external consumers depend on its names, types, or order (the published-interface test in references/sdd-spec-formats.md § 1.4). Otherwise, state the behavior and leave the signature to the code and design.md. A restated internal signature goes stale on any refactor that keeps the behavior, and the spec then disagrees with code that still meets the contract.
Delta-format rules:
## section heading, then the requirements under it: ## ADDED Requirements, ### Requirement: {Name}, #### Scenario: {Name}.Do not fuse the marker to a requirement heading (## ADDED Requirement: {Name}). sdd-sync strips the marker and keeps the level you gave it, producing a baseline requirement no later change can match by name (references/sdd-spec-formats.md § 4).
sdd-sync replaces it wholesale (references/sdd-spec-formats.md § 4).Note prior behavior in a > Previously: … line. The copy carries any call-path pin the baseline has; check the copied requirement against references/sdd-spec-formats.md § 1.4 and each copied scenario against § 1.5 point 4, and restate a pin as its outcome, so the proposal's approval covers the fix.
Serves: {story-slug} backlink to each requirement, naming the proposal user stories it advances (M:N; references/sdd-change-formats.md § 1.1).The backlink is delta-only and stripped at sync. A requirement that serves no story is a signal of over-engineering — drop it, or add the story that justifies it.
Present specs to user and confirm before continuing.
Create .specs/changes/<name>/design.md.
See references/sdd-change-formats.md for the design format.
Include:
Recorded date or commit SHA.sdd-verify will otherwise flag any SHALL without runnable evidence as CRITICAL, and uses Recorded for provenance checking. See references/sdd-change-formats.md § 2 for the format.
Only include sections with content — omit empty sections.
#### Suggest Formal Verification Where Tests Only Sample
Formal verification is opt-in: suggest it, never start it. Suggest it once, in one short message, when a requirement in this change meets all three conditions:
Past incidents in that area that tests missed are strong evidence.
Name the requirement and the reason each condition holds. Say that formal verification is separate work (a model or a proof, run with the formal-verification skill), not a task in this change.
If the user declines, continue and record nothing. If the user accepts, finish this proposal unchanged; the formal work reads this change's requirements and runs on its own. Every SHALL still needs its evidence-producing task in Phase 6, because a formal result does not replace it.
Present to user and confirm before continuing.
Create .specs/changes/<name>/tasks.md.
See references/sdd-change-formats.md for the tasks format.
Rules:
references/sdd-change-formats.md § 4 — each task must depend only on capabilities built by earlier tasks; never order alphabetically or by order of discussionIf automated evidence is genuinely infeasible, the requirement must appear in design.md § Verification Waivers with a manual evidence reference. sdd-verify enforces this rule.
design.md (deduplication shortcuts, cache fast-paths, retry/fallback branches, idempotency early-returns, merge or composition steps).Each foreseeable write-site needs its own paired evidence-producing test task — one test on the canonical path is not evidence for the shortcut, retry, or merge. Write-sites that emerge later during implementation are handled by sdd-apply's write-site emergence rule and sdd-verify's write-site enumeration; covering the foreseeable ones here keeps verify from flagging them.
.specs/changes/<name>/proposal.md has Intent, User Stories, Scope (in/out), ApproachNORTH-STAR.md## heading holding ### Requirement: entriesscripts/check_spec_format.py passes on every delta spec: uv run --quiet <skill_root>/scripts/check_spec_format.py .specs/changes/<name>/specs/references/sdd-spec-formats.md § 1)references/sdd-spec-formats.md § 1.6 — when a positive signal fires, scenarios cover each partitiondesign.md or the proposal's Approach, not in spec textreferences/sdd-spec-formats.md § 1.4).Each THEN line checks only what its requirement promises (§ 1.5). This reaches named identifiers only; mechanism described in prose (an internal component, an internal object being created) still needs the refactor test.
Serves: backlink to a proposal story, or is deliberately left unserved and surfaced as suchdesign.md has at least one Decision with rationaletasks.md has atomic tasks, and tasks/groups are ordered by build dependency per references/sdd-change-formats.md § 4 — no task depends on a capability not yet built by an earlier taskproposal.md Scope, design.md, and tasks.md groupsdesign.md § Verification Waivers with a manual evidence referencedesign.md (canonical path plus any alternative paths the design names — shortcuts, retries, merges) is paired with its own evidence-producing test task.specs/specs/ (baseline specs untouched)Skip this phase if no other active change exists.
Compare the new change with every other active change (references/sdd-change-formats.md § 6):
Read the other change's proposal, design, and tasks, not only its delta specs. A capability or rework dependency often shares no requirement.
Present the findings to the user with a recommended order and the reason for it. When the user confirms, add the new change to .specs/changes/ORDER.md, or create the file from the template in § 6.3 if a dependency or shared requirement exists and the file does not. If the file exists and the new change has no dependency and no shared requirement, add it under ## Independent.
After the user approves the artifacts, commit .specs/changes/<name>/, plus .specs/changes/ORDER.md if Phase 7a changed it, and nothing else. Ask before committing, and use the project's commit conventions. Draft the message with the commit-message skill if it is available.
This commit is the proposal commit. sdd-apply does not start until it exists, and the spec-drift check (references/sdd-change-formats.md § 5.5) diffs every later spec edit against it. Without it, no one can tell which spec text the user approved and which text changed during implementation.
.specs/changes/<name>/proposal.md.specs/changes/<name>/specs/<capability>/spec.md per affected capability (delta format).specs/changes/<name>/design.md.specs/changes/<name>/tasks.md.specs/changes/ORDER.md, created or updated when other active changes exist (Phase 7a)Summary: change name, capabilities affected, task count, proposal commit SHA.
## ADDED Requirement: {Name} once per requirement, instead of one ## ADDED Requirements section holding ### Requirement: entriesreferences/sdd-spec-formats.md § 1.5)references/sdd-spec-formats.md § 1.6 (lifecycle, identity, multi-source composition, derived-pair) — verify will flag this as partition-incomplete coveragedesign.md names alternative paths (shortcuts, retries, merges) — each foreseeable write-site needs its own paired test task, not just the canonical onereferences/sdd-change-formats.md § 4 so the implementer never builds in anticipation of a missing capabilityORDER.md with itreferences/sdd-spec-formats.md — baseline spec, delta spec, scenario formatsreferences/sdd-change-formats.md — proposal, design, tasks, and ORDER.md formatsreferences/sdd-schema.md — schema artifacts and lifecycle policyscripts/check_spec_format.py — checks each delta spec's heading structure; exits non-zero on a malformed spec~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.