feat(creative-ideas): wire the Creative Ideas thread into the running daemon (#2647)#2709
Merged
rysweet merged 1 commit intoJul 6, 2026
Conversation
… daemon (#2647) The Creative Ideas subsystem merged in #2647 but was never activated: the OODA daemon never registered the generator thread, so runtime activity was zero and the operator saw it "not working". This wires it in. What changed (additive): - Daemon: build the cognitive-thread `Mind` runtime when EITHER SIMARD_COGNITIVE_THREADS_ENABLED (maintenance/engineer-log, default-OFF) OR the Creative Ideas gate is on, and register the thread via a new `register_creative_ideas_if_enabled` seam — independent of the generic master switch, mirroring the default-ON Overseer/Journal threads. - Config: CreativeIdeasConfig is now default-ON, opt-out. `from_lookup` treats unset/empty/truthy as ON; only an explicit falsey value (0/false/no/off) opts out via SIMARD_CREATIVE_IDEAS_ENABLED. - Observability: a dedicated startup log line ("creative-ideas thread ENABLED (default) (interval=…)") plus the existing per-tick cognitive-thread summary (generated/persisted/reviewed/routed counts), which also flows into the Overseer activity feed and dashboard/journal. - The wired tick drives the full pipeline: generation -> ProspectiveMemory -> reviewers (crusty-old-engineer, philosophy-guardian, measurability) + synthesis -> routing (accepted -> goal; needs-human -> labeled, @rysweet-tagged issue; idea PRs carry the block-until-human-review label, never --admin/--no-verify). - systemd unit documents the default-ON opt-out and least-privilege gh scope. - Refresh stale "not wired / gated OFF" comments in lib.rs, threads/mod.rs, and cognitive_memory/creative_idea.rs. Tests (hermetic, no network): registration under default-ON and unset env; no registration when disabled via env; a full enabled tick generates ideas into ProspectiveMemory and runs review + routing (goal and issue paths) with injected fakes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
📊 Coverage Summary
Coverage data from CI run. Test files matching |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The Creative Ideas subsystem merged in #2647 but was never activated. The
OODA daemon never called
creative_ideas::register(...), so at runtime therewas zero creative-ideas activity — the operator saw it "not working". This
PR wires the generator thread into the running daemon so it operates on its
configured cadence.
What (additive)
src/operator_commands_ooda/daemon/mod.rs): thecognitive-thread
Mindruntime is now built when eitherSIMARD_COGNITIVE_THREADS_ENABLED(maintenance/engineer-log, default-OFF)or the Creative Ideas gate is on. The thread is registered through a new
register_creative_ideas_if_enabled(&mut mind, &cfg)seam, independent ofthe generic master switch — mirroring the default-ON Overseer/Journal threads.
src/creative_ideas/mod.rs):CreativeIdeasConfigis nowdefault-ON, opt-out.
from_lookupleaves the subsystem ON forunset/empty/truthy values; only an explicit falsey value (
0/false/no/off)opts out via
SIMARD_CREATIVE_IDEAS_ENABLED.generation →
ProspectiveMemoryideas → reviewers (crusty-old-engineer,philosophy-guardian, measurability) + synthesis → routing
(accepted → goal; needs-human → labeled, @rysweet-tagged issue;
idea PRs carry the
creative-idea-needs-human-reviewblocking label, enforcedby standard GitHub mechanisms — never
--admin/--no-verify).(
creative-ideas thread ENABLED (default) (interval = 86400s; …)) plus theexisting per-tick cognitive-thread summary (generated/persisted/reviewed/routed
counts), which also flows into the Overseer activity feed and dashboard/journal.
scripts/simard-ooda.service): documents the default-ON opt-outand the least-privilege
gh/token scope the routing step needs.now-inaccurate "not wired / gated OFF" comments in
lib.rs,cognitive_threads/threads/mod.rs, andcognitive_memory/creative_idea.rs.Tests (hermetic, no network)
register_if_enabled_registers_when_default_on/_registers_when_env_unset— the daemon seam registers the thread at startup.
register_if_enabled_skips_when_opted_out/_skips_when_disabled_via_env— disabled via env ⇒ not registered.
wired_thread_tick_generates_reviews_and_routes— an enabled tick generatesideas into
ProspectiveMemoryand runs the review + routing pipeline(goal path).
wired_pipeline_human_review_files_issue_with_label_and_owner— needs-humanrouting files a labeled, owner-tagged issue.
Deployment note
After merge + redeploy, the operator will see the startup ENABLED line and, on
each due tick, creative ideas being generated + reviewed + routed.
Refs #2647