Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ versioning; the compatibility rules are in SPEC.md §10.2.

## Unreleased

- **Repository identity** — renamed the repository to `asdecided-spec` and
updated reference-implementation links to `asdecided-core`. The stable RAC
- **Repository identity** — moved the repository to `asdecided/spec` and
updated reference-implementation links to `asdecided/core`. The stable RAC
vocabulary, artifact IDs, schema keys, and conformance contracts are
unchanged.
- **conformance/output-parity.json**, **conformance/vectors/** — the
Expand All @@ -29,7 +29,7 @@ versioning; the compatibility rules are in SPEC.md §10.2.
## v0.1.0 — 2026-07-05

Initial extraction of the specification from the reference implementation,
[`asdecided-core`](https://github.com/itsthelore/asdecided-core).
[`asdecided-core`](https://github.com/asdecided/core).

- **SPEC.md** — the normative specification: artifact model (five types,
frontmatter envelope, ID grammar and path-independent identity, per-type
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Normative changes follow this path, in order:
patch: editorial).

This mirrors the ADR discipline used in the reference implementation
([`asdecided-core`](https://github.com/itsthelore/asdecided-core), `rac/decisions/`):
([`asdecided-core`](https://github.com/asdecided/core), `rac/decisions/`):
decisions are recorded, reviewed by someone other than the author, and never
silently overridden. Where a spec change reflects a decision recorded there,
cite the ADR in the PR.
Expand Down
2 changes: 1 addition & 1 deletion GOVERNANCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

Merge rights to this repository are held by:

- **Tom Ballard** ([@itsthelore](https://github.com/itsthelore)) — author of
- **Tom Ballard** ([@tcballard](https://github.com/tcballard)) — author of
the reference implementation, `asdecided-core`.

The project is currently solo-maintained by choice. Additional maintainers
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# asdecided-spec — the AsDecided artifact specification
# AsDecided artifact specification

*Typed, validated, versioned product knowledge for coding agents.*

RAC (Requirements as Code) is a format for storing a team's requirements,
decisions, roadmaps, prompts, and designs as Markdown artifacts in a Git
tree — with a closed lifecycle, machine-readable relationship types, and a CI
gate that rejects broken corpus states before they land.
[`asdecided-core`](https://github.com/itsthelore/asdecided-core) is the reference
[`asdecided-core`](https://github.com/asdecided/core) is the reference
implementation; this repository is the contract a second implementation would
build against. The normative text is [SPEC.md](SPEC.md); the machine-readable
schemas, vocabularies, conformance definitions, and executable examples live
Expand Down
6 changes: 3 additions & 3 deletions SPEC.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ consumers (tools that read, validate, or serve them).
## 2. Status of this document

This is **v0.1.0** of the RAC specification, extracted from the reference
implementation, [`asdecided-core`](https://github.com/itsthelore/asdecided-core). Every
implementation, [`asdecided-core`](https://github.com/asdecided/core). Every
normative statement below is traceable to behavior the reference validator
enforces today (the machine-checked trace lives in `extraction-inventory.json`;
one deliberate exception is called out in §10). The specification is pre-1.0:
Expand Down Expand Up @@ -822,6 +822,6 @@ advisory, never blocking.)
---

*This specification is maintained at
[`itsthelore/asdecided-spec`](https://github.com/itsthelore/asdecided-spec) under the
[`asdecided/spec`](https://github.com/asdecided/spec) under the
process in `CONTRIBUTING.md` and `GOVERNANCE.md`. The reference implementation
is [`itsthelore/asdecided-core`](https://github.com/itsthelore/asdecided-core).*
is [`asdecided/core`](https://github.com/asdecided/core).*
2 changes: 1 addition & 1 deletion extraction-inventory.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"_meta": {
"purpose": "Extraction inventory for the RAC (Requirements as Code) specification. Every normative claim in SPEC.md cites a key in this file via an HTML comment (<!-- inv: <key> -->). This is a working artifact of the spec extraction; it is not itself normative.",
"extracted_from": "itsthelore/asdecided-core @ 6f8de33 (branch main state at extraction)",
"extracted_from": "asdecided/core @ 6f8de33 (branch main state at extraction)",
"source_of_truth": "src/rac/ validator code: core/validation.py, core/classification.py, core/artifacts.py, core/frontmatter.py, core/metadata.py, core/identity.py, core/idgen.py, core/relationship_types.py, core/markdown.py, core/corpus.py, core/fs.py, core/okf.py, core/overrides.py, core/limits.py, services/validate.py, services/relationships.py, services/review.py, services/gate.py, services/okf_conformance.py, services/init.py, output/sarif.py, cli.py",
"verified_by_running": "rac validate rac/, rac relationships rac/ --validate, rac gate rac/ against the asdecided-core dogfood corpus (389 artifacts, all pass)"
},
Expand Down
2 changes: 1 addition & 1 deletion schema/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ design) with their section tiers, metadata enums, descriptions, guidance,
synonyms, and starter bodies, plus the relationship-section descriptions.
Unlike the JSON Schemas below, it is not derived documentation — it is a
source of truth an engine reads directly. The native reference implementation
([`asdecided-core`](https://github.com/itsthelore/asdecided-core)) vendors it
([`asdecided-core`](https://github.com/asdecided/core)) vendors it
for its Rust engine; a sync gate keeps that copy identical to this file
(asdecided-core ADR-115, closing ADR-063 Guard 1). Changes to it are normative
and follow the process in [CONTRIBUTING.md](../CONTRIBUTING.md).
Expand Down
2 changes: 1 addition & 1 deletion schema/artifact-specs.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"_meta": {
"role": "Canonical machine-readable artifact-spec registry: the ordered ARTIFACT_SPECS (requirement, decision, roadmap, prompt, design) and relationship-section descriptions read by conforming implementations, including the native Rust engine (rac-engine::spec). ADR-063 Guard 1: one shared, language-neutral source of truth, so classification and validation cannot drift between implementations.",
"canonical": "This file, in itsthelore/asdecided-spec, is the upstream source of truth. Implementations vendor it (asdecided-core: rust/rac-engine/assets/spec/artifact-specs.json) and a sync gate keeps each vendored copy's artifact_specs and relationship_descriptions payloads identical to this file's. Edit here; downstream copies re-sync — never the reverse.",
"canonical": "This file, in asdecided/spec, is the upstream source of truth. Implementations vendor it (asdecided-core: rust/rac-engine/assets/spec/artifact-specs.json) and a sync gate keeps each vendored copy's artifact_specs and relationship_descriptions payloads identical to this file's. Edit here; downstream copies re-sync — never the reverse.",
"consumers": [
"rac-engine::spec (Rust, include_str!)"
]
Expand Down
2 changes: 1 addition & 1 deletion schema/artifact.schema.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/itsthelore/asdecided-spec/main/schema/artifact.schema.json",
"$id": "https://raw.githubusercontent.com/asdecided/spec/main/schema/artifact.schema.json",
"title": "RAC (Requirements as Code) parsed artifact — per-type structural contract",
"description": "The canonical parsed representation of one RAC artifact, as a discriminated union over `type`. RAC's source form is Markdown, not JSON, so this schema validates the *parsed* artifact a conformant parser produces: the frontmatter envelope, the single H1 title, the map of normalized `##` section names to body text, and (for requirement artifacts) the parsed requirement lines. It mirrors the native asdecided-core reference validator: required sections per type, the closed status/category/horizon enums (first non-empty line of the section body, matched case-insensitively), and the [REQ-N] line grammar. Recommended and optional sections are never required here — their absence is advisory (SPEC.md section 9.2, tier 4). Sections outside a type's vocabulary are permitted free content (SPEC.md section 11).",
"type": "object",
Expand Down
2 changes: 1 addition & 1 deletion schema/frontmatter.schema.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/itsthelore/asdecided-spec/main/schema/frontmatter.schema.json",
"$id": "https://raw.githubusercontent.com/asdecided/spec/main/schema/frontmatter.schema.json",
"title": "RAC (Requirements as Code) artifact frontmatter envelope",
"description": "The YAML frontmatter envelope of one RAC artifact, per SPEC.md section 6.3. Mirrors the native asdecided-core reference validator exactly: the field set is closed (an unknown field is the blocking finding invalid-metadata-field), schema_version is required whenever a frontmatter block is present, and a document with no frontmatter block at all is legal (the legacy form; that case is outside this schema). Duplicate keys, YAML aliases, nesting deeper than 32 levels, and blocks over 64 KiB are rejected by the parser before schema validation applies.",
"type": "object",
Expand Down