Compare commits

..

1 Commits

Author SHA1 Message Date
Hermes Agent
6990a8f3c6 feat(training): generate 1K frontend & creative code pattern pairs
Some checks failed
Architecture Lint / Linter Tests (pull_request) Successful in 32s
Smoke Test / smoke (pull_request) Failing after 29s
Validate Config / YAML Lint (pull_request) Failing after 19s
Validate Config / JSON Validate (pull_request) Successful in 25s
Validate Config / Python Syntax & Import Check (pull_request) Failing after 1m8s
Validate Config / Python Test Suite (pull_request) Has been skipped
Validate Config / Cron Syntax Check (pull_request) Successful in 16s
Validate Config / Shell Script Lint (pull_request) Failing after 1m6s
Validate Config / Deploy Script Dry Run (pull_request) Successful in 15s
Validate Config / Playbook Schema Validation (pull_request) Successful in 31s
Validate Training Data / validate (pull_request) Successful in 30s
PR Checklist / pr-checklist (pull_request) Successful in 4m45s
Architecture Lint / Lint Repository (pull_request) Failing after 29s
Closes #595

- New generator: scripts/generate_code_patterns_frontend_creative.py
- Output: training-data/code-patterns-frontend-&-creative.jsonl
- 25 domains: Three.js (scene/geometry/materials/lighting/camera/animation/textures),
  HTML/CSS/JS (dom/forms/layout/variables/performance/storage/utilities/meta),
  Playground UI (sovereignty badge, token budget, approval gate, skill card, circuit status),
  Gallery (masonry grid, lightbox, infinite scroll),
  Games (loop, canvas rendering, sprite anim, collision, input, particles, state machine)
- 1,000 pairs, ~780 KB, seeded (595) for reproducibility
2026-04-30 00:39:23 -04:00
5 changed files with 1506 additions and 785 deletions

View File

