spec-object-review
Skill1 starsChanged 6 months agoMITView on GitHub
Audit spec domain objects, cross-references, and entity completeness across single or multi-repo ecosystems.
1 other project uses a version of this, 1 of them edited.
Adopted by
Most recently taken up by
- agent-ix/quoinedited, first seen Jun 25, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 1
- agent-ix/quoin★ 2094% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository19 other files it gives its agents.
- spec-app-reviewSkill
- spec-blueprintSkill
- spec-dependency-analysisSkill
- spec-evidence-analysisSkill
- spec-failure-domain-analysisSkill
- specifySkill
- spec-integrity-analysisSkill
- spec-matrixSkill
- spec-reviewSkill
- spec-risk-complexity-analysisSkill
- spec-scope-boundary-analysisSkill
- spec-security-analysisSkill
- spec-to-planSkill
- spec-us-to-frSkill
- spec-write-frSkill
- spec-write-itSkill
- spec-write-nfrSkill
- spec-write-strSkill
- spec-write-usSkill
The file
We split this skill into the rules it gives an agent
11 rules. About 0 are common, 8 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈8
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 12
After initial spec creation to verify domain coverage.
- Distinctive: line 13
When integrating a new service into an existing ecosystem.
- Distinctive: line 14
When fixing spec-code misalignments or tracing integration bugs.
- Very specific: line 33
Verify upstream refs exist: If FR-A says it depends on repo-B FR-003, confirm repo-B/spec/functional/FR-003-*.md exists.
- Distinctive: line 34
Verify bidirectional tracing: If FR-A references FR-B as upstream, FR-B should reference FR-A as downstream (or vice versa).
- Very specific: line 44
Check whether domain objects defined inline in specs have proper dedicated FRs with object: frontmatter.
- Distinctive: line 64
All FRs must use standard frontmatter:
- Distinctive: line 89
Ask yourself these questions.
- Distinctive: line 91
Can I rebuild this system from spec alone?: Every entity, its fields, invariants, and relationships should be in a dedicated FR — not just …
- Distinctive: line 105
Do individual service repos avoid duplicating domain-level concerns?
- Very specific: line 124
Shared entities: If two FRs reference the same model (e.g., AuthToken used by both API Keys FR-004 and OAuth Clients FR-008), the model …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Spec Object Review
Audit a codebase's spec domain objects for completeness, cross-reference integrity, and alignment with the object-type-guide format.
When to Use
- After initial spec creation to verify domain coverage.
- When integrating a new service into an existing ecosystem.
- When fixing spec-code misalignments or tracing integration bugs.
- As a periodic health check on spec quality.
Process
1. Inventory
Scan all spec/ directories in scope (single repo or ecosystem-wide):
find spec/ -name "*.md" -path "*/functional/*"For each FR, extract frontmatter fields: id, title, artifact_type, object.
2. Cross-Reference Audit
For every FR with a Traceability / Dependencies section:
- Verify upstream refs exist: If FR-A says it depends on
repo-B FR-003, confirmrepo-B/spec/functional/FR-003-*.mdexists. - Verify bidirectional tracing: If FR-A references FR-B as upstream, FR-B should reference FR-A as downstream (or vice versa).
- Check endpoint paths match code: For any API endpoint documented in a spec, grep the source code to confirm the path is correct. Pay attention to router prefixes that may not appear in the FR but are applied at app mount time.
Common Pitfalls:
- Router prefixes (e.g.,
/authprefix) silently changing the actual path vs what the FR documents. - References using vague service names ("identity") instead of specific FR IDs ("identity FR-006").
depends_onin master spec frontmatter being empty when runtime dependencies exist.
3. Domain Object Completeness
Check whether domain objects defined inline in specs have proper dedicated FRs with object: frontmatter.
Scan for inline objects:
| Pattern in spec | Missing Domain FR Type |
### Data Models table with field/type columns | entity or value_object |
API Request/Response JSON bodies in ## API Contract | value_object |
class X(SQLModel) or Pydantic model in code without FR | entity |
class X(str, Enum) or status fields | value_object or state_machine |
| Multi-step behavior spanning services | process |
| Env var / configuration table in spec.md | configuration |
stateDiagram-v2 in spec.md | state_machine |
The Semantic Payload Trap: Inline JSON bodies inside of an endpoint's API Contract section are the #1 cause of cross-repo semantic drift. Even if the syntax matches (e.g. { "username": "string" }), the semantics drift (email vs account_name). Any structured payload passed across a bounded context MUST have a dedicated value_object FR to anchor its field semantics.
Reference: See spec-write-fr object-type-guide.md for the full type taxonomy.
4. Frontmatter Validation
All FRs must use standard frontmatter:
---
id: FR-XXX
title: "Descriptive Title"
artifact_type: FR
object: entity # Only if FR defines a domain object
relationships: # Structured array of cross-references
- target: "ix://org/repo/TargetFR"
type: "depends_on"
cardinality: "1:1"
---Check for:
type: functionalinstead ofartifact_type: FR(non-standard).- Missing
object:on FRs that clearly define domain objects. domain:orstatus:fields that aren't part of the standard schema.- Missing
relationships:array in the frontmatter when the body references upstream/downstream dependencies (such as an API, an event, a data entity, or a required permission). - Dependencies defined as generic Markdown text lists or raw Mermaid diagrams instead of structured YAML relational objects.
- Relationships using generic
type: "depends_on"when a more specific semantic linkage applies (e.g.calls,publishes,consumes,triggers,reads,writes,requires).
5. Rebuild Test
Ask yourself these questions. If the answer is "no" to any, there's a gap:
- Can I rebuild this system from spec alone? Every entity, its fields, invariants, and relationships should be in a dedicated FR — not just inline markdown tables.
- Can I find how to perform operation X? End-to-end flows (login, deploy, sync) should have
object: processFRs that show the full sequence across services. - Can I find how to integrate? Each service should document what it consumes and what it exposes, with FR-level traceability.
- Can I troubleshoot? Error handling sections should exist in every API endpoint and process FR.
6. Application-Level Check
For multi-service domains (e.g., Auth = auth-service + identity + auth-py + auth-fastapi + ts-auth-sdk):
- Is there a catalog fixture defining the Application entity?
- Does an application-level repo exist to own:
- The bounded context / domain FR.
- Cross-service process FRs.
- The catalog fixture itself.
- Do individual service repos avoid duplicating domain-level concerns?
Output
Produce a review report with:
| Priority | Finding | Repo | Impact |
| P0 | Spec-code mismatch | repo | Incorrect documentation |
| P1 | Missing cross-reference | repo | Traceability gap |
| P2 | Missing object: frontmatter | repo | Parser incompatibility |
| P3 | Missing domain-typed FR | repo | Incomplete domain model |
Tips from Real Reviews
- Router prefix trap: FastAPI router prefixes (e.g.,
router = APIRouter(prefix="/auth")) silently change paths. Always verify spec paths against the mounted path, not just the route decorator. - Vague traceability:
| identity | Fetches user |is weaker than| identity FR-006 | Fetches user via internal lookup |. Always use FR-level IDs. - Empty
depends_on: Client libraries almost always depend on the service they consume. An emptydepends_on: []in a client SDK spec is a red flag. - Section number gaps: Master specs jumping from §8 to §19 suggest template sections were deleted. Check if §8 (Domain Model) and §9 (Events and Signals) should be populated.
- Shared entities: If two FRs reference the same model (e.g.,
AuthTokenused by both API Keys FR-004 and OAuth Clients FR-008), the model needs its own entity FR to avoid ambiguity. - Semantic mismatch trap: Even when endpoint signatures align, field semantics can drift across bounded contexts (e.g., UI sends
emailmapped to SDK'susernamefield, but Backend strictly expects an account name). Always cross-check the meaning and format of data passed across boundaries, especially in multi-repo systems like Auth.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

