Skip to content

Add the envisioner and marketresearcher innovation roles (WI-053)#128

Merged
nateshpp merged 1 commit into
mainfrom
feature/innovation-roles
Jul 8, 2026
Merged

Add the envisioner and marketresearcher innovation roles (WI-053)#128
nateshpp merged 1 commit into
mainfrom
feature/innovation-roles

Conversation

@nateshpp

@nateshpp nateshpp commented Jul 7, 2026

Copy link
Copy Markdown
Collaborator

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 in DECISIONS.md/ROADMAP.md; weekly schedule.
  • prompts/roles/marketresearcher.txt: an opt-in scan, gated by market_scan_enabled (default off); findings are sourced and paraphrased, never raw scraped content.
  • Naming note: the market-research role is named marketresearcher, not market-researcher. scripts/agent/render-prompt.mjs requires a role name matching ^[a-z]+$, and run-cycle.mjs's buildRunnerEnv derives each role's ${..._ID}/${..._MODEL} placeholder names from role.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 weekly schedule.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.md and docs/adr/ADR-044-agent-org-structure.md: the roster and implementation status move these two roles from planned to shipped.
  • Tests: tests/envisioner-role.test.mjs, tests/marketresearcher-role.test.mjs (prompt rendering + planCycle resolution). tests/researcher-role.test.mjs is 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 verify passes through every governance gate and AgentProof (25/25). Stops only at check:frontend/npm test on missing dev deps (esbuild, js-yaml) that CI installs.
  • No em dashes in any tracked file
  • Prose states conclusions directly
  • No AI co-author lines in commit messages
  • Ratchet logic unchanged (n/a)
  • No new AgentProof scenario (n/a)
  • Config schema unchanged (n/a; uses the schedule field WI-032 added)
  • Prompt bundle unchanged (n/a; these are role prompts, not the core prompt)

Test evidence

$ node --test tests/envisioner-role.test.mjs tests/marketresearcher-role.test.mjs tests/researcher-role.test.mjs
# tests 15
# pass 15
# fail 0

$ ENVISIONER_ID=test ENVISIONER_MODEL=test PROMOTED_LEARNINGS=none node scripts/agent/render-prompt.mjs envisioner | grep -c '${'
0
$ MARKETRESEARCHER_ID=test MARKETRESEARCHER_MODEL=test PROMOTED_LEARNINGS=none node scripts/agent/render-prompt.mjs marketresearcher | grep -c '${'
0

$ node scripts/agent/triggers.mjs --check
Snapshot is current.

$ node agentproof/runner.mjs
PASS AP-01 ... AP-26 (25/25)

@nateshpp
nateshpp requested a review from techseek4vr as a code owner July 7, 2026 19:10
@nateshpp
nateshpp force-pushed the feature/agent-org-docs branch from 96b6ddb to e9d3a51 Compare July 7, 2026 19:34
@nateshpp
nateshpp force-pushed the feature/innovation-roles branch from 066956f to 04d6670 Compare July 7, 2026 19:35
Base automatically changed from feature/agent-org-docs to main July 8, 2026 02:10
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
nateshpp force-pushed the feature/innovation-roles branch from 04d6670 to bc40581 Compare July 8, 2026 02:11
@nateshpp
nateshpp merged commit 39ce38c into main Jul 8, 2026
6 checks passed
@nateshpp
nateshpp deleted the feature/innovation-roles branch July 8, 2026 02:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants