* chore(ledger): start task task-01 for issue #31
* chore(ledger): finish task task-01 for issue #31
* chore(codex-keepalive): apply updates (PR #256)
* Add historical WAL output generator plugin
* Add historical workbook output generator wrapper
* Refactor historical update flow to use output generator
* fix: resolve CI failures
* fix: remove unused typing.Any import (lint F401)
The merge conflict resolution in 073de24 left an unused `from typing
import Any` in test_normalization_registry_first.py, causing the
lint-ruff Gate check to fail.
https://claude.ai/code/session_01JhCWWDJG8PqwaSbVPCGfm6
Co-authored-by: Claude <noreply@anthropic.com>
* Refactor historical output generator dependency wiring
* chore(codex-keepalive): apply updates (PR #256)
* refactor: move PPT screenshot output to OutputGenerator
* Refactor PPT link refresh into output generator
* fix: resolve CI failures
* chore(codex-keepalive): apply updates (PR #256)
* fix: remove "task" from non-issue prefix filter in extractIssueNumberFromPull
"Task #123" is a valid issue reference pattern. Keeping "task" in
the filter caused extractIssueNumberFromPull to return null, breaking
downstream PR metadata updates.
https://claude.ai/code/session_01JhCWWDJG8PqwaSbVPCGfm6
* chore(codex-keepalive): apply updates (PR #256)
* Add config-driven output generator registry and stage filtering
* fix: widen parsed_by_variant type to Mapping in _build_historical_workbook_output_generator
The _require_parsed_by_variant helper returns Mapping[str, Mapping[str, Any]]
but _build_historical_workbook_output_generator expected dict[str, dict[str, Any]],
causing a mypy arg-type error. Widen to Mapping to match the actual return type.
https://claude.ai/code/session_01JhCWWDJG8PqwaSbVPCGfm6
---------
Co-authored-by: stranske-automation-bot <stranske-automation-bot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Codex Agent <codex-agent@users.noreply.github.com>
Co-authored-by: Codex Agent <codex-agent@local>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Codex Agent <codex-agent@example.com>
Co-authored-by: Codex <codex@local>
Automated Status Summary
Scope
You want to generate new output types as maintainers change their minds (slides, extra exhibits, etc.) without rewiring everything.
Tasks
src/counter_risk/outputs/base.pydefining anOutputGeneratorinterface for output plugins.OutputGenerator.OutputGenerator.OutputGenerator.Acceptance criteria
OutputGeneratorclass and registering it in config adds a new output without requiring changes to other outputs.