@@ -1,391 +0,0 @@
| Repo | Branch | Branch SHA | PR # | PR Merged At | SHA Match |
|------|--------|------------|------|--------------|-----------|
| timmy-home | fix/793 | a4e9c32a740e459d | #962 | 2026-04-29 | ✅ |
| timmy-home | fix/547 | ef6a729c32907811 | #842 | 2026-04-21 | ✅ |
| timmy-home | fix/548 | 60d876c12dfb20f9 | #840 | 2026-04-21 | ✅ |
| timmy-home | fix/551 | 8b02ae03ca60c566 | #839 | 2026-04-21 | ✅ |
| timmy-home | fix/553 | e752caa9a7b5a517 | #838 | 2026-04-21 | ✅ |
| timmy-home | fix/570 | 5c8ba43dbf6715e9 | #837 | 2026-04-21 | ✅ |
| timmy-home | fix/673 | 4dfa001b9a4b43de | #835 | 2026-04-21 | ✅ |
| timmy-home | fix/675 | 16fcabb5fc56deb4 | #834 | 2026-04-21 | ✅ |
| timmy-home | fix/676 | 0626a3fc33d28e14 | #833 | 2026-04-21 | ✅ |
| timmy-home | fix/677 | 3250c6d124a4164d | #832 | 2026-04-21 | ✅ |
| timmy-home | fix/685 | 1bce98a7615d53c9 | #829 | 2026-04-21 | ✅ |
| timmy-home | sprint/issue-827 | cb269347cc7e9136 | #828 | 2026-04-21 | ✅ |
| timmy-home | sprint/issue-822 | 47f136e9ab453878 | #823 | 2026-04-21 | ✅ |
| timmy-home | fix/648 | b615013e6329ecdb | #818 | 2026-04-21 | ✅ |
| timmy-home | fix/671 | c2aed1246464d239 | #813 | 2026-04-21 | ✅ |
| timmy-home | fix/680 | 23e62ed5d35ef6e8 | #807 | 2026-04-21 | ✅ |
| timmy-home | fix/792-grounding | 55c8100b8f4fdf09 | #804 | 2026-04-21 | ✅ |
| timmy-home | fix/791-crisis-detector | ed179d5e7594024e | #801 | 2026-04-21 | ✅ |
| timmy-home | feat/794-audit-trail | ec444d0749d0d268 | #799 | 2026-04-21 | ✅ |
| timmy-home | claude/issue-545 | 5402f5b35e79604f | #786 | 2026-04-22 | ✅ |
| timmy-home | fix/693 | 6c9ef6b4effc04bf | #788 | 2026-04-21 | ✅ |
| timmy-home | fix/749 | 909b88af56a1aaea | #787 | 2026-04-21 | ✅ |
| timmy-home | fix/545 | 1d2fbc747b204b89 | #782 | 2026-04-21 | ✅ |
| timmy-home | fix/567 | 3d57f42adc92acee | #781 | 2026-04-21 | ✅ |
| timmy-home | fix/662 | 6cbb9a98e1b6645b | #780 | 2026-04-21 | ✅ |
| timmy-home | fix/528 | 0716234d00053d82 | #779 | 2026-04-21 | ✅ |
| timmy-home | sprint/issue-663 | ada124bc7fd236c4 | #664 | 2026-04-14 | ✅ |
| timmy-home | docs/652-cron-bias-mitigation | fe0f49f2dbfc2c08 | #657 | 2026-04-14 | ✅ |
| timmy-home | whip/575-1776128804 | d7ce5f4762019cd5 | #656 | 2026-04-14 | ✅ |
| timmy-home | fix/650-big-brain-test-omission | a8777e0d80777c31 | #654 | 2026-04-14 | ✅ |
| timmy-home | queue/583-1776129201 | 01d6f69b07db7f0e | #647 | 2026-04-14 | ✅ |
| timmy-home | whip/584-1776127281 | 97549e9314910f1d | #641 | 2026-04-14 | ✅ |
| timmy-home | whip/583-1776128804 | fa656ad1098f6422 | #639 | 2026-04-14 | ✅ |
| timmy-home | whip/578-1776128804 | a5ff1f9583776e29 | #638 | 2026-04-14 | ✅ |
| timmy-home | whip/586-1776127532 | 6abfeb9d5d4e869c | #637 | 2026-04-14 | ✅ |
| timmy-home | burn/585-1776126523 | dd5c7a12b3398baa | #631 | 2026-04-14 | ✅ |
| timmy-home | burn/584-1776126523 | 726b867edd9830ca | #630 | 2026-04-14 | ✅ |
| timmy-home | burn/581-1776126523 | 329a9b77246e1627 | #629 | 2026-04-14 | ✅ |
| timmy-home | burn/587-1776125702 | e20ffd3e1dfafcd9 | #628 | 2026-04-14 | ✅ |
| timmy-home | burn/590-1776125702 | 9b5ec4b68e99040d | #625 | 2026-04-14 | ✅ |
| timmy-home | burn/573-1776117802 | 88f8f42b293fa697 | #619 | 2026-04-14 | ✅ |
| timmy-home | burn/574-1776117803 | 087e9ab677dc63ec | #617 | 2026-04-14 | ✅ |
| timmy-home | burn/tower-dialogue-508 | 013bba091a3c03a7 | #616 | 2026-04-14 | ✅ |
| timmy-home | burn/worktree-cleanup-507 | 1d695368e628c297 | #615 | 2026-04-14 | ✅ |
| timmy-home | burn/tower-arc-510 | 2efe7b6793fe1cef | #614 | 2026-04-14 | ✅ |
| timmy-home | burn/tower-trust-509 | 5148cf2544dc8d6b | #613 | 2026-04-14 | ✅ |
| timmy-home | fix/610-telemetry-and-corrupted-files | d44dec848a85d344 | #611 | 2026-04-13 | ✅ |
| timmy-home | research/rag-context-framework | 1806ab6c4214d899 | #609 | 2026-04-13 | ✅ |
| timmy-home | perplexity/waste-audit-2026-04-13 | 9becaa65e70040c5 | #606 | 2026-04-13 | ✅ |
| timmy-home | perplexity/fix-overnight-loop-provider | f8028cfb61543dee | #605 | 2026-04-13 | ✅ |
| timmy-home | perplexity/anthropic-ban-remediation | 4beae6e6c60a91b2 | #604 | 2026-04-13 | ✅ |
| timmy-home | perplexity/ops-runbook-index | 9aaabb7d37fa1489 | #603 | 2026-04-13 | ✅ |
| timmy-home | perplexity/hermes-maxi-manifesto | ac812179bf11568b | #600 | 2026-04-13 | ✅ |
| timmy-home | purge/openclaw | d5662ec71f6ad6db | #595 | 2026-04-12 | ✅ |
| timmy-home | census/hermes-agent | cc9b20ce737eb730 | #594 | 2026-04-11 | ✅ |
| timmy-home | fix/add-smoke-test | 56a56d7f1847f8aa | #592 | 2026-04-11 | ✅ |
| timmy-home | burn/20260409-2107-sovereign-stack | 1614ef5d667030d2 | #591 | 2026-04-10 | ✅ |
| timmy-home | harden-soul-anti-claude | 04ba74893c68d0e8 | #580 | 2026-04-08 | ✅ |
| timmy-home | timmy/mempalace-eval | 12f8589b7fceffbb | #569 | 2026-04-07 | ❌ |
| timmy-home | allegro/greptard-memory-report | 2ead2a49e32e8b42 | #525 | 2026-04-07 | ✅ |
| timmy-home | timmy/greptard-memory-report | ac328a82f583f32a | #523 | 2026-04-07 | ✅ |
| timmy-home | fix/kimi-heartbeat-queue-truth | 2e3ef67e821be83e | #415 | 2026-04-05 | ❌ |
| timmy-home | feat/dynamic-dispatch-optimizer | a56a2c4cd97f9bc1 | #478 | 2026-04-06 | ✅ |
| timmy-home | feat/sovereign-memory-explorer | 69929f6b68783088 | #477 | 2026-04-06 | ✅ |
| timmy-home | feat/failover-monitor-resilience | 11d9bfca92e9ad46 | #476 | 2026-04-06 | ✅ |
| timmy-home | feat/active-sovereign-review-gate | 2df34995fe024ab3 | #475 | 2026-04-06 | ✅ |
| timmy-home | feat/ultra-low-latency-telemetry | 7070ba9cff36b5de | #474 | 2026-04-06 | ✅ |
| timmy-home | feat/sovereign-review-gate | bc24313f1af6a8a3 | #473 | 2026-04-06 | ✅ |
| timmy-home | feat/sovereign-social-evennia | 4222eb559c3cc678 | #472 | 2026-04-06 | ✅ |
| timmy-home | feat/sovereign-health-dashboard | 641a86b09df5596b | #417 | 2026-04-05 | ✅ |
| timmy-home | feat/kimiclaw-heartbeat-launchd | 02f1a39e2aee16bc | #112 | 2026-04-04 | ❌ |
| timmy-home | codex/workflow-docs-cutover | cb0d81e6cd1db694 | #399 | 2026-04-04 | ❌ |
| timmy-home | security/author-whitelist-132 | 384fad6d5f84bc4a | #142 | 2026-03-31 | ✅ |
| timmy-home | feat/sovereign-finance-phase-22 | 5acbe11af2451f3a | #121 | 2026-03-30 | ✅ |
| timmy-home | feat/sovereign-evolution-redistribution | ade407d00e022a39 | #119 | 2026-03-30 | ✅ |
| timmy-home | chore/check-in-local-work | 9c1dd7fff7831d06 | #109 | 2026-03-30 | ✅ |
| timmy-home | feature/scorecard-generator | be6f7ef69887d960 | #102 | 2026-03-30 | ❌ |
| timmy-home | feature/uni-wizard | 66853883570b5154 | #100 | 2026-03-30 | ✅ |
| timmy-home | feature/vps-provisioning | 266d6ec0085505d5 | #81 | 2026-03-30 | ✅ |
| timmy-home | feature/syncthing-setup | eadb1eff2527972d | #80 | 2026-03-30 | ✅ |
| timmy-home | feature/timmy-bridge-epic | 3148ded347697012 | #65 | 2026-03-30 | ✅ |
| timmy-home | alexander/wizard-houses-ezra-bezalel | 85f0a34e3964007b | #51 | 2026-03-30 | ✅ |
| timmy-config | fix/881 | c47da00f624f3d34 | #958 | 2026-04-29 | ❌ |
| timmy-config | sprint/issue-242 | 437c5b6245176a49 | #843 | 2026-04-22 | ✅ |
| timmy-config | fix/689-scene-from-media | a2e61f6defac51a5 | #839 | 2026-04-21 | ✅ |
| timmy-config | fix/652 | b3390d4fee62e1c3 | #838 | 2026-04-21 | ✅ |
| timmy-config | burn/645-1776769427 | eacc6706811fd352 | #837 | 2026-04-21 | ✅ |
| timmy-config | burn/659-1776769427 | fe864962eca04233 | #836 | 2026-04-21 | ✅ |
| timmy-config | burn/691-1776769427 | ced6d20fde0c1d1c | #835 | 2026-04-21 | ✅ |
| timmy-config | fix/829-stale-process-cleanup | 19db78bbf0dbd114 | #834 | 2026-04-21 | ✅ |
| timmy-config | feat/687-quality-filter | a0266c83a424bb04 | #830 | 2026-04-20 | ✅ |
| timmy-config | fix/752-provenance-v2 | 8e791afecc847847 | #826 | 2026-04-20 | ✅ |
| timmy-config | fix/750-code-blocks | 6fcd2cc59a7e5ef3 | #825 | 2026-04-20 | ✅ |
| timmy-config | fix/823-pytest-collection | edd35eaa4b7d287b | #824 | 2026-04-20 | ✅ |
| timmy-config | fix/554-a11y-time-elements | 0833f43d972df5c2 | #569 | 2026-04-14 | ✅ |
| timmy-config | fix/glitch-html-report-544 | 3a18d0171cd7956f | #567 | 2026-04-14 | ✅ |
| timmy-config | queue/490-1776129201 | e394c85c0b8a45f3 | #558 | 2026-04-14 | ✅ |
| timmy-config | dawn/492-1776130053 | 1c3a11d08b803463 | #556 | 2026-04-14 | ✅ |
| timmy-config | whip/491-1776128804 | 6be215d3f5d47351 | #535 | 2026-04-14 | ✅ |
| timmy-config | whip/492-1776127532 | 837c62945e43f059 | #531 | 2026-04-14 | ✅ |
| timmy-config | burn/494-1776125702 | c09e54de727b1e94 | #530 | 2026-04-14 | ✅ |
| timmy-config | burn/pane-watchdog-515 | e419ada5c5b77bd3 | #526 | 2026-04-14 | ✅ |
| timmy-config | burn/auto-commit-511 | 5d3ccd1b07c88e58 | #525 | 2026-04-14 | ✅ |
| timmy-config | fix/ci-workflows-461 | 3214437652bbc45f | #524 | 2026-04-14 | ✅ |
| timmy-config | feature/session-state-persistence-512 | b71e365ed6956c0e | #523 | 2026-04-14 | ✅ |
| timmy-config | fix/workforce-manager-indent | 8483a6602aa37add | #522 | 2026-04-13 | ✅ |
| timmy-config | ci/fix-all-ci-failures | d50296e76b12658c | #521 | 2026-04-13 | ✅ |
| timmy-config | sprint/issue-516 | 9fdb8552e1d09158 | #517 | 2026-04-13 | ✅ |
| timmy-config | feat/20260413-kb-python-ast | 24887b615fb86b82 | #504 | 2026-04-13 | ✅ |
| timmy-config | perplexity/conflict-detector | 55fc678dc388d5cc | #500 | 2026-04-13 | ✅ |
| timmy-config | feat/multimodal-toolsuite | a1d1359debec3bbf | #499 | 2026-04-13 | ✅ |
| timmy-config | feat/nexus-visual-smoke-test-v2 | 7813871296f04322 | #498 | 2026-04-13 | ✅ |
| timmy-config | burn/20260412-1217-dashboard | 6863d9c0c5a40ea6 | #497 | 2026-04-13 | ✅ |
| timmy-config | timmy/issue-435-self-healing | b49a0abf390a8fb8 | #489 | 2026-04-13 | ✅ |
| timmy-config | burn/20260412-0809-audit-fix | 72de3eebdfd9db1f | #488 | 2026-04-13 | ✅ |
| timmy-config | purge/openclaw | 09aa06d65f9e7f93 | #487 | 2026-04-12 | ✅ |
| timmy-config | timmy/issue-434-ssh-trust | 19aa0830f469ef57 | #474 | 2026-04-11 | ✅ |
| timmy-config | feat/gofai-temporal-reasoner | 20bc0aa41a33c260 | #473 | 2026-04-11 | ✅ |
| timmy-config | feat/gofai-strips-planner | b6c0620c8322fce6 | #472 | 2026-04-11 | ✅ |
| timmy-config | feat/gofai-knowledge-base | d43deb1d79154ce1 | #471 | 2026-04-11 | ✅ |
| timmy-config | feat/gofai-symbolic-reasoner | 17de7f5df1ba0711 | #470 | 2026-04-11 | ✅ |
| timmy-config | feat/sovereign-guardrails-v2 | 343e190cc344309c | #468 | 2026-04-11 | ✅ |
| timmy-config | feat/force-multiplier-dispatch | 8ba3a6dcd85d94b3 | #465 | 2026-04-11 | ✅ |
| timmy-config | feat/sovereign-health-dashboard | 7305d97e8f349259 | #467 | 2026-04-11 | ✅ |
| timmy-config | fix/ci-architecture-lint | 2ce573f790b03b9d | #463 | 2026-04-11 | ✅ |
| timmy-config | fix/ci-validate-config | e8f2ecd2ea09bf35 | #462 | 2026-04-11 | ✅ |
| timmy-config | burn/cron-backup | add5d3c3819e5bb4 | #460 | 2026-04-11 | ✅ |
| timmy-config | timmy/pr-self-healing-safe | 06031d923faf3c28 | #469 | 2026-04-11 | ✅ |
| timmy-config | feat/sovereignty-linter | 6ad6469c409c47aa | #459 | 2026-04-11 | ✅ |
| timmy-config | burn/20260410-1930-secret-cleanup | c46c9d4071b17d22 | #458 | 2026-04-10 | ✅ |
| timmy-config | burn/20260410-0712-config-validator | 49b0b9d207ac0dd1 | #456 | 2026-04-10 | ✅ |
| timmy-config | burn/20260410-0621-451-pr-template | d64b2e7561e61d0f | #455 | 2026-04-10 | ✅ |
| timmy-config | perplexity/fleet-behaviour-hardening | b172d23b98bc3a72 | #430 | 2026-04-10 | ✅ |
| timmy-config | timmy/v7.0.0-checkin | a01935825cc71a7f | #424 | 2026-04-10 | ✅ |
| timmy-config | ansible-iac | 544f2a972906bc28 | #449 | 2026-04-10 | ✅ |
| timmy-config | burn/20260409-1247-self-healing-safe | 71bf82d9fbdb7ef7 | #450 | 2026-04-10 | ✅ |
| timmy-config | timmy/deadman-fallback | 6e5f1f6a22ae1431 | #425 | 2026-04-10 | ✅ |
| timmy-config | burn/20260409-1926-linter-v2 | 836849ffebf0c01a | #453 | 2026-04-10 | ✅ |
| timmy-config | burn/20260410-0018-451-pr-template | 641db62112262902 | #454 | 2026-04-10 | ✅ |
| timmy-config | burn/20260409-1240-cli-test-harness | b18fc76868413134 | #439 | 2026-04-10 | ✅ |
| timmy-config | perplexity/ci-validation-pipeline | 6336525232bb1280 | #431 | 2026-04-09 | ✅ |
| timmy-config | allegro/m2-commit-or-abort-845 | 7b93d34374cd9598 | #277 | 2026-04-06 | ❌ |
| timmy-config | feat/gemini-epic-398-1775648372708 | 17fde3c03ffafb4e | #418 | 2026-04-08 | ✅ |
| timmy-config | perplexity/pr-checklist-ci | f84b870ce4656ff1 | #411 | 2026-04-08 | ✅ |
| timmy-config | perplexity/soul-md-disambiguation | 1f02166107291c2d | #412 | 2026-04-08 | ✅ |
| timmy-config | perplexity/wire-enforcer-sovereign-store | 18124206e1176cb2 | #384 | 2026-04-08 | ✅ |
| timmy-config | perplexity/mempalace-architecture-doc | 56d8085e88967752 | #375 | 2026-04-08 | ✅ |
| timmy-config | timmy/fleet-phase3-5 | 8daa12c518d96c56 | #365 | 2026-04-08 | ✅ |
| timmy-config | feat/bezalel-wizard-sidecar-v2 | a43510a7ebd3f137 | #364 | 2026-04-08 | ✅ |
| timmy-config | timmy/gallery-submission | 2812bac43878e7b5 | #366 | 2026-04-08 | ✅ |
| timmy-config | perplexity/sovereign-memory-store | a2eff1222ba2f8c4 | #380 | 2026-04-08 | ✅ |
| timmy-config | timmy/sovereign-orchestrator-v1 | 11a28b74bb6c66fd | #362 | 2026-04-08 | ✅ |
| timmy-config | ezra/issue-358 | fe7c5018e3804d2e | #361 | 2026-04-07 | ✅ |
| the-nexus | step35/714-portals-add-a-portal-status | 43d7356a4df7afce | #1720 | 2026-04-29 | ✅ |
| the-nexus | fix/873 | 319ea08b2484468d | #1704 | 2026-04-26 | ✅ |
| the-nexus | fix/867 | 8f701aa208d531bb | #1702 | 2026-04-26 | ✅ |
| the-nexus | fix/1536-hot-reload | 7c9f4310d0e5110a | #1684 | 2026-04-22 | ✅ |
| the-nexus | fix/1509-tests | 2016a7e076c32aa3 | #1685 | 2026-04-22 | ✅ |
| the-nexus | mimo/code/issue-702 | b6ee9ba01b96cbf2 | #1686 | 2026-04-22 | ✅ |
| the-nexus | fix/1505 | 8d87dba309214085 | #1651 | 2026-04-22 | ✅ |
| the-nexus | fix/1504 | 2978f48a6a62f2a6 | #1652 | 2026-04-22 | ✅ |
| the-nexus | mimo/code/issue-708 | c9ecb5844e4fa05a | #1688 | 2026-04-22 | ✅ |
| the-nexus | claude/issue-1471 | 964a7ee48ec4b784 | #1625 | 2026-04-21 | ✅ |
| the-nexus | fix/1440-portals-json | 39dff7eec3b0b257 | #1489 | 2026-04-14 | ✅ |
| the-nexus | fix/1441-branch-check | 7132fabb34c66c7b | #1487 | 2026-04-14 | ✅ |
| the-nexus | q/1128-1776129480 | a29299820f48ec48 | #1437 | 2026-04-14 | ✅ |
| the-nexus | q/1338-1776129480 | e683a2213f786b81 | #1432 | 2026-04-14 | ✅ |
| the-nexus | bug/1415-port-conflict-fix | 465599accbd9db4e | #1431 | 2026-04-14 | ✅ |
| the-nexus | dispatch/1124-1776180746 | bd78d71dfb88fb73 | #1477 | 2026-04-14 | ✅ |
| the-nexus | burn/1144-1776120221 | 39faa6b862b00a62 | #1386 | 2026-04-14 | ✅ |
| the-nexus | burn/1354-1776125702 | 8fa43cc228920067 | #1391 | 2026-04-14 | ✅ |
| the-nexus | burn/1338-1776125702 | b9bc776fdbc3aa10 | #1392 | 2026-04-14 | ✅ |
| the-nexus | burn/1349-1776125702 | 9bcd41ad0775e537 | #1390 | 2026-04-14 | ✅ |
| the-nexus | burn/1356-1776125702 | d7a15ae04680cfbb | #1389 | 2026-04-14 | ✅ |
| the-nexus | burn/1340-1776120221 | 7fab9799b1ffb3aa | #1387 | 2026-04-14 | ✅ |
| the-nexus | nexusburn/research-1122 | bb9758c4d26e01be | #1380 | 2026-04-14 | ✅ |
| the-nexus | nexusburn/direction-architecture-875 | 4488847c136869e9 | #1374 | 2026-04-14 | ✅ |
| the-nexus | feat/multi-user-bridge | ea1b71ac48ed0f78 | #1326 | 2026-04-13 | ❌ |
| the-nexus | burn/20260413-0408-fix | 2600e8b61c0828e0 | #1361 | 2026-04-13 | ✅ |
| the-nexus | mimo/code/issue-707 | 9e19c22c8e46e541 | #1360 | 2026-04-13 | ✅ |
| the-nexus | mimo/code/issue-704 | c833d503e2287f58 | #1359 | 2026-04-13 | ✅ |
| the-nexus | feat/paper-results | 0843a2a0065c09dc | #1357 | 2026-04-13 | ✅ |
| the-nexus | feature/full-history-dedup | 4b15cf8283ef84a9 | #1352 | 2026-04-13 | ✅ |
| the-nexus | feature/dpo-quality-validator | bb4922adeb40613a | #1348 | 2026-04-13 | ✅ |
| the-nexus | feature/deepdive-dpo-phase-3.5 | 55d53c513c868c63 | #1347 | 2026-04-13 | ✅ |
| the-nexus | perplexity/swarm-governor | e8990299549b0c85 | #1335 | 2026-04-13 | ❌ |
| the-nexus | burn/20260413-gofai-structured-actions | 770ed8c27a0fd444 | #1343 | 2026-04-13 | ✅ |
| the-nexus | mimo/code/issue-717 | 808d68cf62e65965 | #1304 | 2026-04-13 | ✅ |
| the-nexus | mimo/build/issue-729 | ff3691e81e865897 | #1291 | 2026-04-13 | ✅ |
| the-nexus | mimo/build/issue-710 | 024e74defe429fc6 | #1286 | 2026-04-13 | ✅ |
| the-nexus | mimo/build/issue-672 | 91f0bcb034c7e773 | #1324 | 2026-04-13 | ✅ |
| the-nexus | mimo/create/issue-709 | 873ca8865ee7a955 | #1316 | 2026-04-13 | ✅ |
| the-nexus | burn/20260412-gofai-state-mainline | 77e6d67365b0f0e4 | #1330 | 2026-04-13 | ✅ |
| the-nexus | mimo/build/issue-865 | ed4c5da3cbaacb60 | #1329 | 2026-04-13 | ✅ |
| the-nexus | mimo/code/issue-1277 | dbad1cdf0b551622 | #1327 | 2026-04-13 | ✅ |
| the-nexus | mimo/build/issue-901 | 96426378e4cda82b | #1328 | 2026-04-13 | ✅ |
| the-nexus | mimo/code/issue-696 | 04583426228c3e11 | #1323 | 2026-04-13 | ✅ |
| the-nexus | mimo/build/issue-1119 | a5a748dc64e965c6 | #1321 | 2026-04-13 | ✅ |
| the-nexus | mimo/research/issue-866 | 869a7711e376136c | #1320 | 2026-04-12 | ✅ |
| the-nexus | mimo/create/issue-864 | d5099a18c6053d7d | #1315 | 2026-04-12 | ✅ |
| the-nexus | mimo/create/issue-716 | 571475a7496211b1 | #1314 | 2026-04-12 | ✅ |
| the-nexus | mimo/create/issue-698 | c09cc0383dfd9dcd | #1313 | 2026-04-12 | ✅ |
| the-nexus | mimo/create/issue-1116 | 5dfcf0e660a15e6b | #1311 | 2026-04-13 | ✅ |
| the-nexus | mimo/code/issue-727 | 229edf16e2f515b0 | #1305 | 2026-04-13 | ✅ |
| the-nexus | mimo/code/issue-673 | da925cba30b6cf0c | #1303 | 2026-04-13 | ✅ |
| the-nexus | mimo/code/issue-675 | 5bc3e0879d0368f6 | #1302 | 2026-04-13 | ✅ |
| the-nexus | mimo/code/issue-1215 | 11686fe09a08ef81 | #1298 | 2026-04-13 | ✅ |
| the-nexus | feat/resonance-viz-integration-1776010801023 | fe56ece1ad6232d3 | #1297 | 2026-04-12 | ✅ |
| the-nexus | mimo/code/issue-1208 | 4706861619508f15 | #1296 | 2026-04-13 | ✅ |
| the-nexus | mimo/code/issue-1181 | 0a0a2eb802378dc2 | #1295 | 2026-04-13 | ✅ |
| the-nexus | feat/resonance-linker-1776010647557 | fba972f8be852a97 | #1293 | 2026-04-12 | ✅ |
| the-nexus | feat/gofai-layer-4-v2 | 62a658182740ce1f | #1292 | 2026-04-12 | ✅ |
| the-nexus | burn/20260412-1202-mnemosyne | b5ed262581785f06 | #1290 | 2026-04-12 | ✅ |
| the-nexus | mimo/build/issue-720 | bd4b9e0f74ef95cc | #1289 | 2026-04-13 | ✅ |
| the-nexus | mimo/build/issue-728 | 97714729839db360 | #1288 | 2026-04-13 | ✅ |
| the-nexus | mimo/build/issue-712 | fdc02dc121b3fe18 | #1287 | 2026-04-13 | ✅ |
| the-nexus | mimo/build/issue-706 | c34748704ea0f9c0 | #1285 | 2026-04-13 | ✅ |
| the-nexus | feat/resonance-viz-1775996553148 | 2230c1c9fc03cd01 | #1284 | 2026-04-12 | ✅ |
| the-nexus | feat/gofai-nexus-final-v2 | e939958f385cfa38 | #1283 | 2026-04-12 | ✅ |
| the-nexus | feat/gofai-nexus-mega-1775996240349 | 36db3aff6b81e182 | #1281 | 2026-04-12 | ✅ |
| the-nexus | purge/openclaw-fleet-vocab | ba18e5ed5fbe2a70 | #1279 | 2026-04-12 | ✅ |
| the-nexus | purge/openclaw-readme | 9e04030541eb8f53 | #1278 | 2026-04-12 | ✅ |
| the-nexus | fix/mnemosyne-cli-path-vitality | 3361a0e259117807 | #1267 | 2026-04-12 | ✅ |
| the-nexus | feat/mnemosyne-memory-path | 65cef9d9c0a7536a | #1265 | 2026-04-12 | ✅ |
| the-nexus | feat/mnemosyne-memory-decay | 42a4169940c9cecd | #1259 | 2026-04-12 | ✅ |
| the-nexus | feat/mnemosyne-embedding-backend | 3fca28b1c8f2712c | #1257 | 2026-04-12 | ✅ |
| the-nexus | epic/iac-workflow-1248 | 55f0bbe97ead71c4 | #1254 | 2026-04-12 | ✅ |
| the-nexus | feat/mnemosyne-connection-panel | 5446d3dc59bbfe61 | #1247 | 2026-04-12 | ✅ |
| the-nexus | feat/ordinal-archive-2026-04-11 | e07c210ed791da71 | #1235 | 2026-04-11 | ✅ |
| the-nexus | feat/mnemosyne-graph-clusters | 3848b6f4eafd90a3 | #1234 | 2026-04-11 | ✅ |
| the-nexus | feat/mnemosyne-graph-export | c961cf9122ab210c | #1233 | 2026-04-11 | ✅ |
| the-nexus | feat/mnemosyne-memory-birth | 12a5a757480ac495 | #1222 | 2026-04-11 | ✅ |
| the-nexus | feat/mnemosyne-phase1-1216 | ef1fb5b735f96af8 | #1217 | 2026-04-11 | ✅ |
| the-nexus | fix/entity-resolution-lines-wiring | 75f39e41959eda5e | #1214 | 2026-04-11 | ✅ |
| the-nexus | feat/mnemosyne-memory-filter | 45724e84212da8b2 | #1213 | 2026-04-11 | ✅ |
| the-nexus | feat/mnemosyne-ambient-particles | dc88f1b83473a370 | #1205 | 2026-04-11 | ✅ |
| the-nexus | feat/spatial-search-issue-1170 | 72eecf6ee44e8831 | #1201 | 2026-04-11 | ✅ |
| the-nexus | mimo/build/issue-686 | 6f1264f6c6d2bc2d | #1207 | 2026-04-11 | ✅ |
| the-nexus | mimo/build/issue-680 | 3367ce54382a61cf | #1206 | 2026-04-11 | ✅ |
| the-nexus | fix/auto-merge | fe30755b0e665bc9 | #1202 | 2026-04-11 | ✅ |
| the-nexus | mimo/code/issue-723 | 1b2ac5cd1fe47e0c | #1197 | 2026-04-11 | ✅ |
| the-nexus | mimo/create/issue-681 | 7890bd48867d1c57 | #1194 | 2026-04-11 | ✅ |
| the-nexus | mimo/code/issue-724 | 339f7d6ef29d114b | #1193 | 2026-04-11 | ✅ |
| the-nexus | mimo/create/issue-685 | 1294f37b44f705e4 | #1195 | 2026-04-11 | ✅ |
| the-nexus | mimo/create/issue-800 | c7dfb8a5e6ecf78a | #1192 | 2026-04-11 | ✅ |
| the-nexus | mimo/research/issue-1047 | 479b9ec132a79c2f | #1191 | 2026-04-11 | ✅ |
| the-nexus | mimo/research/issue-801 | 8295b29f11c70a12 | #1190 | 2026-04-11 | ✅ |
| the-nexus | mimo/build/issue-703 | 020f21b7b35680fa | #1189 | 2026-04-11 | ✅ |
| the-nexus | mimo/code/issue-1174 | 45163cf14e9455ca | #1188 | 2026-04-11 | ✅ |
| the-nexus | feat/mnemosyne-timeline-scrubber | 29d2dbabd160e9be | #1186 | 2026-04-11 | ✅ |
| the-nexus | mimo/build/issue-701 | eb28e1f8e476734b | #1185 | 2026-04-11 | ✅ |
| the-nexus | feat/mnemosyne-trust-crystal-rendering | 08117ef43abe2f91 | #1183 | 2026-04-11 | ✅ |
| the-nexus | feat/mnemosyne-clear-feed | 93f3722a36ad6606 | #1182 | 2026-04-10 | ✅ |
| the-nexus | claude/issue-1171 | 3626ee0e2067cbcc | #1178 | 2026-04-10 | ❌ |
| the-nexus | mimo/code/issue-1145 | 845e2f2cede052f3 | #1163 | 2026-04-10 | ✅ |
| the-nexus | mimo/code/issue-1146 | 60af11ec2f968ffd | #1162 | 2026-04-10 | ✅ |
| the-nexus | feat/mnemosyne-crystal-inspect | c3877088925e8a2e | #1161 | 2026-04-10 | ✅ |
| the-nexus | feat/mnemosyne-persistence | 1e7bb2a453133ba1 | #1159 | 2026-04-10 | ✅ |
| the-nexus | claude/issue-1125 | 220f20c794574e81 | #1157 | 2026-04-10 | ✅ |
| the-nexus | claude/issue-1126 | beec49a92d745eec | #1130 | 2026-04-10 | ✅ |
| the-nexus | feat/mnemosyne-spatial-schema-consolidated | 5ce928a00d11be27 | #1156 | 2026-04-10 | ✅ |
| the-nexus | feat/mnemosyne-memory-orbs-v2 | 6cf1f4d0784683e9 | #1148 | 2026-04-10 | ✅ |
| the-nexus | perplexity/soul-md-pointer | b1743612e91d00a4 | #1133 | 2026-04-08 | ✅ |
| the-nexus | feat/mempalace-api-add-1775582323040 | 6d4d94af297d887b | #1129 | 2026-04-08 | ✅ |
| the-nexus | claude/issue-1112 | 8044fe7d4080bd80 | #1113 | 2026-04-08 | ✅ |
| the-nexus | groq/issue-1047 | 34862cf5e5eb2481 | #1090 | 2026-04-07 | ❌ |
| the-nexus | claude/issue-1075 | e644b00dffbdb2ec | #1109 | 2026-04-07 | ❌ |
| the-nexus | groq/issue-918 | b445c040377b5869 | #1046 | 2026-04-07 | ❌ |
| the-nexus | groq/issue-1098 | d512f31dd61c9567 | #1099 | 2026-04-07 | ❌ |
| the-nexus | claude/issue-823 | 10196b3804259db5 | #892 | 2026-04-06 | ✅ |
| the-nexus | claude/issue-827 | ae201aee2627b10d | #891 | 2026-04-06 | ✅ |
| the-nexus | claude/issue-826 | a445489031573adf | #890 | 2026-04-06 | ✅ |
| the-nexus | claude/issue-836 | 4721518ac6144a7d | #889 | 2026-04-06 | ✅ |
| the-nexus | claude/issue-832 | d31468fe2b435d43 | #888 | 2026-04-06 | ✅ |
| the-nexus | claude/issue-833 | 1420c0d64b531d0b | #887 | 2026-04-06 | ✅ |
| the-nexus | timmy/issue-855 | 50fc25da0d239819 | #885 | 2026-04-06 | ✅ |
| the-nexus | allegro/self-improvement-infra | d00bb8cbe9970bc9 | #884 | 2026-04-06 | ✅ |
| the-nexus | gemini/issue-431 | ca32ec98a964e78b | #432 | 2026-03-24 | ✅ |
| fleet-ops | fix/139 | a68f2d8f1d957031 | #447 | 2026-04-26 | ✅ |
| fleet-ops | feat/sovereign-accountant-ops-1776866094339 | dca5d09bb6485797 | #434 | 2026-04-22 | ✅ |
| fleet-ops | feat/sovereign-ops-mastery-1776865225032 | 3a1e60c8ba26f6c9 | #433 | 2026-04-22 | ✅ |
| fleet-ops | fix/orchestrator-dashboard-1776864589678 | 720f70c1c1e05ad7 | #432 | 2026-04-22 | ✅ |
| fleet-ops | feat/sovereign-watchdog-1776864561414 | 639743d4cfa5f70d | #431 | 2026-04-22 | ✅ |
| fleet-ops | fix/181-capacity-limits | 9c2e6c31ff81bf3c | #427 | 2026-04-22 | ✅ |
| fleet-ops | fix/184-cleanup | 156b7b3512965753 | #426 | 2026-04-22 | ✅ |
| fleet-ops | fix/186-score | 69470c4e195b6ad4 | #425 | 2026-04-22 | ✅ |
| fleet-ops | fix/235 | 6ebcab4d51b714ba | #417 | 2026-04-22 | ✅ |
| fleet-ops | fix/239 | b954fd5a8cc28ff9 | #416 | 2026-04-22 | ✅ |
| fleet-ops | feat/intelligent-decomposer-1776826621777 | d36b5ce7b57274f8 | #404 | 2026-04-22 | ✅ |
| fleet-ops | feat/fleet-aggregator-1776824865616 | 70b8f571a941f076 | #403 | 2026-04-22 | ✅ |
| fleet-ops | fix/123-video-engine-deployment-automation | 56a1ec74b929a95b | #406 | 2026-04-22 | ✅ |
| fleet-ops | feat/397-sovereign-dispatch-hub | 168314c6a3fcb8c6 | #401 | 2026-04-21 | ✅ |
| fleet-ops | feat/321-ordinal-noise-log | 9cdfcdd246fc44fc | #400 | 2026-04-21 | ✅ |
| fleet-ops | feat/225-burn-worker-supervisor | 0f61d27f2099430d | #399 | 2026-04-21 | ✅ |
| fleet-ops | fix/392-the-door-ci-gate | ac48379ad6b16243 | #398 | 2026-04-21 | ✅ |
| fleet-ops | feat/394-browser-cockpit | b43ae10c8cfc2c92 | #397 | 2026-04-21 | ✅ |
| fleet-ops | feat/fleet-telemetry-upgrade-1776733761324 | bc02f709000e89bb | #396 | 2026-04-21 | ✅ |
| fleet-ops | feat/393-grimace-research | 6dbe427f28a50556 | #395 | 2026-04-21 | ✅ |
| fleet-ops | feat/fleet-ops-reliability-1776700513637 | 679c0a151733b12c | #391 | 2026-04-21 | ✅ |
| fleet-ops | feat/335-acp-bridge | b922917b7c5688d1 | #390 | 2026-04-21 | ✅ |
| fleet-ops | fix/305-federation-sync-endpoints | 2dc9b17377ddf4e9 | #389 | 2026-04-21 | ✅ |
| fleet-ops | fix/208 | 38c276903393043a | #388 | 2026-04-21 | ✅ |
| fleet-ops | fix/336-nightly-self-evolution | cfddb1333ec97b1d | #387 | 2026-04-21 | ✅ |
| fleet-ops | fix/183 | 091374742f8eac6c | #381 | 2026-04-21 | ✅ |
| fleet-ops | fix/203 | a7a105e789c14a46 | #380 | 2026-04-21 | ✅ |
| fleet-ops | fix/219 | b67e952a4b96552b | #379 | 2026-04-21 | ✅ |
| fleet-ops | fix/222 | b66a94def6dbd9ef | #377 | 2026-04-21 | ✅ |
| fleet-ops | fix/223 | 0b1ac620884182d0 | #376 | 2026-04-21 | ✅ |
| fleet-ops | fix/156 | b533d9d7e113805b | #419 | 2026-04-22 | ✅ |
| fleet-ops | fix/169-schedule-burndown | 3835879037d6b463 | #201 | 2026-04-14 | ✅ |
| fleet-ops | fix/171-alert-dedup | ea3fa408d17b1aa9 | #196 | 2026-04-14 | ✅ |
| fleet-ops | fix/174-morning-reports | 02e578332a3e0a6d | #190 | 2026-04-14 | ✅ |
| fleet-ops | fix/172-queue-consumer | 96bc869702c373f5 | #194 | 2026-04-14 | ✅ |
| fleet-ops | fix/167-burn-cycle-revival | b59eefdd1650ff8b | #193 | 2026-04-14 | ✅ |
| fleet-ops | fix/178-tmux-docs | 101415726cdec820 | #192 | 2026-04-14 | ✅ |
| fleet-ops | fix/170-pane-router | daeff15d5ff76bb1 | #191 | 2026-04-14 | ✅ |
| fleet-ops | fix/177-tmux-cleanup | e809d75a5158a5b3 | #189 | 2026-04-14 | ✅ |
| fleet-ops | dispatch/115-1776180746 | 7df68729b9f6e12a | #164 | 2026-04-14 | ✅ |
| fleet-ops | burn/skill-scoring-103 | 53d97c5f05859f5f | #144 | 2026-04-14 | ✅ |
| fleet-ops | fix/profile-isolation-ephemeral | 3f6e897bae3e239f | #142 | 2026-04-13 | ✅ |
| fleet-ops | ci/fix-ansible-lint | 080f52855836aaa2 | #138 | 2026-04-13 | ✅ |
| fleet-ops | fix/health-check-response-time | ddb9581f5b2bbbe1 | #136 | 2026-04-13 | ✅ |
| fleet-ops | burn/20260413-0411-fix | 5ab1b2c54b87efaf | #135 | 2026-04-13 | ✅ |
| fleet-ops | burn/cost-pattern-detector | fa9f6894dd1eabfc | #132 | 2026-04-13 | ✅ |
| fleet-ops | gofia/65-registry-health-updater | e4939c8c470f0308 | #131 | 2026-04-13 | ✅ |
| fleet-ops | feat/video-engine-improvements | 71710c9570950700 | #129 | 2026-04-13 | ✅ |
| fleet-ops | perplexity/agent-scorecard | 61dd54c8201bce7a | #119 | 2026-04-13 | ✅ |
| fleet-ops | feat/nexus-watchdog | 17d90da532b147b4 | #118 | 2026-04-13 | ✅ |
| fleet-ops | burn/20260412-1854-morrowind-mapping-v2 | 4c0e54f0d18d715c | #88 | 2026-04-12 | ✅ |
| fleet-ops | gofia/federation-sync | 7739745a916bd9dc | #82 | 2026-04-12 | ✅ |
| fleet-ops | gofia/shared-knowledge-store | 5373feff78917096 | #81 | 2026-04-12 | ✅ |
| fleet-ops | gofia/health-dashboard | 2a25a87a7444bc10 | #80 | 2026-04-12 | ✅ |
| fleet-ops | feat/ordinal-archive-20260412 | 66060a1cce858295 | #79 | 2026-04-12 | ✅ |
| fleet-ops | gofia/message-bus | 3fd8945264cecf32 | #78 | 2026-04-11 | ✅ |
| fleet-ops | gofia/fleet-registry | b9a99087ef070a55 | #77 | 2026-04-11 | ✅ |
| fleet-ops | feat/video-engine-pilot-render | 2f0390e631123349 | #76 | 2026-04-11 | ✅ |
| fleet-ops | feat/video-engine-tiered-rendering | 21aa30fb12c30f74 | #75 | 2026-04-11 | ✅ |
| fleet-ops | feat/video-engine-benchmarks | 0e2b37ae2db32e86 | #74 | 2026-04-11 | ✅ |
| fleet-ops | feat/video-engine-integration | 0a27da593068eb2d | #73 | 2026-04-11 | ✅ |
| fleet-ops | feat/video-engine-provisioning | 07d5a37344e6e835 | #72 | 2026-04-11 | ✅ |
| fleet-ops | fix/ci-ansible-lint | 71c61acfa3d61191 | #64 | 2026-04-11 | ✅ |
| fleet-ops | burn/20260410-1943-auto-review | 890a71021224e35f | #59 | 2026-04-10 | ✅ |
| fleet-ops | sovereign-health-suite | f89af184f9244286 | #57 | 2026-04-10 | ✅ |
| fleet-ops | fix/portable-test-paths | 0cdb66d91b280ec3 | #58 | 2026-04-10 | ✅ |
| fleet-ops | fix/site-yml-orchestrator | 13d69f0b4fc95e6e | #54 | 2026-04-11 | ✅ |
| fleet-ops | burn/20260410-1928-ci-pipeline | c13bad30b7d94e04 | #56 | 2026-04-10 | ✅ |
| fleet-ops | burn/20260410-1926-digitalocean | 013c23c4436e2f0a | #55 | 2026-04-11 | ✅ |
| fleet-ops | burn/vault-fix-v4 | 856d6a871f35c4bc | #53 | 2026-04-10 | ✅ |
| fleet-ops | sovereign-heart | 37afe94b199d07ad | #51 | 2026-04-10 | ✅ |
| fleet-ops | burn/fleet-ops-consolidation | f99f9581b587549a | #49 | 2026-04-10 | ✅ |
| fleet-ops | sovereign-muse | 8276d11dba0bf914 | #50 | 2026-04-10 | ✅ |
| fleet-ops | sovereign-librarian | 8e72965e50f4b78d | #47 | 2026-04-10 | ✅ |
| fleet-ops | sovereign-guard | 32bf359a913e453f | #45 | 2026-04-10 | ✅ |
| fleet-ops | burn/20260410-1817-backups-role | 39c5f4a810f38326 | #43 | 2026-04-10 | ✅ |
| fleet-ops | burn/20260410-1813-evennia-role | a525821e3854c503 | #42 | 2026-04-10 | ✅ |
| fleet-ops | burn/20260410-1811-monitoring-role | 76ebe4086977b1cd | #41 | 2026-04-10 | ✅ |
| fleet-ops | burn/20260410-1809-nostr-role | 13ab065ea93c9467 | #39 | 2026-04-10 | ✅ |
| fleet-ops | sovereign-synthesis | 6cebd000147b5cd8 | #38 | 2026-04-10 | ✅ |
| fleet-ops | burn/20260410-1744-hermes-role | 3de632b2447f4ca1 | #36 | 2026-04-10 | ✅ |
| fleet-ops | burn/20260410-1742-nginx-role | 9b6c5528f66ebd60 | #35 | 2026-04-10 | ✅ |
| fleet-ops | burn/20260410-1740-ollama-role | 7b145114af242760 | #34 | 2026-04-10 | ✅ |
| fleet-ops | burn/20260410-1738-gitea-role | d456deed91cfe6f8 | #33 | 2026-04-10 | ✅ |
| fleet-ops | sovereign-hardening-v2 | c0e1a6245877c2d7 | #32 | 2026-04-10 | ✅ |
| fleet-ops | burn/deploy-conduit-matrix | 689670fc288594dc | #13 | 2026-04-10 | ❌ |
| fleet-ops | feat/harmony-audit | cda09db00f603d13 | #16 | 2026-04-10 | ✅ |
| fleet-ops | burn/20260410-0847-4-preflight-health-checks | 0044da37a54fe161 | #14 | 2026-04-10 | ✅ |
| fleet-ops | burn/20260410-0714-docker-compose | c92d986a670d6b2d | #10 | 2026-04-10 | ✅ |
| fleet-ops | burn/20260410-0516-1-bootstrap-inventory | 3e4be451b1ba4ce1 | #9 | 2026-04-10 | ✅ |
| fleet-ops | burn/20260409-1943-baseline-playbook | c03e870b47cb11b0 | #6 | 2026-04-10 | ✅ |
| compounding-intelligence | burn/196-1776306000 | cc215e3ed71a062c | #228 | 2026-04-21 | ✅ |
| compounding-intelligence | feat/200-knowledge-freshness-cron | baa2c84c3f2480b4 | #227 | 2026-04-21 | ✅ |
| compounding-intelligence | burn/210-1776305000 | 55adcb31dcdab996 | #221 | 2026-04-21 | ✅ |
| compounding-intelligence | fix/212-dot-quoting | ec0e9d65ca68f9f8 | #214 | 2026-04-21 | ✅ |
| compounding-intelligence | fix/perf-bottleneck-syntax-211 | b732172dcc7e98b4 | #217 | 2026-04-21 | ✅ |
| compounding-intelligence | burn/212-fix-dot-quoting | f7c479c4eb996603 | #216 | 2026-04-21 | ✅ |
| compounding-intelligence | fix/676 | c203010e3a756dee | #209 | 2026-04-21 | ✅ |
| compounding-intelligence | fix/198-quality-gate | e1e42c3f8e1dbb7c | #208 | 2026-04-21 | ✅ |
| compounding-intelligence | fix/201-pytest-warnings | 7a4677c752500639 | #207 | 2026-04-21 | ✅ |
**Total candidates:** 378
**SHA-safe (no new commits):** 363
**SHA-diff (new commits since merge):** 15
**Per-repo breakdown:**
- timmy-home: 77 safe / 82 candidates
- timmy-config: 69 safe / 71 candidates
- the-nexus: 118 safe / 125 candidates
- fleet-ops: 90 safe / 91 candidates
- compounding-intelligence: 9 safe / 9 candidates

