Phase 1a: content schema validator (freeze the schema)
Implements AGENTS.md section 7 front-matter schema as a single-file, standard-library-only Python validator; no third-party YAML dependency and no framework. Adds the `make validate` gate, a 20-case fixture set and docs/content-schema.md. DoD satisfied: - make validate runs and exits 0 on an empty/clean content/ tree (missing dir and empty dir both exit 0; fixture ok-empty covers it). - Every violation class has a fixture under test/fixtures/fail-*; each exits non-zero with one line per violation (file:line: field: rule). `make test` runs all 20 cases: 20/20 pass. - Dangling artefact reference is fatal (fail-dangling-artefact; artefacts[].url must resolve to an existing in-repo L3 stub or asset). - Unknown front-matter field is fatal (fail-unknown-field), including unknown keys nested inside artefacts[]/metrics[]. - docs/content-schema.md committed; states the frozen schema, links to AGENTS.md section 7, and records that any later schema change is a breaking change requiring Sam's approval. - Scope respected: no content authored, no rendering, no site code. Files: Makefile, tools/validate_content.py, test/fixtures/**, docs/content-schema.md, .gitignore (__pycache__).
1
test/fixtures/fail-area-enum/content/assets/audio-rack.svg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"/>
|
||||
|
After Width: | Height: | Size: 65 B |
21
test/fixtures/fail-area-enum/content/edge/audio.md
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
id: audio
|
||||
area: security
|
||||
level: 2
|
||||
title: "Distributed Audio"
|
||||
claim: "Eight synchronised endpoints with music ducking for voice."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: [Snapcast, Mopidy, Spotify]
|
||||
metrics: [{label: "endpoints", value: 8}]
|
||||
artefacts:
|
||||
- type: doc
|
||||
label: "Architecture note"
|
||||
url: "content/edge/l3/audio-architecture.md"
|
||||
- {type: image, label: "Rack diagram", url: "content/assets/audio-rack.svg"}
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio, snapcast]
|
||||
---
|
||||
|
||||
# Distributed Audio
|
||||
17
test/fixtures/fail-area-enum/content/edge/l3/audio-architecture.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
id: audio-architecture
|
||||
area: edge
|
||||
level: 3
|
||||
title: "Audio architecture note"
|
||||
claim: "How the eight endpoints stay in sync."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: []
|
||||
metrics: []
|
||||
artefacts: []
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio]
|
||||
---
|
||||
|
||||
# Audio architecture note
|
||||
1
test/fixtures/fail-area-enum/expect.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
area: must be one of ai, platform, edge, products, history, about
|
||||
1
test/fixtures/fail-artefact-external-url/content/assets/audio-rack.svg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"/>
|
||||
|
After Width: | Height: | Size: 65 B |
21
test/fixtures/fail-artefact-external-url/content/edge/audio.md
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
id: audio
|
||||
area: edge
|
||||
level: 2
|
||||
title: "Distributed Audio"
|
||||
claim: "Eight synchronised endpoints with music ducking for voice."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: [Snapcast, Mopidy, Spotify]
|
||||
metrics: [{label: "endpoints", value: 8}]
|
||||
artefacts:
|
||||
- type: doc
|
||||
label: "Architecture note"
|
||||
url: "content/edge/l3/audio-architecture.md"
|
||||
- {type: image, label: "Rack diagram", url: "https://example.invalid/rack.svg"}
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio, snapcast]
|
||||
---
|
||||
|
||||
# Distributed Audio
|
||||
17
test/fixtures/fail-artefact-external-url/content/edge/l3/audio-architecture.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
id: audio-architecture
|
||||
area: edge
|
||||
level: 3
|
||||
title: "Audio architecture note"
|
||||
claim: "How the eight endpoints stay in sync."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: []
|
||||
metrics: []
|
||||
artefacts: []
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio]
|
||||
---
|
||||
|
||||
# Audio architecture note
|
||||
1
test/fixtures/fail-artefact-external-url/expect.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
artefacts[1].url: must be an in-repo path to an L3 stub or asset, not an external URL
|
||||
1
test/fixtures/fail-artefact-missing-url/content/assets/audio-rack.svg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"/>
|
||||
|
After Width: | Height: | Size: 65 B |
21
test/fixtures/fail-artefact-missing-url/content/edge/audio.md
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
id: audio
|
||||
area: edge
|
||||
level: 2
|
||||
title: "Distributed Audio"
|
||||
claim: "Eight synchronised endpoints with music ducking for voice."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: [Snapcast, Mopidy, Spotify]
|
||||
metrics: [{label: "endpoints", value: 8}]
|
||||
artefacts:
|
||||
- type: doc
|
||||
label: "Architecture note"
|
||||
url: "content/edge/l3/audio-architecture.md"
|
||||
- {type: image, label: "Rack diagram"}
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio, snapcast]
|
||||
---
|
||||
|
||||
# Distributed Audio
|
||||
17
test/fixtures/fail-artefact-missing-url/content/edge/l3/audio-architecture.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
id: audio-architecture
|
||||
area: edge
|
||||
level: 3
|
||||
title: "Audio architecture note"
|
||||
claim: "How the eight endpoints stay in sync."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: []
|
||||
metrics: []
|
||||
artefacts: []
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio]
|
||||
---
|
||||
|
||||
# Audio architecture note
|
||||
1
test/fixtures/fail-artefact-missing-url/expect.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
artefacts[1].url: missing required field
|
||||
1
test/fixtures/fail-artefact-type-enum/content/assets/audio-rack.svg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"/>
|
||||
|
After Width: | Height: | Size: 65 B |
21
test/fixtures/fail-artefact-type-enum/content/edge/audio.md
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
id: audio
|
||||
area: edge
|
||||
level: 2
|
||||
title: "Distributed Audio"
|
||||
claim: "Eight synchronised endpoints with music ducking for voice."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: [Snapcast, Mopidy, Spotify]
|
||||
metrics: [{label: "endpoints", value: 8}]
|
||||
artefacts:
|
||||
- type: screenshot
|
||||
label: "Architecture note"
|
||||
url: "content/edge/l3/audio-architecture.md"
|
||||
- {type: image, label: "Rack diagram", url: "content/assets/audio-rack.svg"}
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio, snapcast]
|
||||
---
|
||||
|
||||
# Distributed Audio
|
||||
17
test/fixtures/fail-artefact-type-enum/content/edge/l3/audio-architecture.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
id: audio-architecture
|
||||
area: edge
|
||||
level: 3
|
||||
title: "Audio architecture note"
|
||||
claim: "How the eight endpoints stay in sync."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: []
|
||||
metrics: []
|
||||
artefacts: []
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio]
|
||||
---
|
||||
|
||||
# Audio architecture note
|
||||
1
test/fixtures/fail-artefact-type-enum/expect.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
artefacts[0].type: must be one of repo, image, video, doc
|
||||
1
test/fixtures/fail-bad-yaml/content/assets/audio-rack.svg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"/>
|
||||
|
After Width: | Height: | Size: 65 B |
21
test/fixtures/fail-bad-yaml/content/edge/audio.md
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
id: audio
|
||||
area: edge
|
||||
level: 2
|
||||
title: "Distributed Audio
|
||||
claim: "Eight synchronised endpoints with music ducking for voice."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: [Snapcast, Mopidy, Spotify]
|
||||
metrics: [{label: "endpoints", value: 8}]
|
||||
artefacts:
|
||||
- type: doc
|
||||
label: "Architecture note"
|
||||
url: "content/edge/l3/audio-architecture.md"
|
||||
- {type: image, label: "Rack diagram", url: "content/assets/audio-rack.svg"}
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio, snapcast]
|
||||
---
|
||||
|
||||
# Distributed Audio
|
||||
17
test/fixtures/fail-bad-yaml/content/edge/l3/audio-architecture.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
id: audio-architecture
|
||||
area: edge
|
||||
level: 3
|
||||
title: "Audio architecture note"
|
||||
claim: "How the eight endpoints stay in sync."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: []
|
||||
metrics: []
|
||||
artefacts: []
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio]
|
||||
---
|
||||
|
||||
# Audio architecture note
|
||||
1
test/fixtures/fail-bad-yaml/expect.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
invalid YAML: unterminated quoted string
|
||||
1
test/fixtures/fail-confidence-enum/content/assets/audio-rack.svg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"/>
|
||||
|
After Width: | Height: | Size: 65 B |
21
test/fixtures/fail-confidence-enum/content/edge/audio.md
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
id: audio
|
||||
area: edge
|
||||
level: 2
|
||||
title: "Distributed Audio"
|
||||
claim: "Eight synchronised endpoints with music ducking for voice."
|
||||
confidence: planned
|
||||
period: "2023-"
|
||||
tech: [Snapcast, Mopidy, Spotify]
|
||||
metrics: [{label: "endpoints", value: 8}]
|
||||
artefacts:
|
||||
- type: doc
|
||||
label: "Architecture note"
|
||||
url: "content/edge/l3/audio-architecture.md"
|
||||
- {type: image, label: "Rack diagram", url: "content/assets/audio-rack.svg"}
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio, snapcast]
|
||||
---
|
||||
|
||||
# Distributed Audio
|
||||
17
test/fixtures/fail-confidence-enum/content/edge/l3/audio-architecture.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
id: audio-architecture
|
||||
area: edge
|
||||
level: 3
|
||||
title: "Audio architecture note"
|
||||
claim: "How the eight endpoints stay in sync."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: []
|
||||
metrics: []
|
||||
artefacts: []
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio]
|
||||
---
|
||||
|
||||
# Audio architecture note
|
||||
1
test/fixtures/fail-confidence-enum/expect.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
confidence: must be one of delivered, running, in-progress, abandoned, historic
|
||||
1
test/fixtures/fail-dangling-artefact/content/assets/audio-rack.svg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"/>
|
||||
|
After Width: | Height: | Size: 65 B |
21
test/fixtures/fail-dangling-artefact/content/edge/audio.md
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
id: audio
|
||||
area: edge
|
||||
level: 2
|
||||
title: "Distributed Audio"
|
||||
claim: "Eight synchronised endpoints with music ducking for voice."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: [Snapcast, Mopidy, Spotify]
|
||||
metrics: [{label: "endpoints", value: 8}]
|
||||
artefacts:
|
||||
- type: doc
|
||||
label: "Architecture note"
|
||||
url: "content/edge/l3/not-written-yet.md"
|
||||
- {type: image, label: "Rack diagram", url: "content/assets/audio-rack.svg"}
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio, snapcast]
|
||||
---
|
||||
|
||||
# Distributed Audio
|
||||
17
test/fixtures/fail-dangling-artefact/content/edge/l3/audio-architecture.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
id: audio-architecture
|
||||
area: edge
|
||||
level: 3
|
||||
title: "Audio architecture note"
|
||||
claim: "How the eight endpoints stay in sync."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: []
|
||||
metrics: []
|
||||
artefacts: []
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio]
|
||||
---
|
||||
|
||||
# Audio architecture note
|
||||
1
test/fixtures/fail-dangling-artefact/expect.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
artefacts[0].url: dangling reference: 'content/edge/l3/not-written-yet.md' does not exist
|
||||
1
test/fixtures/fail-duplicate-id/content/assets/audio-rack.svg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"/>
|
||||
|
After Width: | Height: | Size: 65 B |
21
test/fixtures/fail-duplicate-id/content/edge/audio.md
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
id: audio
|
||||
area: edge
|
||||
level: 2
|
||||
title: "Distributed Audio"
|
||||
claim: "Eight synchronised endpoints with music ducking for voice."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: [Snapcast, Mopidy, Spotify]
|
||||
metrics: [{label: "endpoints", value: 8}]
|
||||
artefacts:
|
||||
- type: doc
|
||||
label: "Architecture note"
|
||||
url: "content/edge/l3/audio-architecture.md"
|
||||
- {type: image, label: "Rack diagram", url: "content/assets/audio-rack.svg"}
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio, snapcast]
|
||||
---
|
||||
|
||||
# Distributed Audio
|
||||
17
test/fixtures/fail-duplicate-id/content/edge/l3/audio-architecture.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
id: audio-architecture
|
||||
area: edge
|
||||
level: 3
|
||||
title: "Audio architecture note"
|
||||
claim: "How the eight endpoints stay in sync."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: []
|
||||
metrics: []
|
||||
artefacts: []
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio]
|
||||
---
|
||||
|
||||
# Audio architecture note
|
||||
21
test/fixtures/fail-duplicate-id/content/platform/audio.md
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
id: audio
|
||||
area: platform
|
||||
level: 2
|
||||
title: "Distributed Audio"
|
||||
claim: "Eight synchronised endpoints with music ducking for voice."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: [Snapcast, Mopidy, Spotify]
|
||||
metrics: [{label: "endpoints", value: 8}]
|
||||
artefacts:
|
||||
- type: doc
|
||||
label: "Architecture note"
|
||||
url: "content/edge/l3/audio-architecture.md"
|
||||
- {type: image, label: "Rack diagram", url: "content/assets/audio-rack.svg"}
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio, snapcast]
|
||||
---
|
||||
|
||||
# Distributed Audio
|
||||
1
test/fixtures/fail-duplicate-id/expect.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
duplicate id 'audio'
|
||||
1
test/fixtures/fail-filename-mismatch/content/assets/audio-rack.svg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"/>
|
||||
|
After Width: | Height: | Size: 65 B |
21
test/fixtures/fail-filename-mismatch/content/edge/audio.md
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
id: edge-audio
|
||||
area: edge
|
||||
level: 2
|
||||
title: "Distributed Audio"
|
||||
claim: "Eight synchronised endpoints with music ducking for voice."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: [Snapcast, Mopidy, Spotify]
|
||||
metrics: [{label: "endpoints", value: 8}]
|
||||
artefacts:
|
||||
- type: doc
|
||||
label: "Architecture note"
|
||||
url: "content/edge/l3/audio-architecture.md"
|
||||
- {type: image, label: "Rack diagram", url: "content/assets/audio-rack.svg"}
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio, snapcast]
|
||||
---
|
||||
|
||||
# Distributed Audio
|
||||
17
test/fixtures/fail-filename-mismatch/content/edge/l3/audio-architecture.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
id: audio-architecture
|
||||
area: edge
|
||||
level: 3
|
||||
title: "Audio architecture note"
|
||||
claim: "How the eight endpoints stay in sync."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: []
|
||||
metrics: []
|
||||
artefacts: []
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio]
|
||||
---
|
||||
|
||||
# Audio architecture note
|
||||
1
test/fixtures/fail-filename-mismatch/expect.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
must match the file name (expected 'audio', got 'edge-audio')
|
||||
1
test/fixtures/fail-last-verified-date/content/assets/audio-rack.svg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"/>
|
||||
|
After Width: | Height: | Size: 65 B |
21
test/fixtures/fail-last-verified-date/content/edge/audio.md
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
id: audio
|
||||
area: edge
|
||||
level: 2
|
||||
title: "Distributed Audio"
|
||||
claim: "Eight synchronised endpoints with music ducking for voice."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: [Snapcast, Mopidy, Spotify]
|
||||
metrics: [{label: "endpoints", value: 8}]
|
||||
artefacts:
|
||||
- type: doc
|
||||
label: "Architecture note"
|
||||
url: "content/edge/l3/audio-architecture.md"
|
||||
- {type: image, label: "Rack diagram", url: "content/assets/audio-rack.svg"}
|
||||
public: true
|
||||
last_verified: 2026-13-45
|
||||
tags: [audio, snapcast]
|
||||
---
|
||||
|
||||
# Distributed Audio
|
||||
17
test/fixtures/fail-last-verified-date/content/edge/l3/audio-architecture.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
id: audio-architecture
|
||||
area: edge
|
||||
level: 3
|
||||
title: "Audio architecture note"
|
||||
claim: "How the eight endpoints stay in sync."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: []
|
||||
metrics: []
|
||||
artefacts: []
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio]
|
||||
---
|
||||
|
||||
# Audio architecture note
|
||||
1
test/fixtures/fail-last-verified-date/expect.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
last_verified: must be a real calendar date (YYYY-MM-DD)
|
||||
1
test/fixtures/fail-last-verified-format/content/assets/audio-rack.svg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"/>
|
||||
|
After Width: | Height: | Size: 65 B |
21
test/fixtures/fail-last-verified-format/content/edge/audio.md
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
id: audio
|
||||
area: edge
|
||||
level: 2
|
||||
title: "Distributed Audio"
|
||||
claim: "Eight synchronised endpoints with music ducking for voice."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: [Snapcast, Mopidy, Spotify]
|
||||
metrics: [{label: "endpoints", value: 8}]
|
||||
artefacts:
|
||||
- type: doc
|
||||
label: "Architecture note"
|
||||
url: "content/edge/l3/audio-architecture.md"
|
||||
- {type: image, label: "Rack diagram", url: "content/assets/audio-rack.svg"}
|
||||
public: true
|
||||
last_verified: "20 October 2026"
|
||||
tags: [audio, snapcast]
|
||||
---
|
||||
|
||||
# Distributed Audio
|
||||
17
test/fixtures/fail-last-verified-format/content/edge/l3/audio-architecture.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
id: audio-architecture
|
||||
area: edge
|
||||
level: 3
|
||||
title: "Audio architecture note"
|
||||
claim: "How the eight endpoints stay in sync."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: []
|
||||
metrics: []
|
||||
artefacts: []
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio]
|
||||
---
|
||||
|
||||
# Audio architecture note
|
||||
1
test/fixtures/fail-last-verified-format/expect.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
last_verified: must be a date written as YYYY-MM-DD
|
||||
1
test/fixtures/fail-level-enum/content/assets/audio-rack.svg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"/>
|
||||
|
After Width: | Height: | Size: 65 B |
21
test/fixtures/fail-level-enum/content/edge/audio.md
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
id: audio
|
||||
area: edge
|
||||
level: 4
|
||||
title: "Distributed Audio"
|
||||
claim: "Eight synchronised endpoints with music ducking for voice."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: [Snapcast, Mopidy, Spotify]
|
||||
metrics: [{label: "endpoints", value: 8}]
|
||||
artefacts:
|
||||
- type: doc
|
||||
label: "Architecture note"
|
||||
url: "content/edge/l3/audio-architecture.md"
|
||||
- {type: image, label: "Rack diagram", url: "content/assets/audio-rack.svg"}
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio, snapcast]
|
||||
---
|
||||
|
||||
# Distributed Audio
|
||||
17
test/fixtures/fail-level-enum/content/edge/l3/audio-architecture.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
id: audio-architecture
|
||||
area: edge
|
||||
level: 3
|
||||
title: "Audio architecture note"
|
||||
claim: "How the eight endpoints stay in sync."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: []
|
||||
metrics: []
|
||||
artefacts: []
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio]
|
||||
---
|
||||
|
||||
# Audio architecture note
|
||||
1
test/fixtures/fail-level-enum/expect.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
level: must be the integer 1, 2 or 3
|
||||
1
test/fixtures/fail-metrics-empty/content/assets/audio-rack.svg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"/>
|
||||
|
After Width: | Height: | Size: 65 B |
21
test/fixtures/fail-metrics-empty/content/edge/audio.md
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
id: audio
|
||||
area: edge
|
||||
level: 2
|
||||
title: "Distributed Audio"
|
||||
claim: "Eight synchronised endpoints with music ducking for voice."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: [Snapcast, Mopidy, Spotify]
|
||||
metrics: [{label: "", value: 8}]
|
||||
artefacts:
|
||||
- type: doc
|
||||
label: "Architecture note"
|
||||
url: "content/edge/l3/audio-architecture.md"
|
||||
- {type: image, label: "Rack diagram", url: "content/assets/audio-rack.svg"}
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio, snapcast]
|
||||
---
|
||||
|
||||
# Distributed Audio
|
||||
17
test/fixtures/fail-metrics-empty/content/edge/l3/audio-architecture.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
id: audio-architecture
|
||||
area: edge
|
||||
level: 3
|
||||
title: "Audio architecture note"
|
||||
claim: "How the eight endpoints stay in sync."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: []
|
||||
metrics: []
|
||||
artefacts: []
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio]
|
||||
---
|
||||
|
||||
# Audio architecture note
|
||||
1
test/fixtures/fail-metrics-empty/expect.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
metrics[0].label: must be non-empty
|
||||
1
test/fixtures/fail-missing-field/content/assets/audio-rack.svg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"/>
|
||||
|
After Width: | Height: | Size: 65 B |
20
test/fixtures/fail-missing-field/content/edge/audio.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
id: audio
|
||||
area: edge
|
||||
level: 2
|
||||
title: "Distributed Audio"
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: [Snapcast, Mopidy, Spotify]
|
||||
metrics: [{label: "endpoints", value: 8}]
|
||||
artefacts:
|
||||
- type: doc
|
||||
label: "Architecture note"
|
||||
url: "content/edge/l3/audio-architecture.md"
|
||||
- {type: image, label: "Rack diagram", url: "content/assets/audio-rack.svg"}
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio, snapcast]
|
||||
---
|
||||
|
||||
# Distributed Audio
|
||||
17
test/fixtures/fail-missing-field/content/edge/l3/audio-architecture.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
id: audio-architecture
|
||||
area: edge
|
||||
level: 3
|
||||
title: "Audio architecture note"
|
||||
claim: "How the eight endpoints stay in sync."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: []
|
||||
metrics: []
|
||||
artefacts: []
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio]
|
||||
---
|
||||
|
||||
# Audio architecture note
|
||||
1
test/fixtures/fail-missing-field/expect.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
claim: missing required field
|
||||
3
test/fixtures/fail-no-front-matter/content/edge/audio.md
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
# Distributed Audio
|
||||
|
||||
No front-matter block at all.
|
||||
1
test/fixtures/fail-no-front-matter/expect.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
missing front-matter block
|
||||
1
test/fixtures/fail-unknown-field/content/assets/audio-rack.svg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"/>
|
||||
|
After Width: | Height: | Size: 65 B |
22
test/fixtures/fail-unknown-field/content/edge/audio.md
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
---
|
||||
id: audio
|
||||
area: edge
|
||||
level: 2
|
||||
title: "Distributed Audio"
|
||||
claim: "Eight synchronised endpoints with music ducking for voice."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: [Snapcast, Mopidy, Spotify]
|
||||
metrics: [{label: "endpoints", value: 8}]
|
||||
artefacts:
|
||||
- type: doc
|
||||
label: "Architecture note"
|
||||
url: "content/edge/l3/audio-architecture.md"
|
||||
- {type: image, label: "Rack diagram", url: "content/assets/audio-rack.svg"}
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio, snapcast]
|
||||
author: "Sam"
|
||||
---
|
||||
|
||||
# Distributed Audio
|
||||
17
test/fixtures/fail-unknown-field/content/edge/l3/audio-architecture.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
id: audio-architecture
|
||||
area: edge
|
||||
level: 3
|
||||
title: "Audio architecture note"
|
||||
claim: "How the eight endpoints stay in sync."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: []
|
||||
metrics: []
|
||||
artefacts: []
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio]
|
||||
---
|
||||
|
||||
# Audio architecture note
|
||||
1
test/fixtures/fail-unknown-field/expect.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
author: unknown field (the schema is frozen; see docs/content-schema.md)
|
||||
1
test/fixtures/fail-unknown-nested-field/content/assets/audio-rack.svg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"/>
|
||||
|
After Width: | Height: | Size: 65 B |
19
test/fixtures/fail-unknown-nested-field/content/edge/audio.md
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
id: audio
|
||||
area: edge
|
||||
level: 2
|
||||
title: "Distributed Audio"
|
||||
claim: "Eight synchronised endpoints with music ducking for voice."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: [Snapcast, Mopidy, Spotify]
|
||||
metrics: [{label: "endpoints", value: 8}]
|
||||
artefacts:
|
||||
- type: doc
|
||||
label: "Architecture note"
|
||||
url: "content/edge/l3/audio-architecture.md"
|
||||
- {type: image, label: "Rack diagram", url: "content/assets/audio-rack.svg", caption: "the rack"}
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio, snapcast]
|
||||
---
|
||||
15
test/fixtures/fail-unknown-nested-field/content/edge/l3/audio-architecture.md
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
id: audio-architecture
|
||||
area: edge
|
||||
level: 3
|
||||
title: "Audio architecture note"
|
||||
claim: "How the eight endpoints stay in sync."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: []
|
||||
metrics: []
|
||||
artefacts: []
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio]
|
||||
---
|
||||
1
test/fixtures/fail-unknown-nested-field/expect.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
artefacts[1].caption: unknown field (artefacts allow only 'type', 'label' and 'url')
|
||||
25
test/fixtures/ok-block-scalars/content/about/background.md
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
---
|
||||
# a leading comment is allowed
|
||||
id: background
|
||||
area: about
|
||||
level: 1
|
||||
title: >-
|
||||
Twenty-five years of delivery
|
||||
claim: |
|
||||
Shipped software since 2000.
|
||||
Now agent systems and the platform under them.
|
||||
confidence: delivered
|
||||
period: "2000-"
|
||||
tech:
|
||||
- "NixOS"
|
||||
- 'Golang'
|
||||
metrics:
|
||||
- label: years
|
||||
value: 25
|
||||
artefacts: []
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [narrative, career]
|
||||
---
|
||||
|
||||
# Twenty-five years of delivery
|
||||
0
test/fixtures/ok-block-scalars/expect.txt
vendored
Normal file
1
test/fixtures/ok-clean/content/assets/audio-rack.svg
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10"/>
|
||||
|
After Width: | Height: | Size: 65 B |
21
test/fixtures/ok-clean/content/edge/audio.md
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
id: audio
|
||||
area: edge
|
||||
level: 2
|
||||
title: "Distributed Audio"
|
||||
claim: "Eight synchronised endpoints with music ducking for voice."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: [Snapcast, Mopidy, Spotify]
|
||||
metrics: [{label: "endpoints", value: 8}]
|
||||
artefacts:
|
||||
- type: doc
|
||||
label: "Architecture note"
|
||||
url: "content/edge/l3/audio-architecture.md"
|
||||
- {type: image, label: "Rack diagram", url: "content/assets/audio-rack.svg"}
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio, snapcast]
|
||||
---
|
||||
|
||||
# Distributed Audio
|
||||
17
test/fixtures/ok-clean/content/edge/l3/audio-architecture.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
id: audio-architecture
|
||||
area: edge
|
||||
level: 3
|
||||
title: "Audio architecture note"
|
||||
claim: "How the eight endpoints stay in sync."
|
||||
confidence: running
|
||||
period: "2023-"
|
||||
tech: []
|
||||
metrics: []
|
||||
artefacts: []
|
||||
public: true
|
||||
last_verified: 2026-10-20
|
||||
tags: [audio]
|
||||
---
|
||||
|
||||
# Audio architecture note
|
||||