openreachtech/hora-core/hora-accept
Claude Code and agent skill by openreachtech/hora-core
- community
Checking that the SKILL.md file is still in the repository.
Run acceptance and record what passed and what did not — the full unit suites every time, plus an acceptance review at the reach the invocation calls for. Invoked as checkpoint 18 of /hora-build, as the whole-version sweep, or directly as /hora-accept.
Install
npx vskill@latest install openreachtech/hora-core/hora-acceptSKILL.md
hora-accept
Acceptance. Run the unit suites in full, run the acceptance review at the reach this invocation calls for, and record the result — including what that reach was.
Read ../hora/references/structure.md first. This skill is strictly read-only on `specs/`, and it never fixes code. It finds and records; fixing is a checkpoint's job, in /hora-build.
What this skill does not contain
The content of an acceptance review, and the criteria it passes or fails on, are not in this file and must never be written into it. They live in the @openreachtech/hora-skills-ort-* packages, and this skill delegates the work.
| What is needed | Whose it is | |
|---|---|---|
| whether the environment satisfies the prerequisite, and how to bring it up | the skills covering the local end-to-end container stack | |
| what the review looks at, phase by phase, and what it fails on | the skills covering the acceptance review itself | |
| the durable list of scenarios, and how coverage is derived from the API surface | the skills covering end-to-end test specification | |
| UX, interaction, accessibility and consent findings, with severity | the skills covering the UI/UX audit | |
| the project context those two read (users, scope, tokens, rules) | the skills covering the shared UI/UX project context | |
| the kinds of defect a read-only security audit finds, and how it finds them | the skills covering a read-only security audit | |
| driving a failing suite to green without weakening it | the skills covering test execution | |
| whether a recorded result may stand in for an execution, and what a reused result must be reported with | the skills covering test caching | |
| where a backend test lives, and how its run order is guaranteed | the skills covering backend test placement | |
| how a unit test for a class is written | the skills covering how a unit test is written |
What this skill decides is only three things: which features are in scope, in what order the delegates run, and where the result is recorded.
No name appears above, and none may
A skill's name belongs to the package, which is free to change it (../hora/references/structure.md, "No hora file ever names one of those skills"). A renamed skill does not disagree with this file — the name stops matching, and the step is skipped while the record says the run passed.
So this skill matches at run time, itself, against the equipped skills' own descriptions, before running the step. Record the names it picked in the run's own record — the Delegate column below is that record.
If nothing equipped covers a row, say so and continue without it. Record the gap by the work that went uncovered. Do not substitute a guess, and do not invent the missing criteria yourself.
What is in scope
Two invocations, two reaches — and the unit suites are the one thing that never shrinks.
| Invoked as | Unit suites (step 2) | Review scope (steps 3–6) | Written to | |
|---|---|---|---|---|
checkpoint 18 of /hora-build or /hora-fast — the feature gate | every repository, in full | the feature at the gate. The live, browser-driven part of the review runs where "Whether a feature gate drives the product live", below, says yes | .hora/acceptance/<version>/<feature-id>.md — a new block, whatever reach this run took | |
the whole-version sweep — _plan.md's ## Acceptance entry | every repository, in full | every done feature — for every version in ascending order, every feature whose entry in _plan.md is [x], plus the one at the gate if any, plus — in a version the plan collapsed to one adoption sweep — every entry in that version's feature section whatever its box reads (below) | .hora/acceptance/<version>/_sweep.md — a new block |
Step 6 is the one step whose scope is not a feature set. At the sweep it is pointed at the repository whole; at a gate it does not run, because checkpoint 8 already audited that feature's change set (../hora-build/references/checkpoints.md, checkpoint 8).
"Explicitly requested" means a person asked for it, in the run. That is the only widening there is, and the run records it with the requester named. Nothing here upgrades a gate run on its own judgment, and nothing downgrades the sweep.
A widening changes the reach and nothing else — least of all where the record lands. A gate run asked to reach every done feature is still that feature's acceptance, so it appends a block to that feature's own file and says reach: full inside it. There is no third kind of run and no third path.
The version's own acceptance criteria are a third thing in scope, and they are the sweep's alone. A behavior spanning several features reaches no gate at all (../hora/references/spec-format.md, "15. Version acceptance criteria"). _plan.md's ## Acceptance entry names how many there are and which rest on a feature nobody accepted.
| Invoked as | The version's own criteria | |
|---|---|---|
checkpoint 18 of /hora-build or /hora-fast — the feature gate | not in scope, at any reach | |
| the whole-version sweep | in scope, all of them — including the ones earlier versions added, since they stand in the resolved document until somebody removes them |
A widening does not reach them either. A widened gate run is still accepting one feature, and these criteria are a statement about the version. Judged at a gate, a criterion spanning three features would fail against a product holding one of them.
A standing policy could not live in `_plan.md`, which is why the widening is a person and not a line. .hora/ holds derivations, written by skills and read by humans (../hora/references/structure.md, invariant 1). If a project wants "sweep live at every gate" as policy, it belongs in the spec.
A feature implemented before Hora Kit was adopted is in scope like any other. Its checkpoints are marked not-applicable up to the acceptance gate, never through it — so the first sweep after adoption is the run that says what the existing product actually does. Expect findings there.
A feature the spec only listed is the opposite case, and the derivation has already decided it. /hora-plan writes its entry under ## Not accepted, with no checkbox at all. Scope above is read off those checkboxes — a gate run takes the feature whose gate it is, a sweep takes every entry that is [x] — and an entry with no checkbox is neither. It is therefore out of scope at this version and at every later one, with nothing added here to keep it out.
No box at all and an unticked box are two states, and only the first one is this. [ ] says a run is going to close this entry (../hora-plan/SKILL.md, "collapses to one sweep"), which is why the row above takes a collapsed version's feature entries into scope whatever their boxes read. Absence of the box, never its state, is what puts a feature out of scope.
That section is taken by what it is, not by an exact heading string: the version's feature section, whatever its heading reads. A collapsed version's is written ## Features — adopted as built, so a selector matching a bare ## Features literally finds no section in precisely the version whose every feature it was supposed to cover. Match the section, then read its entries.
built: alone | built: with baseline: inventoried | ||
|---|---|---|---|
Its entry in _plan.md | a checkbox, under ## Features | under `## Not accepted`, with no checkbox | |
| A gate run | runs, as its checkpoint 18 | there is no gate — 18 stays [ ] and nothing marks it | |
| A sweep | in scope from the run that finished it onward | never in scope | |
| What a verdict says about it | passed, or a finding routed to a checkpoint | its id on the `not-accepted:` line, and nothing else |
Deriving the exclusion rather than writing a rule for it is the point. A rule would have to hold at two reaches, three invocation forms and every version after this one, and the first place somebody forgot it would put a feature with no acceptance criteria in front of the review skills — which can only report that nothing failed. The checkbox is absent once, in the plan, and every reach reads the same absence.
Where the plan collapsed a version into a single adoption sweep, that sweep is one invocation with every adopted feature in scope, standing in for each one's checkpoint 18. It runs the same six steps as any sweep — only the number of repetitions shrinks. Its findings route to checkpoints per feature, and a feature a finding reopens gets its checkpoints back for real.
A feature whose acceptance was deferred by a listing runs at full live reach when it is finally accepted, whatever the invocation form. It is decided mechanically, from two facts together: no `.hora/acceptance/*/<feature-id>.md` holds a block whose verdict is a pass, in any version, and an earlier version's `_plan.md` names this feature under `## Not accepted`. Such a run is the only acceptance this code will ever have had, so a live-skipped pass would stand as the whole of what was ever said about it.
Both facts are needed, and the second is what keeps this from swallowing the gate's own default. Every feature's checkpoint 18 is its first acceptance, so the missing file alone would widen every gate run ever. A listing is what makes this run different: the deferral was declared, in the spec, and this is the run that pays for it.
It matters most where the missing record is years old. The invocation says nothing about the feature never having been accepted, and the person invoking it has no reason to know. The plan and the absent file are what say so, identically whether the listing is one version old or four.
The regression net at a feature gate is the unit suites plus the review's own static checks, and it is cumulative by construction. The suites run whole repositories, so a feature that breaks an earlier one fails here, in the run that broke it. What a gate run gives up is driving every earlier feature's screens end to end; that is the sweep's job, and the record says which reach its verdict was reached at.
[wing] Whether a feature gate drives the product live
Yes, where a person asked for it in the run, or where this run is paying a listed feature's deferred acceptance (both above). Otherwise the gate keeps the static checks and gives up the driven ones. The sweep always drives, so this section never reaches it.
The order to run in
Each step below states the work, not a name. Match it against the equipped skills' descriptions first, then run it, and write the names you matched into the record's Delegate column.
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingkit/skills/hora-accept/SKILL.md
Popularity
- Repository stars
- 56
- 7-day trend score
- 0
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/openreachtech/hora-core/hora-accept)