SoftCopy User Guide
What Runs Each Day
SoftCopy runs a unified node scheduler. Instead of separate legacy pipelines, all daily work is represented as nodes with dependencies.
Typical flow:
transcripttranscript_clean- story prompt nodes (
narrative,sam_pov,dave_pov,Pulse,Odyssey,Obey) - analytics nodes (
signals,rollups,insights) - publish reads node metadata and generated outputs
Primary Commands
softcopy process schedule --date today
softcopy ingestion coverage
softcopy ingestion plan --mode catch_up_recent
softcopy ingestion run --mode catch_up_recent
softcopy artifacts --date today
softcopy daily --date yesterday
softcopy ui
Ingestion Workflows
Use the ingestion control plane for coverage audits, backfill, repair, and verification.
softcopy ingestion coverage --refresh
softcopy ingestion plan --mode backfill_range --range-start-day 2026-01-01 --range-end-day 2026-01-31
softcopy ingestion run --mode backfill_range --range-start-day 2026-01-01 --range-end-day 2026-01-31
softcopy ingestion reconcile
softcopy ingestion verify --job-id <job_id>
Legacy commands (softcopy ingest, softcopy ledger, softcopy cache, softcopy memory export/embed/publish) are still available for compatibility, but they are stage-level primitives rather than control-plane orchestration.
Running Specific Nodes
softcopy process schedule --date 2026-03-20 --targets narrative,sam_pov
softcopy process schedule --date 2026-03-20 --targets narrative --force
softcopy process schedule --date 2026-03-20 --targets narrative --force --force-prerequisites
softcopy process schedule --date 2026-03-20 --targets narrative --force --rerun-dependents
Node Registry
Node metadata is stored in config/nodes.json.
Important fields:
depends_on: prerequisite node IDsoutput_policy.relative_path: canonical output path templatepublish_policy.day_section: include on day pagepublish_policy.stream.enabled: include in stream pagespublish_policy.stream.slug/title: stream metadataparallelizable,rerun_policy,step_order: scheduler behavior
Adding a New Prompt Node
- Create/update prompt in the dashboard (
/prompts). - Ensure output policy and dependencies are set.
- Prompt-to-node sync materializes/updates the node in
config/nodes.json. - Run it via scheduler or day/batch dashboard jobs.
Publishing Behavior
Publisher uses node metadata directly:
- Day page sections come from nodes with
publish_policy.day_section = true. - Stream pages come from nodes with
publish_policy.stream.enabled = true. - Content paths come from
output_policy(or explicit day/stream path overrides in publish policy). - Current story stream family is
Pulse,Odyssey,Obey(legacynsfw1,nsfw2,romanticstream pages are retired).
Testing
pytest softcopy/pipeline/tests
pytest softcopy/site/tests
pytest softcopy/dashboard/tests