Add the envisioner and marketresearcher innovation roles (WI-053)#128
Merged
Conversation
nateshpp
force-pushed
the
feature/agent-org-docs
branch
from
July 7, 2026 19:34
96b6ddb to
e9d3a51
Compare
nateshpp
force-pushed
the
feature/innovation-roles
branch
from
July 7, 2026 19:35
066956f to
04d6670
Compare
Two governed producer roles feed Checkpoint 1 the same way the researcher does:
an independent check at review-proposals.mjs before a proposal ever reaches the
backlog. Neither joins the default maker/checker sequence.
- prompts/roles/envisioner.txt: proposes one scoped innovation candidate grounded
in an owner-approved direction (DECISIONS.md, ROADMAP.md), weekly schedule.
- prompts/roles/marketresearcher.txt: an opt-in ecosystem scan, gated by
market_scan_enabled (default off); findings are sourced and paraphrased, never
raw scraped content. Named without a hyphen because render-prompt.mjs requires
a role name matching ^[a-z]+$; a hyphenated name would either fail role
validation outright or leave its ${..._ID}/${..._MODEL} placeholders
unsubstituted, since buildRunnerEnv derives them from role.toUpperCase() and
the placeholder regex does not match a hyphen.
- .modonome/config.yaml: both roles added with a models fallback list, skills,
tools, and a weekly schedule.cron.
- .github/workflows/modonome-schedule.yml: regenerated (node scripts/agent/
triggers.mjs --write) so the two new scheduled crew roles get a dry-run job.
- docs/agent-org.md and docs/adr/ADR-044-agent-org-structure.md: the roster and
implementation status move these from planned to shipped.
- tests/envisioner-role.test.mjs, tests/marketresearcher-role.test.mjs: prompt
rendering and planCycle resolution for each role.
- tests/researcher-role.test.mjs: the missing-prompt-file test used "envisioner"
as its example of a promptless role; now that envisioner has a real prompt,
the test uses "ghostrole" instead, preserving the same fail-closed assertion.
nateshpp
force-pushed
the
feature/innovation-roles
branch
from
July 8, 2026 02:11
04d6670 to
bc40581
Compare
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.
What this PR does
Ships the two innovation roles anticipated by Milestone 5: an envisioner (scoped innovation proposals grounded in an owner-approved direction) and a marketresearcher (an opt-in ecosystem scan). Both are governed producers that feed Checkpoint 1 through
review-proposals.mjs, exactly like the existing researcher, so they add no new trust surface. Neither joins the default maker/checker sequence. Closes WI-053.Stacked on #126 (base is
feature/agent-org-docs, since this updates the roster doc it ships). Merge #125, then #126, then this.prompts/roles/envisioner.txt: proposes one scoped innovation candidate grounded inDECISIONS.md/ROADMAP.md; weekly schedule.prompts/roles/marketresearcher.txt: an opt-in scan, gated bymarket_scan_enabled(default off); findings are sourced and paraphrased, never raw scraped content.marketresearcher, notmarket-researcher.scripts/agent/render-prompt.mjsrequires a role name matching^[a-z]+$, andrun-cycle.mjs'sbuildRunnerEnvderives each role's${..._ID}/${..._MODEL}placeholder names fromrole.toUpperCase(). A hyphenated role name would fail render-prompt's own validation, and even past that, the${VAR}substitution regex doesn't match a hyphen, so the placeholder would silently render unsubstituted. Verified with a direct render smoke test (see Test evidence)..modonome/config.yaml: both roles added with a model fallback list, skills, tools, and a weeklyschedule.cron..github/workflows/modonome-schedule.yml: regenerated (node scripts/agent/triggers.mjs --write) so the two new scheduled roles get a dry-run job. This is a live end-to-end proof that the WI-032 generator handles a real config change correctly.docs/agent-org.mdanddocs/adr/ADR-044-agent-org-structure.md: the roster and implementation status move these two roles from planned to shipped.tests/envisioner-role.test.mjs,tests/marketresearcher-role.test.mjs(prompt rendering +planCycleresolution).tests/researcher-role.test.mjsis updated: its missing-prompt-file example used"envisioner"; now that envisioner has a real prompt, it uses"ghostrole"instead, preserving the same fail-closed assertion.Governance checklist
npm run verifypasses through every governance gate and AgentProof (25/25). Stops only atcheck:frontend/npm teston missing dev deps (esbuild,js-yaml) that CI installs.schedulefield WI-032 added)Test evidence