Unified Node Pipeline
SoftCopy now runs a single node-based pipeline for daily generation, analytics, and publishing metadata.
Overview
- Node definitions live in
config/nodes.jsonand are loaded byNodeRegistry. - Each node declares:
id,kind,familydepends_on(graph edges)output_policy(where outputs are written)publish_policy(day/stream visibility and labels)- scheduler behavior (
parallelizable,rerun_policy,step_order) Schedulerresolves the dependency closure for requested targets, executes nodes in topological order, and runs ready parallelizable nodes concurrently.
Flow
graph TD
A["transcript"] --> B["transcript_clean"]
B --> C["narrative"]
C --> D["sam_pov"]
C --> E["dave_pov"]
C --> F["Pulse / Odyssey / Obey"]
D --> G["signals"]
E --> G
F --> G
G --> H["rollups"]
H --> I["insights"]
I --> J["publish (site/day+streams)"]
Dashboard Integration
- The dashboard reads and edits node metadata via
/nodesendpoints. - Day and batch runs enqueue scheduler-backed jobs (
run_nodes,run_day,run_range). - Prompt create/update operations synchronize prompt metadata into node entries so custom prompts are first-class pipeline nodes.
Publish Integration
- Publisher reads node metadata from the registry.
publish_policy.day_sectioncontrols inclusion in day pages.publish_policy.stream.enabledand stream metadata (slug,title) control stream pages.output_policy.relative_pathandextra_relative_pathsdefine which files are read for each node.
Adding New Nodes and Prompts
- Register node metadata in
config/nodes.json(or via dashboard node APIs). - Set
depends_onto model prerequisites. - Set
output_policy.relative_pathto the canonical output location. - Set
publish_policyto opt in/out of day and stream pages. - For prompt nodes:
- Create/update the runtime prompt definition.
- Ensure prompt/node IDs match.
- Use dependencies to anchor fan-out and analytics prerequisites.
Rerun Semantics
force=True: forces explicit targets.force_prerequisites=True: also forces dependency closure.rerun_dependents=True: when a node reruns, downstream dependents are forced in the same run.- Prompt cache and node rerun policy combine to decide
completedvsskipped.