View File

@@ -1,182 +0,0 @@
[
{
"repo": "timmy-home",
"branch": "fix/793",
"branch_sha": "a4e9c32a740e459d",
"pr_number": 962,
"pr_merged_at": "2026-04-29T12:09:33Z",
"pr_head_sha": "a4e9c32a740e459d",
"sha_match": true,
"branch_date": "2026-04-29",
"action": "deleted",
"detail": "deleted"
},
{
"repo": "timmy-home",
"branch": "fix/547",
"branch_sha": "ef6a729c32907811",
"pr_number": 842,
"pr_merged_at": "2026-04-21T15:30:47Z",
"pr_head_sha": "ef6a729c32907811",
"sha_match": true,
"branch_date": "2026-04-21",
"action": "deleted",
"detail": "deleted"
},
{
"repo": "timmy-home",
"branch": "fix/548",
"branch_sha": "60d876c12dfb20f9",
"pr_number": 840,
"pr_merged_at": "2026-04-21T15:30:54Z",
"pr_head_sha": "60d876c12dfb20f9",
"sha_match": true,
"branch_date": "2026-04-21",
"action": "deleted",
"detail": "deleted"
},
{
"repo": "timmy-home",
"branch": "fix/551",
"branch_sha": "8b02ae03ca60c566",
"pr_number": 839,
"pr_merged_at": "2026-04-21T15:33:52Z",
"pr_head_sha": "8b02ae03ca60c566",
"sha_match": true,
"branch_date": "2026-04-21",
"action": "deleted",
"detail": "deleted"
},
{
"repo": "timmy-home",
"branch": "fix/553",
"branch_sha": "e752caa9a7b5a517",
"pr_number": 838,
"pr_merged_at": "2026-04-21T15:36:06Z",
"pr_head_sha": "e752caa9a7b5a517",
"sha_match": true,
"branch_date": "2026-04-21",
"action": "deleted",
"detail": "deleted"
},
{
"repo": "timmy-home",
"branch": "fix/570",
"branch_sha": "5c8ba43dbf6715e9",
"pr_number": 837,
"pr_merged_at": "2026-04-21T15:40:16Z",
"pr_head_sha": "5c8ba43dbf6715e9",
"sha_match": true,
"branch_date": "2026-04-21",
"action": "deleted",
"detail": "deleted"
},
{
"repo": "timmy-home",
"branch": "fix/673",
"branch_sha": "4dfa001b9a4b43de",
"pr_number": 835,
"pr_merged_at": "2026-04-21T15:34:02Z",
"pr_head_sha": "4dfa001b9a4b43de",
"sha_match": true,
"branch_date": "2026-04-21",
"action": "deleted",
"detail": "deleted"
},
{
"repo": "timmy-home",
"branch": "fix/675",
"branch_sha": "16fcabb5fc56deb4",
"pr_number": 834,
"pr_merged_at": "2026-04-21T15:34:05Z",
"pr_head_sha": "16fcabb5fc56deb4",
"sha_match": true,
"branch_date": "2026-04-21",
"action": "deleted",
"detail": "deleted"
},
{
"repo": "timmy-home",
"branch": "fix/676",
"branch_sha": "0626a3fc33d28e14",
"pr_number": 833,
"pr_merged_at": "2026-04-21T15:36:16Z",
"pr_head_sha": "0626a3fc33d28e14",
"sha_match": true,
"branch_date": "2026-04-21",
"action": "deleted",
"detail": "deleted"
},
{
"repo": "timmy-home",
"branch": "fix/677",
"branch_sha": "3250c6d124a4164d",
"pr_number": 832,
"pr_merged_at": "2026-04-21T15:31:10Z",
"pr_head_sha": "3250c6d124a4164d",
"sha_match": true,
"branch_date": "2026-04-21",
"action": "deleted",
"detail": "deleted"
},
{
"repo": "timmy-home",
"branch": "fix/685",
"branch_sha": "1bce98a7615d53c9",
"pr_number": 829,
"pr_merged_at": "2026-04-21T15:31:16Z",
"pr_head_sha": "1bce98a7615d53c9",
"sha_match": true,
"branch_date": "2026-04-20",
"action": "deleted",
"detail": "deleted"
},
{
"repo": "timmy-home",
"branch": "sprint/issue-827",
"branch_sha": "cb269347cc7e9136",
"pr_number": 828,
"pr_merged_at": "2026-04-21T15:36:22Z",
"pr_head_sha": "cb269347cc7e9136",
"sha_match": true,
"branch_date": "2026-04-20",
"action": "deleted",
"detail": "deleted"
},
{
"repo": "timmy-home",
"branch": "sprint/issue-822",
"branch_sha": "47f136e9ab453878",
"pr_number": 823,
"pr_merged_at": "2026-04-21T15:36:31Z",
"pr_head_sha": "47f136e9ab453878",
"sha_match": true,
"branch_date": "2026-04-20",
"action": "deleted",
"detail": "deleted"
},
{
"repo": "timmy-home",
"branch": "fix/648",
"branch_sha": "b615013e6329ecdb",
"pr_number": 818,
"pr_merged_at": "2026-04-21T15:36:41Z",
"pr_head_sha": "b615013e6329ecdb",
"sha_match": true,
"branch_date": "2026-04-18",
"action": "deleted",
"detail": "deleted"
},
{
"repo": "timmy-home",
"branch": "fix/671",
"branch_sha": "c2aed1246464d239",
"pr_number": 813,
"pr_merged_at": "2026-04-21T15:39:50Z",
"pr_head_sha": "c2aed1246464d239",
"sha_match": true,
"branch_date": "2026-04-17",
"action": "deleted",
"detail": "deleted"
}
]

