# Source Manifest

`course-manifest.json` is the traceability spine. Validate it before editing pages and again before delivery.

## Minimum shape

```json
{
  "version": 1,
  "course": {"title": "课程名", "subtitle": "副标题"},
  "pages": [
    {"id": "cover", "type": "cover", "title": "标题", "source": "brief:cover"},
    {"id": "qa", "type": "qa", "title": "Q&A", "source": "brief:qa"}
  ]
}
```

## Source pointer conventions

- `doc:filename#heading` — supplied document section.
- `slide:original-file#12` — original slide number.
- `brief:key` — explicit item in the user brief.
- `transcript:00:12:30` — supplied recording/transcript timestamp.
- `asset:filename` — supplied figure/table/image.

Every page needs a non-empty pointer. A pointer proves where the material came from; it is not a public citation unless the user intends it to be.

## Change discipline

- Keep page IDs stable after screenshots or links exist.
- Add, remove, and reorder pages in the manifest first, then update HTML.
- Run the validator after any structural change.
- Run static audit to compare manifest order with `data-page-id` order.
- If content is missing, leave a clear gap note outside the deliverable instead of inventing copy.
