openreachtech/hora-core/hora-spec-nonfunctional
Claude Code and agent skill by openreachtech/hora-core
- community
Checking that the SKILL.md file is still in the repository.
Stage 3 of /hora-spec. Turn "it should be fast" into the four numbers that change a design — users now, users foreseen, the heaviest operation, and how long data is kept — plus availability, the security level and the middleware. Invoked by /hora-spec, or directly.
Install
npx vskill@latest install openreachtech/hora-core/hora-spec-nonfunctionalSKILL.md
hora-spec-nonfunctional
Stage 3 of `/hora-spec`. Get the numbers that decide stage 4's design, and the middleware /hora-setup needs in order to bring anything up at all.
Read ../hora/references/structure.md and ../hora-spec/references/principles.md first. `../hora/references/asking.md` fixes how anything here is put to a person — a check, a proposal or a question, each with the question tool as its default. `../hora-spec/references/stages.md` is the authority on this stage's exit condition.
Where something is already running, today's numbers can be read and put up as checks — how many rows each table holds, how long data has been kept, which services the stack brings up. What the product must carry tomorrow cannot be, and that is what this stage is actually for: a system reports its present, never its intended future.
Offer numbers as options, never as a blank. "How many users?" produces a shrug; 200 / 2,000 / 20,000, with today's row count named alongside, produces an answer in one exchange (../hora/references/asking.md).
Nothing in the `@openreachtech/hora-skills-ort-*` packages owns this stage, and nothing could. No skill states what a project's user count or availability target should be. What is written below is which questions to ask; every answer is the requester's.
What this stage decides
What it must not decide
| Whose it is | ||
|---|---|---|
| whether a total is stored or recalculated | stage 4. This stage supplies the number that decides it | |
| which operation becomes a job | stage 4 | |
| who may read a field | stage 6 | |
| a cache, an index, a replica, a queue | stage 4, and the package's own skills |
This stage produces constraints, not designs. A number written here becomes a constraint on every feature (../hora/references/spec-format.md), and the design it forces is stage 4's to make.
The four numbers
A number changes the design. An adjective does not.
Question 2 is why this stage exists before stage 4. One expensive thing among many cheap ones is the normal shape of a system, and the cheap way to survive it is to keep that one thing separable — its own job, its own queue, its own server later. Decided here it costs a sentence; found later it costs the request path it is already sitting in.
Question 3 is asked in consequences, not in nines. "How many nines?" gets a number nobody has thought about. "What happens if it is down for a day?" gets the answer the design actually needs.
Where nobody knows a number, write what was assumed, in the spec, and record it (spec-assumption, blocking: no). An assumed number that is written down gets corrected when it is wrong; an unwritten one gets designed against silently.
Everything else worth asking
| Ask | Because | |
|---|---|---|
| what a person may not wait for | anything above a few seconds decides stage 4's job placement, not a spinner at stage 5 | |
| what has to be true in law or in policy | retention, consent, an audit trail, where the data may physically sit | |
| which external services this depends on | each one can be slow or down, and stage 4 has to decide what happens then | |
| what has to be reported, and to whom | a report that reads everything is usually the heaviest operation, and it is usually forgotten | |
| how a user's mistake is undone | a system with no way back is a support burden that never appears in a requirement | |
| what has to be logged, and what must never be | stage 6 needs both halves |
Propose the ones nobody raised. Retention and undo are the two most often missing, and both are cheap now.
What it writes
Show each section in full and wait for approval (../hora-spec/SKILL.md).
And the middleware, which is what `/hora-setup` reads:
- Start from the stack handbook's default middleware table (
docs/stack/middleware.md) and declare what this project actually uses - Write the server's version, not a driver's. An npm dependency does not indicate the server version, and without it
/horahas to guess - The queue's store cannot be left out of a project with any background job (the handbook's middleware rules). Where stage 3 already knows a job is coming, declare it now
- `profile` and `COMPOSE_PROFILES` are what `/hora-setup` derives from this table — a middleware the table omits is one that never comes up, and acceptance stops rather than reviewing something that is not really running
Exit condition
The four numbers written, as numbers or as stated assumptions; availability, retention and the security level written; every middleware declared with its server version. ../hora-spec/references/stages.md is the authority.
When it sends the run back
| Found here | Goes to | |
|---|---|---|
| the heaviest operation turns out to serve a use case nobody stated | stage 1 | |
| the volume makes a feature unreasonable for this release | stage 2 |
A number that arrives later and is ten times what was written comes back here, and stage 4 is re-entered after it. That is the whole reason this stage precedes the design rather than accompanying it.
References
| File | Content | |
|---|---|---|
../hora/references/asking.md | a check, a proposal or a question — and the question tool this stage defaults to | |
../hora-spec/SKILL.md | the approval rule, the state file, the closing report | |
../hora-spec/references/stages.md | this stage's exit condition | |
../hora-spec/references/principles.md | "Scale is a number, or it is nothing" | |
../hora/references/spec-format.md | "Non-functional requirements", "Manual verification" | |
/hora-setup, as the project's boilerplate ships it | what it does with the middleware table |
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-spec-nonfunctional/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-spec-nonfunctional)