View File

@@ -1,212 +0,0 @@
#!/usr/bin/env python3
"""
Branch Sprawl Audit & Contraction
==================================
Audits and optionally deletes stale remote branches across the five
high-backlog repositories with no open PR and no unique commits.
Safe deletion criteria:
1. Branch is not 'main'
2. Branch has NO open PR
3. Branch corresponds to a CLOSED MERGED PR (merged=True)
4. Current branch tip SHA matches the PR's head_sha exactly (no new commits)
5. Not in Alexander's private workspace ('alexander/' prefixes)
Usage:
python scripts/branch-audit-cleanup.py list # Print Markdown report
python scripts/branch-audit-cleanup.py delete # Dry-run preview
python scripts/branch-audit-cleanup.py delete --execute # Actually delete
"""
import os, sys, json, requests, pickle, argparse
from pathlib import Path
from datetime import datetime, timezone
TOKEN_PATH = Path.home() / ".config" / "gitea" / "token"
BASE_URL = "https://forge.alexanderwhitestone.com/api/v1"
HEADERS = None
REPOS = [
"timmy-home",
"timmy-config",
"the-nexus",
"fleet-ops",
"compounding-intelligence",
]
PROTECTED_PREFIXES = ["alexander/"]
CANDIDATES_CACHE = Path("/tmp/candidate_deletions.pkl")
def load_token():
global HEADERS
token = TOKEN_PATH.read_text().strip()
HEADERS = {"Authorization": f"token {token}"}
def gitea_get(path, params=None, page=1, limit=50):
results = []
while True:
url = f"{BASE_URL}{path}"
r = requests.get(url, headers=HEADERS, params={**(params or {}), "page": page, "limit": limit}, timeout=15)
if r.status_code != 200:
raise RuntimeError(f"GET {url}{r.status_code}: {r.text[:100]}")
batch = r.json()
if not isinstance(batch, list):
return batch
results.extend(batch)
if len(batch) < limit:
break
page += 1
return results
def is_protected_branch(name):
lp = name.lower()
return any(lp.startswith(p.rstrip('/').lower()) for p in PROTECTED_PREFIXES)
def collect_branches(repo):
return gitea_get(f"/repos/Timmy_Foundation/{repo}/branches")
def collect_prs(repo, state):
return gitea_get(f"/repos/Timmy_Foundation/{repo}/pulls", params={"state": state})
def build_candidates(force_refresh=False):
if CANDIDATES_CACHE.exists() and not force_refresh:
print("(Using cached candidates…)", file=sys.stderr)
return pickle.loads(CANDIDATES_CACHE.read_bytes())
print("Collecting branch/PR data…", file=sys.stderr)
candidates = []
for repo in REPOS:
print(f" {repo}", file=sys.stderr)
branches = collect_branches(repo)
branch_map = {b["name"]: {"sha": b["commit"]["id"][:16], "date": b["commit"]["timestamp"][:10]}
for b in branches}
open_prs = collect_prs(repo, "open")
closed_prs = collect_prs(repo, "closed")
open_branch_set = {pr["head"]["ref"] for pr in open_prs}
closed_merged_by_branch = {}
for pr in closed_prs:
if not pr.get("merged"):
continue
hb = pr["head"]["ref"]
existing = closed_merged_by_branch.get(hb)
if not existing or (pr.get("merged_at") or "") > (existing.get("merged_at") or ""):
closed_merged_by_branch[hb] = pr
for branch_name, binfo in branch_map.items():
if branch_name == "main":
continue
if branch_name in open_branch_set:
continue
if is_protected_branch(branch_name):
print(f" SKIP protected: {branch_name}", file=sys.stderr)
continue
pr = closed_merged_by_branch.get(branch_name)
if not pr:
continue
pr_head_sha = pr["head"]["sha"][:16]
sha_match = (pr_head_sha == binfo["sha"])
candidates.append({
"repo": repo,
"branch": branch_name,
"branch_sha": binfo["sha"],
"pr_number": pr["number"],
"pr_merged_at": pr.get("merged_at", ""),
"pr_head_sha": pr_head_sha,
"sha_match": sha_match,
"branch_date": binfo["date"],
})
CANDIDATES_CACHE.write_bytes(pickle.dumps(candidates))
print(f"Total candidates: {len(candidates)}", file=sys.stderr)
return candidates
def generate_table(candidates):
rows = ["| Repo | Branch | Branch SHA | PR # | PR Merged At | SHA Match |",
"|------|--------|------------|------|--------------|-----------|"]
sorted_cands = sorted(candidates, key=lambda c: (c["repo"], c["branch_date"]), reverse=True)
for c in sorted_cands:
rows.append(
f"| {c['repo']} | {c['branch']} | {c['branch_sha']} | #{c['pr_number']} | {c['pr_merged_at'][:10]} | "
f"{'' if c['sha_match'] else ''} |"
)
rows.append("")
rows.append(f"**Total candidates:** {len(candidates)}")
matches = sum(1 for c in candidates if c["sha_match"])
rows.append(f"**SHA-safe (no new commits):** {matches}")
rows.append(f"**SHA-diff (new commits since merge):** {len(candidates) - matches}")
per_repo = {}
for c in candidates:
per_repo.setdefault(c["repo"], {"total": 0, "safe": 0})
per_repo[c["repo"]]["total"] += 1
if c["sha_match"]:
per_repo[c["repo"]]["safe"] += 1
rows.append("\n**Per-repo breakdown:**")
for repo in REPOS:
d = per_repo.get(repo, {"total": 0, "safe": 0})
rows.append(f"- {repo}: {d['safe']} safe / {d['total']} candidates")
return "\n".join(rows)
def delete_branch(repo, branch):
url = f"{BASE_URL}/repos/Timmy_Foundation/{repo}/branches/{branch}"
r = requests.delete(url, headers=HEADERS, timeout=15)
if r.status_code in (200, 204):
return True, "deleted"
return False, f"HTTP {r.status_code}: {r.text[:200]}"
def run_deletion(limit=15, dry_run=True):
candidates = build_candidates()
safe_candidates = [c for c in candidates if c["sha_match"] and not is_protected_branch(c["branch"])]
print(f"Safe candidates available: {len(safe_candidates)}")
to_delete = safe_candidates[:limit]
results = []
for c in to_delete:
repo, branch = c["repo"], c["branch"]
if dry_run:
print(f"[DRY-RUN] Would delete {repo}/{branch}")
results.append({**c, "action": "dry-run"})
else:
ok, msg = delete_branch(repo, branch)
results.append({**c, "action": "deleted" if ok else "failed", "detail": msg})
status = "" if ok else f"{msg}"
print(f" {status} {repo}/{branch}")
return results
def main():
parser = argparse.ArgumentParser(description="Branch sprawl audit & contraction tool.")
sub = parser.add_subparsers(dest="cmd", required=True)
sub.add_parser("list", help="Print Markdown report of candidates")
p_del = sub.add_parser("delete", help="Delete safe merged-PR branches")
p_del.add_argument("--execute", action="store_true", help="Actually perform deletion")
args = parser.parse_args()
load_token()
if args.cmd == "list":
candidates = build_candidates(force_refresh=False)
print(generate_table(candidates))
elif args.cmd == "delete":
dry = not args.execute
if dry:
print("=== DRY RUN — no branches will be deleted ===")
else:
print("=== LIVE DELETION — branches will be deleted! ===")
confirm = input("Type 'YES' to confirm: ")
if confirm != "YES":
print("Aborted.")
sys.exit(1)
results = run_deletion(limit=15, dry_run=dry)
out = Path("branch-contraction-results.json")
out.write_text(json.dumps(results, indent=2))
print(f"\nResults written to {out}")
deleted_count = sum(1 for r in results if r["action"] == "deleted")
print(f"Deleted: {deleted_count} / {len(results)}")
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,506 @@
#!/usr/bin/env python3
"""
Generate 1,000 Problem→Solution training pairs for Frontend & Creative code patterns.
Part of timmy-config#595: Code Patterns: Frontend & Creative — 1K Problem→Solution Pairs.
Domains covered:
- Three.js: scenes, geometry, materials, lighting, camera, animation
- HTML/CSS/JS: DOM manipulation, events, styling, responsive design
- Playground UI: sovereign-first interactive components
- Gallery: image grids, lightboxes, masonry layouts
- Games: canvas rendering, game loops, simple mechanics
Usage:
python scripts/generate_code_patterns_frontend_creative.py
python scripts/generate_code_patterns_frontend_creative.py --output /path/to/output.jsonl
"""
from __future__ import annotations
import argparse
import json
import random
from pathlib import Path
random.seed(595)
# ============================================================
# Three.js Templates
# ============================================================
THREEJS_TEMPLATES = [
# Scene setup
{
"problem": "Set up a Three.js scene with a renderer, camera, and animation loop.",
"solution": "function initThreeJS(container: HTMLElement) {\n const scene = new THREE.Scene();\n scene.background = new THREE.Color(0x0a0a0a);\n\n const camera = new THREE.PerspectiveCamera(\n 75,\n container.clientWidth / container.clientHeight,\n 0.1,\n 1000\n );\n camera.position.z = 5;\n\n const renderer = new THREE.WebGLRenderer({ antialias: true });\n renderer.setSize(container.clientWidth, container.clientHeight);\n renderer.setPixelRatio(window.devicePixelRatio);\n container.appendChild(renderer.domElement);\n\n function animate() {\n requestAnimationFrame(animate);\n renderer.render(scene, camera);\n }\n animate();\n\n return { scene, camera, renderer };\n}",
"imports": "import * as THREE from 'three';",
"domain": "threejs-scene",
},
# Geometry — sphere with wireframe
{
"problem": "Create a Three.js sphere with custom segment counts and a wireframe overlay.",
"solution": "function createSphereWithWireframe(radius = 1, segments = 32) {\n const sphereGeom = new THREE.SphereGeometry(radius, segments, segments);\n const sphereMat = new THREE.MeshStandardMaterial({\n color: 0x4a90d9,\n roughness: 0.3,\n metalness: 0.7,\n });\n const sphere = new THREE.Mesh(sphereGeom, sphereMat);\n\n const wireframe = new THREE.LineSegments(\n new THREE.WireframeGeometry(sphereGeom),\n new THREE.LineBasicMaterial({ color: 0xffffff, opacity: 0.3, transparent: true })\n );\n sphere.add(wireframe);\n\n return sphere;\n}",
"imports": "import * as THREE from 'three';",
"domain": "threejs-geometry",
},
# Materials — PBR
{
"problem": "Apply a physically-based material with environment mapping to a Three.js object.",
"solution": "function createReflectiveMaterial(envMap: THREE.CubeTexture) {\n return new THREE.MeshStandardMaterial({\n color: 0xffffff,\n metalness: 1.0,\n roughness: 0.1,\n envMap: envMap,\n envMapIntensity: 1.0,\n });\n}\n\n// Usage\nconst material = createReflectiveMaterial(cubeTexture);\nconst mesh = new THREE.Mesh(geometry, material);",
"imports": "import * as THREE from 'three';",
"domain": "threejs-materials",
},
# --- Lighting ---
{
"problem": "Create a Three.js lighting setup with ambient, directional, and point lights.",
"solution": "function setupLighting(scene: THREE.Scene) {\n const ambient = new THREE.AmbientLight(0x404040, 0.5);\n scene.add(ambient);\n\n const directional = new THREE.DirectionalLight(0xffffff, 1.0);\n directional.position.set(5, 10, 7);\n directional.castShadow = true;\n directional.shadow.mapSize.width = 2048;\n directional.shadow.mapSize.height = 2048;\n scene.add(directional);\n\n const point = new THREE.PointLight(0xff9000, 0.8, 20);\n point.position.set(-3, 2, 3);\n scene.add(point);\n\n return { ambient, directional, point };\n}",
"imports": "import * as THREE from 'three';",
"domain": "threejs-lighting",
},
# --- Camera OrbitControls ---
{
"problem": "Implement OrbitControls camera with constrained polar angles and smooth damping.",
"solution": "function setupOrbitControls(camera: THREE.PerspectiveCamera, domElement: HTMLElement) {\n const controls = new THREE.OrbitControls(camera, domElement);\n controls.enableDamping = true;\n controls.dampingFactor = 0.05;\n controls.minDistance = 2;\n controls.maxDistance = 20;\n controls.maxPolarAngle = Math.PI / 2;\n controls.minPolarAngle = Math.PI / 6;\n controls.enablePan = false;\n return controls;\n}",
"imports": "import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';",
"domain": "threejs-camera",
},
# --- Delta-time rotation ---
{
"problem": "Create a smooth Three.js rotation animation using delta time.",
"solution": "class RotatingObject {\n mesh: THREE.Mesh;\n speed: number;\n\n constructor(mesh: THREE.Mesh, rotationsPerSecond = 0.5) {\n this.mesh = mesh;\n this.speed = rotationsPerSecond * Math.PI * 2;\n }\n\n update(deltaSec: number) {\n this.mesh.rotation.y += this.speed * deltaSec;\n }\n}\n\n// In render loop:\nconst rotor = new RotatingObject(sphere, 0.25);\nlet last = performance.now();\nfunction animate(time: number) {\n const delta = (time - last) / 1000;\n last = time;\n rotor.update(delta);\n renderer.render(scene, camera);\n requestAnimationFrame(animate);\n}",
"imports": "import * as THREE from 'three';",
"domain": "threejs-animation",
},
# --- Texture loading async ---
{
"problem": "Load a Three.js texture asynchronously with proper error handling.",
"solution": "async function loadTexture(url: string): Promise<THREE.Texture> {\n const loader = new THREE.TextureLoader();\n try {\n return await new Promise<THREE.Texture>((resolve, reject) => {\n loader.load(url, resolve, undefined, reject);\n });\n } catch (err) {\n console.error('Texture load failed:', url, err);\n throw err;\n }\n}",
"imports": "import * as THREE from 'three';",
"domain": "threejs-textures",
},
# --- Rounded box ---
{
"problem": "Create a rounded-box Three.js geometry using RoundedBoxGeometry.",
"solution": "function createRoundedBox(width = 1, height = 1, depth = 1, segments = 2, radius = 0.1) {\n const geom = new THREE.RoundedBoxGeometry(width, height, depth, segments, radius);\n const mat = new THREE.MeshStandardMaterial({ color: 0x2ecc71 });\n return new THREE.Mesh(geom, mat);\n}",
"imports": "import { RoundedBoxGeometry } from 'three/examples/jsm/geometries/RoundedBoxGeometry.js';",
"domain": "threejs-geometry",
},
# --- Fog ---
{
"problem": "Add depth fog to a Three.js scene for atmospheric perspective.",
"solution": "function addFog(scene: THREE.Scene, color = 0x0a0a0a, near = 10, far = 50) {\n scene.fog = new THREE.Fog(color, near, far);\n scene.background = new THREE.Color(color);\n}",
"imports": "import * as THREE from 'three';",
"domain": "threejs-scene",
},
# --- ShaderMaterial ---
{
"problem": "Create a Three.js ShaderMaterial with uniform updates in the render loop.",
"solution": "function createGlowShader() {\n return new THREE.ShaderMaterial({\n uniforms: {\n uTime: { value: 0 },\n uColor: { value: new THREE.Color(0x00ffff) },\n },\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n uniform float uTime;\n uniform vec3 uColor;\n varying vec2 vUv;\n void main() {\n float pulse = 0.5 + 0.5 * sin(uTime * 2.0);\n gl_FragColor = vec4(uColor * pulse, 1.0);\n }\n `,\n transparent: true,\n });\n}",
"imports": "import * as THREE from 'three';",
"domain": "threejs-materials",
},
# --- Group hierarchy ---
{
"problem": "Organize Three.js objects into a hierarchical group with local transforms.",
"solution": "function createVehicleGroup() {\n const chassis = new THREE.Mesh(\n new THREE.BoxGeometry(2, 0.5, 4),\n new THREE.MeshStandardMaterial({ color: 0x333333 })\n );\n\n const wheels = new THREE.Group();\n const positions = [[-1, -0.3, -1.2], [1, -0.3, -1.2], [-1, -0.3, 1.2], [1, -0.3, 1.2]];\n positions.forEach(([x, y, z]) => {\n const wheel = new THREE.Mesh(\n new THREE.CylinderGeometry(0.3, 0.3, 0.2, 16),\n new THREE.MeshStandardMaterial({ color: 0x111111 })\n );\n wheel.rotation.z = Math.PI / 2;\n wheel.position.set(x, y, z);\n wheels.add(wheel);\n });\n\n const group = new THREE.Group();\n group.add(chassis);\n group.add(wheels);\n return group;\n}",
"imports": "import * as THREE from 'three';",
"domain": "threejs-scene",
},
# --- Raycasting ---
{
"problem": "Implement Three.js raycaster click picking with object metadata.",
"solution": "function setupRaycaster(camera: THREE.Camera, dom: HTMLElement) {\n const raycaster = new THREE.Raycaster();\n const mouse = new THREE.Vector2();\n\n dom.addEventListener('click', (e) => {\n const rect = dom.getBoundingClientRect();\n mouse.x = ((e.clientX - rect.left) / rect.width) * 2 - 1;\n mouse.y = -((e.clientY - rect.top) / rect.height) * 2 + 1;\n\n raycaster.setFromCamera(mouse, camera);\n const intersects = raycaster.intersectObjects(scene.children, true);\n if (intersects.length > 0) {\n const hit = intersects[0].object;\n console.log('Clicked:', hit.userData.name || hit.uuid);\n }\n });\n\n return raycaster;\n}",
"imports": "import * as THREE from 'three';",
"domain": "threejs-interaction",
},
]
# ============================================================
# HTML/CSS/JS Templates
# ============================================================
HTML_CSS_JS_TEMPLATES = [
# --- DOM element creation ---
{
"problem": "Create a DOM element with multiple classes and attributes in vanilla JavaScript.",
"solution": "function createElement(tag: string, classes: string[] = [], attrs: Record<string, string> = {}, children: Node[] = []) {\n const el = document.createElement(tag);\n el.classList.add(...classes);\n for (const [key, value] of Object.entries(attrs)) {\n el.setAttribute(key, value);\n }\n for (const child of children) {\n el.appendChild(child);\n }\n return el;\n}\n\n// Usage\nconst button = createElement('button', ['btn', 'btn-primary'], { 'aria-label': 'Submit' }, [\n document.createTextNode('Submit')\n]);",
"imports": "",
"domain": "html-dom",
},
# --- Event delegation ---
{
"problem": "Implement event delegation for dynamic button clicks with proper type checking.",
"solution": "function setupEventDelegation(container: HTMLElement) {\n container.addEventListener('click', (e) => {\n const target = e.target as HTMLElement;\n if (!target.matches('button[data-action]')) return;\n\n const action = target.getAttribute('data-action');\n switch (action) {\n case 'save':\n handleSave();\n break;\n case 'delete':\n handleDelete();\n break;\n default:\n console.warn('Unknown action:', action);\n }\n });\n}",
"imports": "",
"domain": "html-dom",
},
# --- Form validation ---
{
"problem": "Validate a form submission with HTML5 constraints and custom checks.",
"solution": "function validateForm(form: HTMLFormElement): { isValid: boolean; errors: string[] } {\n const errors: string[] = [];\n const email = form.elements.namedItem('email') as HTMLInputElement;\n const password = form.elements.namedItem('password') as HTMLInputElement;\n\n if (!email.validity.valid) {\n errors.push('Please enter a valid email address.');\n }\n if (password.value.length < 8) {\n errors.push('Password must be at least 8 characters.');\n }\n if (password.value !== (form.elements.namedItem('confirm') as HTMLInputElement).value) {\n errors.push('Passwords do not match.');\n }\n\n return { isValid: errors.length === 0, errors };\n}",
"imports": "",
"domain": "html-forms",
},
# --- CSS Grid ---
{
"problem": "Create a responsive CSS grid layout with auto-fill and gap.",
"solution": "const style = document.createElement('style');\nstyle.textContent = `\n .card-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: 1.5rem;\n padding: 1rem;\n }\n .card {\n background: var(--card-bg);\n border-radius: 8px;\n box-shadow: 0 2px 8px rgba(0,0,0,0.1);\n }\n @media (max-width: 600px) {\n .card-grid { grid-template-columns: 1fr; }\n }\n`;\ndocument.head.appendChild(style);",
"imports": "",
"domain": "css-layout",
},
# --- CSS custom properties ---
{
"problem": "Set and read CSS custom properties (CSS variables) via JavaScript.",
"solution": "function setThemeColor(root: HTMLElement, name: string, value: string) {\n root.style.setProperty(`--theme-${name}`, value);\n}\n\nfunction getComputedColor(root: HTMLElement, name: string): string {\n return getComputedStyle(root).getPropertyValue(`--theme-${name}`).trim();\n}\n\n// Initialize theme\nsetThemeColor(document.documentElement, 'primary', '#4a90d9');\nsetThemeColor(document.documentElement, 'accent', '#ff6b6b');",
"imports": "",
"domain": "css-variables",
},
# --- Intersection Observer ---
{
"problem": "Use IntersectionObserver to lazy-load images when they enter the viewport.",
"solution": "function setupLazyLoading(container: HTMLElement) {\n const images = container.querySelectorAll('img[data-src]');\n const observer = new IntersectionObserver((entries) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n const img = entry.target as HTMLImageElement;\n img.src = img.dataset.src!;\n img.removeAttribute('data-src');\n observer.unobserve(img);\n }\n });\n }, { rootMargin: '50px' });\n\n images.forEach(img => observer.observe(img));\n}",
"imports": "",
"domain": "html-performance",
},
]
# ============================================================
# Playground UI Templates
# ============================================================
PLAYGROUND_UI_TEMPLATES = [
# --- Sovereignty badge ---
{
"problem": "Render a sovereignty badge displaying local-first status with tooltip.",
"solution": "function SovereigntyBadge({ runningLocal }: { runningLocal: boolean }) {\n const badge = document.createElement('span');\n badge.className = 'sovereignty-badge';\n badge.innerHTML = runningLocal\n ? '\\ud83c\\uddf5\\ud83c\\uddf1\\u200d\\ud83c\\udfa8\\ufe0f Local'\n : '\\ud83d\\udd12 Cloud';\n badge.title = runningLocal\n ? 'This agent runs entirely on your machine'\n : 'This agent uses external inference';\n return badge;\n}",
"imports": "",
"domain": "playground-ui",
},
# --- Token counter ---
{
"problem": "Build a token budget display showing used/total with a visual progress bar.",
"solution": "function TokenBudgetDisplay({ used, total }: { used: number; total: number }) {\n const pct = Math.min((used / total) * 100, 100);\n const bar = document.createElement('div');\n bar.className = 'token-budget-bar';\n bar.innerHTML = `\n <div class=\"track\">\n <div class=\"fill\" style=\"width: ${pct}%; background: ${pct > 90 ? '#f44336' : '#4caf50'}\"></div>\n </div>\n <span class=\"label\">${used.toLocaleString()} / ${total.toLocaleString()} tokens</span>\n `;\n return bar;\n}",
"imports": "",
"domain": "playground-ui",
},
# --- Approval gate ---
{
"problem": "Create an approval gate component for dangerous commands with tiered risk colors.",
"solution": "function ApprovalGate({ risk, onApprove, onDeny }: {\n risk: 'low' | 'medium' | 'high';\n onApprove: () => void;\n onDeny: () => void;\n}) {\n const colors = { low: '#4caf50', medium: '#ff9800', high: '#f44336' };\n const panel = document.createElement('div');\n panel.className = 'approval-gate';\n panel.style.borderColor = colors[risk];\n panel.innerHTML = `\n <p>This action is <strong>${risk} risk</strong>. Continue?</p>\n <button data-action=\"approve\">Yes, proceed</button>\n <button data-action=\"deny\">No, cancel</button>\n `;\n panel.querySelector('[data-action=\"approve\"]')!.addEventListener('click', onApprove);\n panel.querySelector('[data-action=\"deny\"]')!.addEventListener('click', onDeny);\n return panel;\n}",
"imports": "",
"domain": "playground-ui",
},
# --- Skill card ---
{
"problem": "Render a skill card with metadata, status indicator, and toggle switch.",
"solution": "function SkillCard({ skill, enabled, onToggle }: {\n skill: { name: string; description: string; category: string };\n enabled: boolean;\n onToggle: (name: string) => void;\n}) {\n const card = document.createElement('article');\n card.className = 'skill-card';\n card.innerHTML = `\n <header>\n <h3>${skill.name}</h3>\n <label class=\"toggle\">\n <input type=\"checkbox\" ${enabled ? 'checked' : ''}>\n <span class=\"slider\"></span>\n </label>\n </header>\n <p>${skill.description}</p>\n <footer>Category: ${skill.category}</footer>\n `;\n card.querySelector('input')!.addEventListener('change', () => onToggle(skill.name));\n return card;\n}",
"imports": "",
"domain": "playground-ui",
},
]
# ============================================================
# Gallery Templates
# ============================================================
GALLERY_TEMPLATES = [
# --- Masonry grid ---
{
"problem": "Implement a responsive masonry image grid using CSS columns.",
"solution": "function createMasonryGallery(images: { src: string; alt: string }[], columns = 3) {\n const container = document.createElement('div');\n container.className = 'masonry-gallery';\n container.style.columnCount = String(columns);\n container.style.gap = '1rem';\n\n images.forEach(img => {\n const figure = document.createElement('figure');\n figure.innerHTML = `<img src=\"${img.src}\" alt=\"${img.alt}\" loading=\"lazy\">`;\n container.appendChild(figure);\n });\n\n // Responsive breakpoints\n const mq = window.matchMedia('(max-width: 768px)');\n mq.addEventListener('change', (e) => {\n container.style.columnCount = e.matches ? '2' : String(columns);\n });\n\n return container;\n}",
"imports": "",
"domain": "gallery-layout",
},
# --- Lightbox modal ---
{
"problem": "Build a modal lightbox for full-screen image viewing with keyboard navigation.",
"solution": "class Lightbox {\n private overlay!: HTMLElement;\n private img!: HTMLImageElement;\n\n constructor() {\n this.overlay = document.createElement('div');\n this.overlay.className = 'lightbox-overlay';\n this.overlay.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,0.9);display:flex;align-items:center;justify-content:center;z-index:9999';\n this.img = document.createElement('img');\n this.overlay.appendChild(this.img);\n document.body.appendChild(this.overlay);\n\n this.overlay.addEventListener('click', () => this.close());\n document.addEventListener('keydown', (e) => e.key === 'Escape' && this.close());\n }\n\n open(src: string, alt: string) {\n this.img.src = src;\n this.img.alt = alt;\n this.overlay.style.display = 'flex';\n }\n\n close() {\n this.overlay.style.display = 'none';\n }\n}",
"imports": "",
"domain": "gallery-interaction",
},
# --- Infinite scroll ---
{
"problem": "Implement infinite scroll loading with IntersectionObserver and abort handling.",
"solution": "async function setupInfiniteScroll(container: HTMLElement, loadPage: (page: number) => Promise<void>) {\n let page = 1;\n let loading = false;\n let done = false;\n\n const sentinel = document.createElement('div');\n sentinel.className = 'scroll-sentinel';\n container.appendChild(sentinel);\n\n const observer = new IntersectionObserver(async (entries) => {\n if (entries[0].isIntersecting && !loading && !done) {\n loading = true;\n try {\n await loadPage(++page);\n } catch (err) {\n console.error('Failed to load page:', err);\n done = true;\n }\n loading = false;\n }\n }, { rootMargin: '200px' });\n\n observer.observe(sentinel);\n}",
"imports": "",
"domain": "gallery-performance",
},
]
# ============================================================
# Game Templates
# ============================================================
GAME_TEMPLATES = [
# --- Game loop ---
{
"problem": "Create a fixed-timestep game loop with accumulator pattern.",
"solution": "class GameLoop {\n private lastTime = 0;\n private accumulator = 0;\n private readonly step = 1 / 60; // 60 Hz fixed step\n\n constructor(private readonly update: (dt: number) => void) {}\n\n start() {\n const frame = (time: number) => {\n const delta = (time - this.lastTime) / 1000;\n this.lastTime = time;\n this.accumulator += delta;\n\n while (this.accumulator >= this.step) {\n this.update(this.step);\n this.accumulator -= this.step;\n }\n\n requestAnimationFrame(frame);\n };\n requestAnimationFrame(frame);\n }\n}",
"imports": "",
"domain": "game-architecture",
},
# --- Canvas setup ---
{
"problem": "Set up an HTML5 canvas with high-DPI scaling and clearing.",
"solution": "function setupCanvas(canvas: HTMLCanvasElement, width = 800, height = 600) {\n const dpr = window.devicePixelRatio || 1;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n\n const ctx = canvas.getContext('2d')!;\n ctx.scale(dpr, dpr);\n\n return {\n clear() { ctx.clearRect(0, 0, width, height); },\n ctx,\n width,\n height,\n };\n}",
"imports": "",
"domain": "game-rendering",
},
# --- Sprite animation ---
{
"problem": "Animate a sprite sheet with frame-based playback and loop support.",
"solution": "class SpriteAnimator {\n private frame = 0;\n private lastTick = 0;\n\n constructor(\n private readonly image: HTMLImageElement,\n private readonly frameWidth: number,\n private readonly frameCount: number,\n private readonly fps: number = 12,\n private readonly loop: boolean = true,\n ) {}\n\n update(now: number) {\n const interval = 1000 / this.fps;\n if (now - this.lastTick >= interval) {\n this.lastTick = now;\n this.frame++;\n if (this.frame >= this.frameCount) {\n this.frame = this.loop ? 0 : this.frameCount - 1;\n }\n }\n }\n\n draw(ctx: CanvasRenderingContext2D, x: number, y: number) {\n ctx.drawImage(\n this.image,\n this.frame * this.frameWidth, 0,\n this.frameWidth, this.image.height,\n x, y,\n this.frameWidth, this.image.height\n );\n }\n}",
"imports": "",
"domain": "game-assets",
},
# --- AABB collision ---
{
"problem": "Detect AABB (axis-aligned bounding box) collision between two rectangles.",
"solution": "function aabbCollision(\n a: { x: number; y: number; w: number; h: number },\n b: { x: number; y: number; w: number; h: number }\n): boolean {\n return a.x < b.x + b.w &&\n a.x + a.w > b.x &&\n a.y < b.y + b.h &&\n a.y + a.h > b.y;\n}\n\n// Usage for game entities\nif (aabbCollision(player, enemy)) {\n handlePlayerHit();\n}",
"imports": "",
"domain": "game-physics",
},
# --- Input handling ---
{
"problem": "Capture keyboard input state with smooth handling for game controls.",
"solution": "class InputState {\n private keys = new Set<string>();\n\n constructor() {\n window.addEventListener('keydown', (e) => this.keys.add(e.code));\n window.addEventListener('keyup', (e) => this.keys.delete(e.code));\n }\n\n isPressed(code: string): boolean {\n return this.keys.has(code);\n }\n\n hasAny(codes: string[]): boolean {\n return codes.some(c => this.keys.has(c));\n }\n}\n\n// In game loop:\nconst input = new InputState();\nif (input.isPressed('ArrowUp')) player.y -= speed * dt;",
"imports": "",
"domain": "game-input",
},
]
# ============================================================
# Extra HTML/CSS/JS Templates
# ============================================================
HTML_CSS_JS_TEMPLATES_EXTRA = [
# Debounce utility
{
"problem": "Write a debounce function that delays invoking a callback until after wait milliseconds.",
"solution": "function debounce<T extends (...args: any[]) => void>(\n fn: T,\n wait: number\n): (...args: Parameters<T>) => void {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n return (...args: Parameters<T>) => {\n if (timeoutId) clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn(...args), wait);\n };\n}",
"imports": "",
"domain": "html-utilities",
},
# Throttle utility
{
"problem": "Implement a throttle function ensuring a callback runs at most once per interval.",
"solution": "function throttle<T extends (...args: any[]) => void>(\n fn: T,\n interval: number\n): (...args: Parameters<T>) => void {\n let last = 0;\n return (...args: Parameters<T>) => {\n const now = Date.now();\n if (now - last >= interval) {\n last = now;\n fn(...args);\n }\n };\n}",
"imports": "",
"domain": "html-utilities",
},
# LocalStorage wrapper with TTL
{
"problem": "Wrap localStorage with JSON serialization and TTL expiration.",
"solution": "class StorageWithTTL {\n set(key: string, value: any, ttlMs = 0) {\n const item = { value, expiry: ttlMs ? Date.now() + ttlMs : null };\n localStorage.setItem(key, JSON.stringify(item));\n }\n\n get<T>(key: string): T | null {\n const raw = localStorage.getItem(key);\n if (!raw) return null;\n const { value, expiry } = JSON.parse(raw);\n if (expiry && Date.now() > expiry) {\n localStorage.removeItem(key);\n return null;\n }\n return value as T;\n }\n}",
"imports": "",
"domain": "html-storage",
},
# Viewport meta
{
"problem": "Generate a responsive viewport meta tag for mobile-first web apps.",
"solution": "const viewport = document.querySelector('meta[name=\"viewport\"]') ||\n document.createElement('meta');\nviewport.name = 'viewport';\nviewport.content = 'width=device-width, initial-scale=1.0, maximum-scale=5.0, user-scalable=yes, viewport-fit=cover';\ndocument.head.appendChild(viewport);",
"imports": "",
"domain": "html-meta",
},
# Dynamic CSS variables
{
"problem": "Create and inject a dynamic stylesheet with CSS custom property overrides.",
"solution": "function injectDynamicStyles(overrides: Record<string, string>) {\n const style = document.createElement('style');\n let css = ':root {\\n';\n for (const [prop, val] of Object.entries(overrides)) {\n css += ` --${prop}: ${val};\\n`;\n }\n css += '}';\n style.textContent = css;\n document.head.appendChild(style);\n}",
"imports": "",
"domain": "css-variables",
},
]
# ============================================================
# Extra Playground UI Templates
# ============================================================
PLAYGROUND_UI_TEMPLATES_EXTRA = [
# Circuit/tier badge
{
"problem": "Render a circuit health badge showing approval-tier status with color-coded indicator.",
"solution": "function CircuitBadge({ tier }: { tier: number }) {\n const colors = ['#f44336', '#ff9800', '#4caf50', '#2196f3', '#9c27b0'];\n const labels = ['BLOCKED', 'RESTRICTED', 'LIMITED', 'APPROVED', 'ELEVATED'];\n const color = colors[Math.min(tier, 4)];\n const label = labels[Math.min(tier, 4)];\n\n const badge = document.createElement('span');\n badge.className = 'circuit-badge';\n badge.style.backgroundColor = color;\n badge.textContent = label;\n badge.title = `Approval tier ${tier} — ${label.toLowerCase()} command set`;\n return badge;\n}",
"imports": "",
"domain": "playground-ui",
},
# Memory usage bar
{
"problem": "Display a horizontal memory usage bar with gradient warning zones.",
"solution": "function MemoryBar({ used, total }: { used: number; total: number }) {\n const pct = (used / total) * 100;\n const bar = document.createElement('div');\n bar.className = 'memory-bar';\n let color = '#4caf50';\n if (pct > 80) color = '#ff9800';\n if (pct > 95) color = '#f44336';\n\n bar.innerHTML = `\n <div class=\"track\" style=\"background: #e0e0e0; height: 8px; border-radius: 4px; overflow: hidden;\">\n <div style=\"width: ${pct}%; height: 100%; background: ${color}; transition: width 0.3s;\"></div>\n </div>\n <span>${(used/1024/1024).toFixed(1)} MB / ${(total/1024/1024).toFixed(1)} MB</span>\n `;\n return bar;\n}",
"imports": "",
"domain": "playground-ui",
},
# Tool status dot
{
"problem": "Show a tool availability status dot with tooltip for the toolset panel.",
"solution": "function ToolStatus({ name, ok }: { name: string; ok: boolean }) {\n const dot = document.createElement('span');\n dot.className = 'tool-status-dot';\n dot.style.backgroundColor = ok ? '#4caf50' : '#f44336';\n dot.title = `${name}: ${ok ? 'Available' : 'Disabled / missing API key'}`;\n return dot;\n}",
"imports": "",
"domain": "playground-ui",
},
]
# ============================================================
# Extra Gallery Templates
# ============================================================
GALLERY_TEMPLATES_EXTRA = [
# Grid + shared lightbox
{
"problem": "Build an image gallery grid that opens a shared lightbox on thumbnail click.",
"solution": "let currentLightbox: HTMLDivElement | null = null;\n\nfunction buildGallery(images: { full: string; thumb: string; alt: string }[]) {\n const grid = document.createElement('div');\n grid.className = 'gallery-grid';\n grid.style.cssText = 'display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:0.5rem';\n\n images.forEach((img, idx) => {\n const thumb = document.createElement('img');\n thumb.src = img.thumb;\n thumb.alt = img.alt;\n thumb.style.cssText = 'cursor:pointer;width:100%;height:auto;object-fit:cover;border-radius:4px';\n thumb.addEventListener('click', () => openLightbox(idx));\n grid.appendChild(thumb);\n });\n\n return grid;\n}\n\nfunction openLightbox(index: number) {\n if (currentLightbox) currentLightbox.remove();\n currentLightbox = document.createElement('div');\n currentLightbox.className = 'lightbox';\n currentLightbox.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,0.95);display:flex;align-items:center;justify-content:center;z-index:10000;cursor:pointer';\n const img = document.createElement('img');\n img.src = images[index].full;\n img.style.maxWidth = '90vw';\n img.style.maxHeight = '90vh';\n currentLightbox.appendChild(img);\n currentLightbox.addEventListener('click', () => { currentLightbox?.remove(); currentLightbox = null; });\n document.body.appendChild(currentLightbox);\n}",
"imports": "",
"domain": "gallery-interaction",
},
]
# ============================================================
# Extra Game Templates
# ============================================================
GAME_TEMPLATES_EXTRA = [
# Particle system with typed array
{
"problem": "Create a simple particle system for explosions using a typed array buffer.",
"solution": "class ParticleSystem {\n private particles = new Float32Array(1000 * 4); // x, y, vx, vy per particle\n private count = 0;\n private readonly max = 1000;\n\n emit(x: number, y: number, velocity = 200) {\n if (this.count >= this.max) return;\n const i = this.count * 4;\n this.particles[i] = x;\n this.particles[i + 1] = y;\n const angle = Math.random() * Math.PI * 2;\n const speed = Math.random() * velocity;\n this.particles[i + 2] = Math.cos(angle) * speed;\n this.particles[i + 3] = Math.sin(angle) * speed;\n this.count++;\n }\n\n update(dt: number) {\n for (let i = 0; i < this.count * 4; i += 4) {\n this.particles[i] += this.particles[i + 2] * dt;\n this.particles[i + 1] += this.particles[i + 3] * dt;\n this.particles[i + 3] += 500 * dt; // gravity\n }\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n ctx.fillStyle = '#ff6600';\n for (let i = 0; i < this.count * 4; i += 4) {\n ctx.fillRect(this.particles[i], this.particles[i + 1], 3, 3);\n }\n }\n}",
"imports": "",
"domain": "game-physics",
},
# State machine
{
"problem": "Implement a finite state machine for a game character with transitions.",
"solution": "type State = 'idle' | 'walk' | 'run' | 'jump' | 'attack';\n\nclass StateMachine {\n private state: State = 'idle';\n private handlers: Record<State, (event: string) => void>;\n\n constructor(handlers: Partial<Record<State, (event: string) => void>>) {\n this.handlers = handlers as Record<State, (event: string) => void>;\n }\n\n transition(to: State) {\n console.log(`State: ${this.state} -> ${to}`);\n this.state = to;\n }\n\n dispatch(event: string) {\n const handler = this.handlers[this.state];\n if (handler) handler(event);\n }\n\n getState(): State {\n return this.state;\n }\n}\n\n// Usage\nconst sm = new StateMachine({\n idle: (e) => { if (e === 'move') sm.transition('walk'); },\n walk: (e) => { if (e === 'sprint') sm.transition('run'); if (e === 'jump') sm.transition('jump'); },\n run: (e) => { if (e === 'stop') sm.transition('idle'); },\n});",
"imports": "",
"domain": "game-architecture",
},
]
# ============================================================
# Combined
# ============================================================
ALL_TEMPLATES = (
THREEJS_TEMPLATES
+ HTML_CSS_JS_TEMPLATES
+ HTML_CSS_JS_TEMPLATES_EXTRA
+ PLAYGROUND_UI_TEMPLATES
+ PLAYGROUND_UI_TEMPLATES_EXTRA
+ GALLERY_TEMPLATES
+ GALLERY_TEMPLATES_EXTRA
+ GAME_TEMPLATES
+ GAME_TEMPLATES_EXTRA
)
_VARIANT_PREFIXES = [
"Write code to",
"Implement",
"Build",
"Create",
"How would you",
"Using the API, write code that",
"Construct a function that",
"Develop",
"Write JavaScript that",
"Create HTML/CSS for",
"Design a Three.js",
]
_VARIANT_SUFFIXES = [
" including error handling.",
" with full docstrings.",
" with JSDoc annotations.",
" using modern best practices.",
" that handles edge cases.",
" with TypeScript types.",
" that is performant.",
" with clear variable names.",
" and include example usage.",
" with proper cleanup.",
" that is accessible (a11y).",
" with keyboard navigation support.",
]
def vary_problem(base: str, idx: int) -> str:
prefix = _VARIANT_PREFIXES[idx % len(_VARIANT_PREFIXES)]
suffix = _VARIANT_SUFFIXES[idx % len(_VARIANT_SUFFIXES)]
cleaned = base
for article in ("Create a ", "Build a ", "Implement a ", "Write a ", "Develop a ", "Write JavaScript that ", "Create HTML/CSS for ", "Design a Three.js "):
if cleaned.lower().startswith(article):
cleaned = cleaned[len(article):]
break
cleaned = cleaned[0].lower() + cleaned[1:] if cleaned else ""
return f"{prefix} {cleaned}{suffix}"
def vary_solution(base: str, idx: int) -> str:
var_names = ["data", "result", "value", "entry", "item", "node", "entity", "output", "obj", "element"]
v = var_names[idx % len(var_names)]
sol = base
if idx % 3 == 0:
for original in ["result", "data", "value", "output", "entry", "item", "obj", "element"]:
if original in sol:
sol = sol.replace(original, v)
break
if idx % 5 == 0:
sol = f"// Variation {idx}\\n" + sol
elif idx % 7 == 0:
sol = f"# Generated variation {idx}\\n" + sol
return sol
def generate_pairs(count: int = 1000) -> list[dict]:
pairs = []
template_cycle = list(ALL_TEMPLATES)
random.shuffle(template_cycle)
for i in range(count):
template = template_cycle[i % len(template_cycle)]
problem = vary_problem(template["problem"], i)
solution = vary_solution(template["solution"], i)
pair = {
"problem": problem,
"solution": solution,
"imports": template["imports"],
"domain": template["domain"],
"id": f"frontend-creative-{i:04d}",
}
pairs.append(pair)
return pairs
def main():
parser = argparse.ArgumentParser(description="Generate Frontend & Creative code pattern training pairs")
parser.add_argument("--output", "-o", default="training-data/code-patterns-frontend-&-creative.jsonl",
help="Output JSONL path")
parser.add_argument("--count", "-n", type=int, default=1000,
help="Number of pairs to generate")
args = parser.parse_args()
out_path = Path(args.output)
out_path.parent.mkdir(parents=True, exist_ok=True)
pairs = generate_pairs(args.count)
with open(out_path, "w", encoding="utf-8") as f:
for pair in pairs:
f.write(json.dumps(pair, ensure_ascii=False) + "\n")
domains = {p["domain"] for p in pairs}
print(f"Generated {len(pairs)} code pattern pairs → {out_path}")
print(f" Size: {out_path.stat().st_size / 1024:.1f} KB")
print(f" Domains ({len(domains)}): {sorted(domains)}")
if __name__ == "__main__":
main()

File diff suppressed because it is too large Load Diff