Evidence-Backed Bulletin Workflow¶
This guide demonstrates one retained workflow family that carries the core
bijux-dag operator story in a single domain path:
- runtime graph inputs choose both the source note and the branch lane
- typed outputs produce retained branch evidence and a promotable bulletin
- warm cache reuse is visible on the same workflow family
- changed-input comparison identifies the branch and content drift
- focused replay proves the publication boundary can be rerun without branch decision drift
- strict verification and artifact hashing confirm the retained evidence
- artifact promotion copies the final bulletin into a deliverables root
The workflow is backed by
evidence/dag/authoring/examples/audience-branch-bulletin.dag.json plus the
source fixtures under evidence/dag/authoring/examples/audience-branch-source.
Prepare Inputs¶
Run these commands from repository root:
GRAPH_PATH="evidence/dag/authoring/examples/audience-branch-bulletin.dag.json"
SOURCE_NOTE="$(pwd)/evidence/dag/authoring/examples/audience-branch-source/team-update.md"
REVISED_NOTE="$(pwd)/evidence/dag/authoring/examples/audience-branch-source/team-update-revised.md"
RUN_ROOT="./artifacts/evidence-backed-bulletin-runs"
CACHE_ROOT="./artifacts/evidence-backed-bulletin-cache"
DELIVERABLES_ROOT="./artifacts/evidence-backed-bulletin-deliverables"
Validate The Graph¶
Run The First Technical Bulletin¶
This first run writes retained evidence for one selected branch lane plus the final publication output:
bijux-dag run --json "${GRAPH_PATH}" \
--out "${RUN_ROOT}" \
--run-id branch-bulletin-cold \
--cache readwrite \
--cache-dir "${CACHE_ROOT}" \
--input "source_note=${SOURCE_NOTE}" \
--input "audience_mode=technical"
Inspect the retained publication payload:
artifacts/evidence-backed-bulletin-runs/run-branch-bulletin-cold/nodes/publish_bulletin/outputs/publish/bulletin.md
You should see a technical bulletin with the selected lane recorded in
publish/selection.json.
Show Warm Cache Reuse¶
Run the same workflow again with the same cache directory and inputs:
bijux-dag run --json "${GRAPH_PATH}" \
--out "${RUN_ROOT}" \
--run-id branch-bulletin-warm \
--cache readwrite \
--cache-dir "${CACHE_ROOT}" \
--input "source_note=${SOURCE_NOTE}" \
--input "audience_mode=technical"
On the warm run, prepare_note, choose_audience_lane, and
render_technical_bulletin should be reused from cache. The final
publish_bulletin node is intentionally regenerated so the published artifact
is rebuilt from retained upstream evidence.
Inspect Artifact Hash And Lineage¶
Inspect the published bulletin artifact and verify its hash directly:
bijux-dag artifact registry "${RUN_ROOT}/run-branch-bulletin-cold" --json
bijux-dag artifact-inspect \
"${RUN_ROOT}/run-branch-bulletin-cold" \
publish_bulletin:bulletin.md \
--json
bijux-dag hash artifact --json \
"${RUN_ROOT}/run-branch-bulletin-cold/nodes/publish_bulletin/outputs/publish/bulletin.md"
Inspect the retained lineage snapshot:
The final bulletin should show upstream lineage through the selected render node and the prepared source note.
Compare A Changed Executive Run¶
Now change both the input note and the branch selector:
bijux-dag run --json "${GRAPH_PATH}" \
--out "${RUN_ROOT}" \
--run-id branch-bulletin-updated \
--cache readwrite \
--cache-dir "${CACHE_ROOT}" \
--input "source_note=${REVISED_NOTE}" \
--input "audience_mode=executive"
Compare the warm technical run against the updated executive run:
bijux-dag runs compare \
branch-bulletin-warm \
branch-bulletin-updated \
--root "${RUN_ROOT}" \
--json
The comparison should show:
input_values.changed_inputsincludessource_noteandaudience_modenode_statuses.changed_nodesincludes both render lanesoutput_hashes.changed_outputsincludespublish_bulletin:publish/bulletin.mdoutput_hashes.changed_outputsincludespublish_bulletin:publish/selection.json
This is the practical proof that the workflow records both content drift and branch-selection drift in retained evidence.
Prove Focused Replay At The Publication Boundary¶
Run one source bulletin through the executive lane, then replay only the publication boundary with dependency closure and replay proof enabled:
bijux-dag run --json "${GRAPH_PATH}" \
--out "${RUN_ROOT}" \
--run-id branch-bulletin-proof-source \
--input "source_note=${SOURCE_NOTE}" \
--input "audience_mode=executive"
bijux-dag replay --json \
--source-run-id branch-bulletin-proof-source \
--source-run-root "${RUN_ROOT}" \
--out "${RUN_ROOT}" \
--run-id branch-bulletin-replay \
--select id:publish_bulletin \
--dependency-closure \
--prove
The replay proof should show:
replay_proof.equivalent = truereplay_proof.fidelity_level = "strict_equivalent"replay_proof.branch_decision_drift_nodes = []
This is the bounded rerun story: replay reexecutes only the selected closure and proves that the retained branch decision stayed stable.
Verify The Replay Strictly¶
Strict verification should complete without root-level errors. Skipped branch lanes remain visible as skipped evidence rather than being treated as silent loss.
Promote The Final Bulletin¶
Promote the updated executive bulletin into a deliverables root:
bijux-dag artifact promote \
"${RUN_ROOT}/run-branch-bulletin-updated" \
publish_bulletin:bulletin.md \
--deliverables-root "${DELIVERABLES_ROOT}" \
--to release \
--json
The promoted payload lands at:
artifacts/evidence-backed-bulletin-deliverables/release/branch-bulletin-updated/publish_bulletin/bulletin/payload/bulletin.md
Failure Signals¶
When the input file path is wrong or empty, prepare_note fails immediately
with a direct file error instead of letting the workflow drift into a vague
publication failure. When the branch lane is not selected, the nonmatching
render node is retained with skip_reason.reason =
"branch_decision_not_selected" so the skipped lane remains inspectable.
Reading Rule¶
Use this guide when you want one retained workflow family that demonstrates
cache reuse, changed-run attribution, replay proof, artifact integrity, and
promotion together on the stable bijux-dag operator surface.