') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); Add capability map to gen-plan by zevorn · Pull Request #151 · PolyArch/humanize · GitHub
Skip to content

Add capability map to gen-plan - #151

Merged
zevorn merged 6 commits into
PolyArch:devfrom
zevorn:codex/feature-capability-map
Jul 7, 2026
Merged

Add capability map to gen-plan#151
zevorn merged 6 commits into
PolyArch:devfrom
zevorn:codex/feature-capability-map

Conversation

@zevorn

@zevornzevorn commented May 9, 2026

Copy link
Copy Markdown
Contributor

Background

This change is inspired by the paper EvoDev: An Iterative Feature-Driven Framework for End-to-End Software Development with LLM-based Agents. EvoDev uses a Feature Map to model feature dependencies and propagate business, design, and implementation context across iterations.

This PR does not adopt EvoDev wholesale. It applies the same planning insight to Humanize's gen-plan: every implementation task should know where it sits in the global capability/feature structure. The new map gives tasks a shared frame of reference before they are broken down into executable coding / analyze items.

After adding the map to plan generation, this also wires that context into RLCR execution so Claude coding prompts, Codex reviews, round contracts, and the Goal Tracker can keep work anchored to the relevant capability node instead of losing the global position during later rounds.

Summary

  • add a Feature Map / Capability Map section to the gen-plan output template
  • require gen-plan to preserve capability-level business/design/implementation context before Task Breakdown
  • document refine-plan preservation behavior for the optional capability map section
  • add RLCR Capability Anchor guidance to round-0 setup, follow-up prompts, drift recovery, and review phase prompts
  • add a Capability column to Goal Tracker Active Tasks generated by RLCR setup
  • add Codex Capability Map Alignment Check sections to regular and full alignment review templates
  • update the Claude-facing Humanize command/skill docs so the plugin exposes the new capability-anchor behavior
  • document capability maps and RLCR capability anchors in README and the Claude usage guide
  • keep Claude plugin metadata and version unchanged at 1.17.0
  • add structure tests for the new planning and RLCR execution contracts

Validation

  • jq empty .claude-plugin/plugin.json .claude-plugin/marketplace.json
  • bash tests/test-task-tag-routing.sh
  • bash tests/test-template-references.sh
  • bash tests/test-templates-comprehensive.sh
  • bash tests/robustness/test-setup-scripts-robustness.sh
  • bash tests/test-plan-file-hooks.sh
  • bash tests/test-gen-plan.sh
  • bash tests/test-refine-plan.sh
  • git diff --check

Signed-off-by: Chao Liu chao.liu.zevorn@gmail.com
@zevorn
zevorn marked this pull request as ready for review May 9, 2026 16:05
zevorn added 2 commits May 10, 2026 01:08
Signed-off-by: Chao Liu chao.liu.zevorn@gmail.com
Signed-off-by: Chao Liu chao.liu.zevorn@gmail.com
@zevorn
zevornforce-pushed the codex/feature-capability-map branch from 2a0db29 to 459af3fCompareMay 9, 2026 17:19
…tion
Signed-off-by: Chao Liu <chao.liu@processmission.com>
# Conflicts:
#	README.md
#	commands/gen-plan.md
#	docs/usage.md
#	prompt-template/codex/full-alignment-review.md

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:e0857476d4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadscripts/setup-rlcr-loop.sh Outdated
Comment threadscripts/setup-rlcr-loop.sh Outdated
Signed-off-by: Chao Liu <chao.liu@processmission.com>
@zevorn

Copy link
Copy Markdown
ContributorAuthor

@codex review again

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:43a57a0faf

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadscripts/setup-rlcr-loop.sh Outdated
Signed-off-by: Chao Liu <chao.liu@processmission.com>
@zevorn

Copy link
Copy Markdown
ContributorAuthor

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Keep them coming!

Reviewed commit:8d896a4f80

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@zevornzevorn changed the title [codex] Add capability map to gen-planAdd capability map to gen-planJun 13, 2026
@zevorn
zevorn merged commit e08c0d0 into PolyArch:devJul 7, 2026
5 checks passed
Sign up for freeto 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.

1 participant

@zevorn