Skip to content

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:

  1. transcript
  2. transcript_clean
  3. story prompt nodes (narrative, sam_pov, dave_pov, Pulse, Odyssey, Obey)
  4. analytics nodes (signals, rollups, insights)
  5. 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 IDs
  • output_policy.relative_path: canonical output path template
  • publish_policy.day_section: include on day page
  • publish_policy.stream.enabled: include in stream pages
  • publish_policy.stream.slug / title: stream metadata
  • parallelizable, rerun_policy, step_order: scheduler behavior

Adding a New Prompt Node

  1. Create/update prompt in the dashboard (/prompts).
  2. Ensure output policy and dependencies are set.
  3. Prompt-to-node sync materializes/updates the node in config/nodes.json.
  4. 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 (legacy nsfw1, nsfw2, romantic stream pages are retired).

Testing

pytest softcopy/pipeline/tests
pytest softcopy/site/tests
pytest softcopy/dashboard/tests