Frame
Generated from workflows/modes/frame.md, the mode contract the HELIX skill loads. Edit that file, not this page.
Use for creating or refining product vision, PRD, feature specs, and user stories.
- Read existing Frame artifacts first.
- Select concerns — this is a required Frame step. A frame pass is not
complete until the project’s concerns are selected (or it is explicitly
recorded that none apply); shipping feature specs with no concern decision is
a framing gap, not an acceptable default-empty state. At
low/medium, drive selection interactively by category (tech stack, data, infrastructure, quality). Athigh, infer the selection from the product’s nature and record each inferred concern as an assumption. Fill each needed exclusive slot per the Concern slot resolution section below and record the chosen filler plus its source inconcerns.md. Selection signals: a UI web app needsfrontend-frameworkande2e-framework(selecting the tool is not coverage — at least one core user flow must have a whole-stack e2e that runs green against the running app); an operator-facing product (a human manages mutable domain objects or lifecycle state through a UI) selectsadmin-console, with the primary operator workflow exercised end-to-end through the UI; an account-based / multi-tenant product selectsauth(real signup, login/sessions, server-side RBAC, isolation through the principal) and fills theauth-providerslot (an external IdP is a swappable filler, never hardcoded). Neither is selected for pure APIs, CLIs, libraries, static content sites, or read-only dashboards unless an operator UI is explicitly required. Selection happens here, once; propagation to work items is a later gate owned bycheck/polish, not a re-selection. - Read the relevant artifact template, prompt, meta.yml, and active voice profile before drafting.
- Keep each artifact in its lane:
- Product Vision is direction.
- PRD is product scope: capabilities, outcomes, priorities, metrics, and non-goals.
- Feature specs are feature behavior, boundaries, edge cases, and decomposition.
- User stories are vertical user journeys and observable acceptance criteria.
- Contracts are exact shared interface surface: API/CLI/event/schema/config/ telemetry/adapter commands, flags, fields, payloads, status codes, error semantics, versioning rules, stability rules, and examples.
- Solution Design is the feature-level technical approach, domain model, component decomposition, and interface usage.
- Technical Design is the story-level implementation design: files, component changes, tests, rollback, sequence, and references to governing Contracts. Exact shared interface surface belongs in Contract, not PRD, Feature Spec, User Story, Solution Design, or Technical Design. Those artifacts may name or reference the need for an interface; they do not define the normative surface inline.
- Give each user-story acceptance criterion a stable
US-<n>-AC<m>ID in Given/When/Then form so the story test plan can map it to tests by name. Decompose to a coverage floor (minimum rigor, not equal depth): every PRD functional requirementFR-nmaps to ≥1 user story (don’t bundle unrelatedFR-ns without justification), and every acceptance criterion gets ≥1 test that exercises it — a named test with no relevant assertion isUNTESTED, not covered. An untested AC blocks unless a reviewed manual/non-automatable exception is recorded with evidence. Every covering test must cite the AC ID it covers in the canonical, parseable syntax@covers US-<n>-AC<m>so traceability is machine-checkable — an exercising, passing test that omits the citation isUNCITED_COVERAGE(fix = add the citation, not a new test), distinct fromUNTESTED; a test that cites an AC it does not exercise isASSERTED_UNBACKED. Citation is an additional gate on top of exercise+pass+satisfy, never a replacement. - Validate blocking template checks before treating the artifact as ready.
- Create follow-up design or implementation work only after the framing artifact can govern it.
Concern slot resolution
A slot is an exclusive functional position a project must fill exactly
once (one frontend framework, one language runtime, one e2e tool, one auth
backend). Slots are declared in the shipped catalog at concerns/slots.yml, resolved
via §Catalog Resolution — the in-tree workflows/concerns/slots.yml when a
vendored tree is present, otherwise the references/concerns/slots.yml floor
beside this SKILL.md (which always resolves). The file declares exclusive slots
plus shipped defaults; membership in a slot is derived from each concern’s
own ## Slot section, never listed in slots.yml.
For every needed exclusive slot, resolve the filler in this fixed order (first match wins):
- Operator override —
docs/helix/01-frame/concerns.local.ymlin the project tree. Read this BEFORE concerns.md exists, during high-autonomy concern selection. - Shipped default — the
defaults:map inslots.yml. - Recorded assumption — if neither source resolves, infer from the
product’s nature and record it as an assumption in
concerns.md.
The exclusive slots and any shipped defaults are declared in slots.yml;
read them there rather than from this skill. Defaults are starting points a
project overrides, not technology choices HELIX imposes.
Contract: select each needed slot once per session during step 2
above, and record the chosen filler PLUS its source (operator-override,
shipped-default, or assumption) in concerns.md. Propagation to work
items and downstream artifacts is a later gate (owned by check/polish),
never a re-selection.
Procedure: workflows/actions/frame.md (deeper step detail; this file is the contract).
Innsigle seal: model-primary by HELIX
The signature covers the markdown source of this page, not these HTML bytes. This page quotes that seal; verify it against the source file.
- Composition
- model-primary
- Issuer
- HELIX
helix - Signing key
ed25519:b0865d76d834a52c48506414d16f4e5a(build key)- Signed source
reference/workflow-modes/frame.md- Signed
- 2026-09-23T14:11:58Z
- Content digest
sha256:dc108d30…97ceafa4
This build key is endorsed by the human key for build signing; the signature is not a detector and not a truth guarantee.
Raw attestation JSON
{
"payload": {
"innsigle": "1",
"type": "https://innsigle.dev/claim/colophon/v1",
"issued_at": "2026-09-23T14:11:58Z",
"issuer": {
"id": "helix",
"name": "HELIX",
"key_id": "ed25519:b0865d76d834a52c48506414d16f4e5a",
"key_url": "https://documentdrivendx.github.io/helix/.well-known/innsigle/keys.json"
},
"subjects": [
{
"uri": "https://documentdrivendx.github.io/helix/reference/workflow-modes/frame/",
"digest": {
"alg": "sha256",
"value": "dc108d306d4cd9567701d7798d88eb8b3af670151749c01dc129466997ceafa4"
}
}
],
"colophon": {
"schema_version": "1",
"composition": "model-primary",
"ingredients": [
{
"kind": "model",
"name": "Claude",
"role": "draft"
},
{
"kind": "tool",
"name": "sloptimizer",
"role": "rewrite"
},
{
"kind": "human",
"name": "operator",
"role": "structure-edit"
}
],
"notes": null
}
},
"payload_encoding": "json",
"signatures": [
{
"key_id": "ed25519:b0865d76d834a52c48506414d16f4e5a",
"alg": "ed25519",
"sig": "MLi4hapUHvMFHGcgswSVVJb0GmgX0F8tY7x-vA8iJnReFn2wqJh9VRUrAG5Gv_8QsVn8RjCrGlbpskZUgGsVBA",
"signed_at": "2026-09-23T14:11:58Z"
}
]
}