| workflow_id | package_normalization | ||||
|---|---|---|---|---|---|
| workflow_kind | module | ||||
| stability | canonical | ||||
| workflow_group | package | ||||
| runner_mode | guided | ||||
| default_skill | |||||
| launch_templates | |||||
| required_context |
|
||||
| expected_outputs |
|
||||
| done_when |
|
||||
| approval_gate | none |
To maintain a high-fidelity "Content Factory" where research, prose, and multimedia can be iteratively refined, every publication package should adhere to a canonical structural "Scaffold".
This structure ensures that agents (like me) and authors (like you) always know where to find the evidence, the draft, and the production artifacts.
| Component | Directory / File | Purpose |
|---|---|---|
| Manifest | status.yaml |
Tracks lifecycle stage (research, essay_iteration, etc.), revision count, and package config. |
| Live Draft | [slug].md |
The current working version of the essay. Pointed to by config.markdown_path. |
| Evidence | sources/ or papers/ |
Local archive of research materials. Contains sources/index.md or papers/index.md plus a markdown conversion subtree. |
| Claims | claims/ |
Package-wide claim ledgers, contradiction registers, evidence authorization ledgers, scoring rubrics, and provenance manifests. |
| Iterations | iterations/r<revision>/ |
Bounded essay candidates and their packet-local blueprints, prewrite gates, reviews, decisions, and ceiling reports. |
| Pivot Work | pivot/active/, pivot/archive/<pivot-id>/ |
Post-ceiling successor-search artifacts. Active search has one workspace; superseded searches are archived. |
| Multimedia | artifacts/ |
Derived assets: NotebookLM bundles, podcast audio, YouTube cue sheets, and images. |
| History | archive/ |
Historical snapshots of the draft before a new Revision pass. |
A normalized package must have at least these keys in status.yaml:
# Standard Stage Tracking
# done: true/false for paper_intake, research, essay_iteration, etc.
kind: leaf
publication: my-essay-slug
parent_package: my-umbrella-package # optional for top-level single-publication packages
revision: 2 # Tracks how many refinement cycles the package has survived
config:
markdown_path: "publications/my-package/my-essay.md"
substack_slug: "my-essay-slug"
evidence_path: "publications/my-package/papers" # optional when the leaf reuses a shared source tree
notebooklm_notebook_title: "Notebook title" # optional when a NotebookLM notebook exists
# Optional: ignore_scaffold_audit: ["artifacts", "archive"]If a package is flagged during a Pre-Flight Check (./content-agent validate or npm run check:package-lifecycle):
- Pointers: Ensure
markdown_pathis correct. If the draft is in a subfolder (e.g. for umbrella packages), use the full path relative to the repo root. - Sources: If the essay cites external links, bring them into
sources/orpapers/using thepaper-intakeworkflow. If a leaf package intentionally reuses a shared evidence tree in its umbrella, pointconfig.evidence_paththere instead of duplicating the library. - Artifacts: If creating a podcast or video, initialize the
artifacts/folder. - Root hygiene: Keep umbrella and package roots for orientation files, status manifests, and stable live drafts. Put revision packets in
iterations/, claim-state files inclaims/, and post-ceiling search files inpivot/. - Suppression: If a legacy folder structure is intentional, add it to
config.ignore_scaffold_audit.
Normalization allows for Auditability. If we know where the evidence library is, whether that is local sources/ or a shared config.evidence_path, we can automatically verify if the latest prose still reflects the evidence.