feat(intake): Themes: keyword list and theme-keyed cross-repo bundling - #312
Merged
Conversation
#311) Bundles phase 1. Auto-bundling keyed on Target: grouped by where code lives, not what the work is about. Prompts now carry an optional `Themes:` list (same form as `Repos:`, controlled vocabulary in PyAutoMind/themes.md): the first keyword is the primary theme and the grouping key, the rest are affinity for packing. - parse_list_header / parse_themes / unknown_themes; census records carry `themes`, the census carries the vocabulary and unknown flags. - auto_bundles(): pool by primary theme (Target as fallback for un-themed prompts); greedy affinity packing (seed = highest priority, then max Jaccard overlap of theme lists; ties priority -> seed's target -> path) under the existing caps; every prompt in <= 1 bundle. Titles = theme + shared secondaries; theme-keyed cards gain a Repo column; unknown keywords warn on the card and in Hygiene. - intake classify --themes a,b writes `Themes:` after `Repos:`; formalisation never blocks on it. - Un-themed Minds render byte-identically to before (regression test pins the card head, table and html row). - 12 tests. Closes #311 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Px3t8Ggy1PUmL9JdiLGip3
…wall) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Px3t8Ggy1PUmL9JdiLGip3
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.
Summary
Bundles phase 1 (closes #311). The auto-bundler shipped in #310 grouped on
Target:— "three things that live in autoarray". Prompts now carry an optionalThemes:keyword list; the first keyword is the primary theme and the grouping key, the rest are packing affinity. Bundles are now topical and cross-repo — the thing Target keying could not produce.Changes
_intake.py:Themes:list parsing (same form asRepos:), vocabulary fromPyAutoMind/themes.md, unknown-keywordauto_bundles()pools by primary theme (Target fallback for un-themed prompts) and packs greedily by Jaccard affinity of the full theme list under the existing caps (8 pts, ≤4 members, ≤1 large, min 2); each prompt in ≤1 bundle. Titles = theme + shared secondaries (samplers · jax-gradient); theme-keyed cards gain a Repo column.intake classify --themes a,bwrites the header at formalisation, never blocking.origin/main's renderer on six fixtures (md + html) and pinned bytest_an_unthemed_backlog_renders_exactly_as_it_did_before_themes.AGENTS.mddocuments the header and the packing.Result on the live backlog (companion Mind PR)
23 auto bundles: 22 theme-keyed, 1 Target-fallback (the 4 un-themed prompts). Top 8 rendered, every one spanning 2–3 repos:
pixelization(autoarray + workspaces),point-source(autogalaxy + autolens + pyautolens),ci-smoke,notebooks,samplers · jax-gradient(autofit + autolens_profiling),visualization,jax-compile,pixelization — bundle 2.API Changes
None. Prompt headers gain an optional
Themes:list;intake classifygains--themes.Downstream
Companion PyAutoMind PR:
themes.mdvocabulary (24 keywords),REFERENCE.md, spawn/ledger rules, workflow triggers,Themes:backfilled on 130/136 drafts, regenerated dashboard. Merge this PR first — the Mind PR's dashboard check renders with Brainmain.Design decisions: empty vocabulary disables the unknown-keyword warning (fresh Minds);
themes.mdis a controlled vocabulary and therefore code in ledger-merge terms (needs a human, likerepos.yaml), not ledger. Vocabulary gap noted: no keyword for PyAutoMemory/knowledge-wiki work yet.Test plan
pytest tests/test_intake_dashboard.py -q→ 96 passedPyAutoBrain/tests→ 618 passeddashboard --applythen--checkclean on the themed MindHeart RED at ship for unrelated reasons (release
integratefailure,shared_preloads.pytimeout, hook-manifest drift, stale PyAutoFit PR); shipped on explicit human acknowledgement.🤖 Generated with Claude Code
https://claude.ai/code/session_01Px3t8Ggy1PUmL9JdiLGip3