You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Updated 2026-08-18 after the run and its follow-ups merged. 8 of 20 Part B decisions are resolved
(struck through below), 3 are partly done or in flight, 9 are untouched. Part A is 12 entries (was 13):
one landed, and five had stale paths that are now corrected rather than dropped.
Numbering is unchanged — B-numbers are referenced from PR titles and descriptions.
Part A — Carry-over (bot-owned, machine-readable)
12 entries (was 13). Changes since the last revision:
2 of those were swept by chore: Enforce Minimal Code Comments #2630 — ComponentDetail.tsx and nodes/types.ts were in its file list but
still carry 27 and 43 comment lines. Kept rather than closed: these are file-scoped pointers, so whether
the remainder is legitimate why commentary needs the re-analysis E7 does anyway. Deprioritize, don't skip.
#2630 also added the local/no-type-member-comments ESLint rule, so the type-member slice of this pillar is
now enforced at lint time rather than swept weekly.
Granularity note, so the next run isn't misled: the remaining comments entries are file-scoped
pointers, not line-level snippets. They came from MAP partitions whose per-finding detail was
summarised rather than persisted, so they carry no proposedSnippet and need re-analysis — they are
a ranking hint only. The one dry entry is fully re-appliable.
B1. Fix pnpm run test:coverage. — Done in fix: repair pnpm run test:coverage by upgrading to vitest 4 #2632. Upgraded to vitest@4 with a matching @vitest/coverage-v8, and test:coverage is now vitest run --coverage. The tests pillar has its
coverage × churn signal back.
B4. The review skill can't be invoked by the bot. — Done in fix(gardening): make the E8 self-review executable #2637, via the second option:
E8 now reads.claude/skills/review/SKILL.md and follows its procedure instead of invoking it. The
skill stays disable-model-invocation everywhere else.
B5. readOnly precedence in the node factories. — fix written, awaiting merge in #2625
Ruled a bug: the factories now resolve readOnly ?? nodeData.readOnly ?? false. Verified a no-op on every
current path (the node-level gate reads the same field), and inheritance can only tighten. Closes when #2625 merges.
B18. Design tokens for hardcoded text colours. — partly done #2631 cleared the residual sites it covered. The originally-named ones are still open: ContextPanelProvider.tsx:32 (text-gray-500) and ImportPipeline.tsx:229/:232/:240/:243. #2639 is open and adds a success tone plus the colour migrations.
B19. flex flex-col → BlockStack, and heading primitives. — (a) mostly done, (b) open
(a) Down from 27 sites to 5 (ArtifactVisualizer.tsx:109, ComponentDetailsDialog.tsx:100, DockArea.tsx:121, DebugPanel.tsx:78, HistoryContent.tsx:52) — each combines flex flex-col with
other classes, so they need the per-site w-full/items-start call.
(b) Unchanged:Heading still takes only children and level and accepts no className, so the
16 heading sites remain blocked. #2639 is open and widens Heading's props.
Behavior questions the bot must not answer for you
B6. The two it.todos in hydrateComponentReference.test.ts. — real-issue-bot-couldn't-safely-fix :892 "should use text over spec when they differ" and :979 "should return null when text is invalid
YAML but valid spec" both carry their own "todo: decide" notes. Yes ⇒ state the intended semantics for each; the bot then writes the two tests. Implementing them now
would mean inventing the behavior.
B7. Un-skip tests/e2e/aggregator.spec.ts:49. — real-issue-bot-couldn't-safely-fix test.skip("should add dynamic inputs when connection is made to add-input handle"). Yes ⇒ someone runs Playwright locally and either un-skips it or deletes it. Left skipped because this
environment has no browser/dev server and shipping an unexecuted spec is worse than leaving it off.
B8. Widen ArgumentType for DynamicDataArgument. — touchesProtected arguments.actions.ts:57 and BatchArgumentRow.tsx:138 both use as unknown as ArgumentType. Yes ⇒ a human changes the componentSpec type (a protectedPatterns entry the bot may never touch),
after which both casts delete cleanly.
B9. Adopt useRequiredContext in the four hand-rolled contexts. — not-behavior-preserving useDialog.ts:8, NodeRegistryContext.tsx:22, SpecContext.tsx:41, ContentWindowStateContext.tsx:31.
The canonical hook throws a different message (Required context ${displayName} was not found) and createRequiredContext changes the context default to null — both observable. Yes ⇒ accept the message/default change and the bot migrates all four.
Design / architecture calls
B11. Relocate the component-search logic. — not-behavior-preserving componentSearchV2Logic.ts (a v2 Editor page internal) is re-implemented in routes/Dashboard/DashboardComponentsV2View.tsx — 6 duplicated symbols. Adopting it directly would make routes/Dashboard/** import another page's internals. Yes ⇒ move it to src/services/**, then the bot adopts it from both call sites.
B13. Shared confirmation-dialog host. — new-component proposal useConfirmationDialog + <ConfirmationDialog {...props} /> repeated verbatim in 6 files. Yes ⇒ a human writes the shared component; the bot then migrates the 6 call sites. (The bot may not
author new components.)
B14. Shared pagination control. — new-component proposal DashboardFavoritesView and DashboardRecentlyViewedView share 25 identical lines. Note src/components/shared/PaginationControls.tsx and src/hooks/usePagination.ts already exist (from #2028)
but neither view uses them — worth checking whether adopting those is enough. Yes ⇒ a human decides adopt-or-extract; the bot migrates both.
B15. RunActionsBar vs RunMenu. — new-component proposal RunActionsBar.tsx and RunViewMenuBar/components/RunMenu.tsx share ~34 lines of menu items + dialogs,
both v2, same feature. Yes ⇒ a human extracts the shared surface; the bot migrates both.
B16. src/components/ui/date-picker.tsx:42. — not-behavior-preserving
An exact <span className="text-muted-foreground"> → <Text tone="subdued"> mapping, deliberately
skipped: it would make one components/ui primitive depend on another, and the file is shadcn-CLI
regenerable. Yes ⇒ confirm cross-primitive imports are fine and the bot applies it.
Maintained by the gardening skill. Part A is rewritten each run (dedup by fingerprint, entries
that landed or were suppressed are removed). Part B is curated — close an entry when it is actioned or
moot, and it will not come back.
Single standing queue for the
gardeningskill. Two parts, two owners.Opened by run 2026-W33 (PRs #2620–#2625).
Updated 2026-08-18 after the run and its follow-ups merged. 8 of 20 Part B decisions are resolved
(struck through below), 3 are partly done or in flight, 9 are untouched. Part A is 12 entries (was 13):
one landed, and five had stale paths that are now corrected rather than dropped.
Numbering is unchanged — B-numbers are referenced from PR titles and descriptions.
Part A — Carry-over (bot-owned, machine-readable)
12 entries (was 13). Changes since the last revision:
src/routes/v2/shared/windows/types.ts, cleaned by chore: Enforce Minimal Code Comments #2630.firstDeferredWeekpreserved, sodedup and staleness tracking are unaffected):
src/routes/v2/shared/store/windowStore.ts→src/routes/v2/shared/windows/windowStore.tssrc/routes/ComponentDetail/ComponentDetail.tsx→src/components/shared/ComponentDetail/ComponentDetail.tsxsrc/compilers/vertexAiCompiler.ts→src/components/shared/Submitters/GoogleCloud/compiler/vertexAiCompiler.tssrc/utils/nodes/types.ts→src/routes/v2/shared/nodes/types.tssrc/utils/nodes/duplicateNodes.ts→src/components/shared/ReactFlow/FlowCanvas/utils/duplicateNodes.tsComponentDetail.tsxandnodes/types.tswere in its file list butstill carry 27 and 43 comment lines. Kept rather than closed: these are file-scoped pointers, so whether
the remainder is legitimate why commentary needs the re-analysis E7 does anyway. Deprioritize, don't skip.
#2630 also added the
local/no-type-member-commentsESLint rule, so the type-member slice of this pillar isnow enforced at lint time rather than swept weekly.
Human-readable index of Part A:
comments(11 files, first deferred 2026-W33) —project-conventions#comments--documentation:src/utils/validations.ts,src/routes/v2/shared/windows/windowStore.ts,src/components/shared/ComponentDetail/ComponentDetail.tsx,src/utils/annotations.ts,src/components/shared/Submitters/GoogleCloud/compiler/vertexAiCompiler.ts,src/routes/v2/shared/nodes/types.ts,src/utils/executionStatus.ts,src/utils/subgraphUtils.ts,src/services/pipelineService.ts,src/components/shared/ReactFlow/FlowCanvas/utils/duplicateNodes.ts,src/services/componentService.tsdry(1) —src/utils/componentStore.ts:285still holds the third copy ofmakeNameUniqueByAddingIndex. PR garden(dry): weekly groundskeeping — 2026-W33 #2621 de-duplicated the other two. Now unblocked — garden(comments): weekly groundskeeping — 2026-W33 #2620 hasmerged, so the file is no longer claimed.
Part B — Decisions (human-owned)
9 open, 3 partly done, 8 resolved.
✅ Resolved
B1. Fix— Done in fix: repairpnpm run test:coverage.pnpm run test:coverageby upgrading to vitest 4 #2632. Upgraded tovitest@4with a matching@vitest/coverage-v8, andtest:coverageis nowvitest run --coverage. Thetestspillar has itscoverage × churn signal back.
B2.— Done in fix: replace the deadtext-mdandfont-regularare dead classes.text-mdandfont-regulartypography classes #2629. The variants won:md: "text-base",regular: "font-normal", plus a newmediumweight. Downstream size-preservationfixes landed with it.
B3. Fix— Done in fix: correct generateDynamicNodeCallbacks return type #2633. It now returnsgenerateDynamicNodeCallbacks' return type.TaskNodeCallbacks, which is exported, so the unit test needs no double cast.B4. The— Done in fix(gardening): make the E8 self-review executable #2637, via the second option:reviewskill can't be invoked by the bot.E8 now reads
.claude/skills/review/SKILL.mdand follows its procedure instead of invoking it. Theskill stays
disable-model-invocationeverywhere else.B10. Type— Done in fix: type Icon's name at the source instead of casting to any #2636. Both casts and theIcon'snameinstead ofas any./** todo: fix this */markers are gone.B12. v1 ↔ v2 parallel implementations — leave them alone?— Done in chore(gardening): standing v1↔v2 KEEP for dry + lower comments threshold to 0.75 #2638. A standing KEEP inpillars/dry.mdexempts clusters spanning v1 and v2 as migration-in-progress. Duplication within v1 orwithin v2 is still in scope.
B17. Promote— Done in docs: make Icon the canonical icon entrypoint (actions B17) #2627. TheIconusage tocanon-registry.md.icon-usageentry is inthe registry, so the 39
lucide-reactimporters are migratable automatically next run.B20. Lower the— Done in chore(gardening): standing v1↔v2 KEEP for dry + lower comments threshold to 0.75 #2638.commentsconfidence threshold from 0.85 to 0.75.🔶 Partly done / in flight
B5.
readOnlyprecedence in the node factories. — fix written, awaiting merge in #2625Ruled a bug: the factories now resolve
readOnly ?? nodeData.readOnly ?? false. Verified a no-op on everycurrent path (the node-level gate reads the same field), and inheritance can only tighten. Closes when
#2625 merges.
B18. Design tokens for hardcoded text colours. — partly done
#2631 cleared the residual sites it covered. The originally-named ones are still open:
ContextPanelProvider.tsx:32(text-gray-500) andImportPipeline.tsx:229/:232/:240/:243.#2639 is open and adds a
successtone plus the colour migrations.B19.
flex flex-col→BlockStack, and heading primitives. — (a) mostly done, (b) open(a) Down from 27 sites to 5 (
ArtifactVisualizer.tsx:109,ComponentDetailsDialog.tsx:100,DockArea.tsx:121,DebugPanel.tsx:78,HistoryContent.tsx:52) — each combinesflex flex-colwithother classes, so they need the per-site
w-full/items-startcall.(b) Unchanged:
Headingstill takes onlychildrenandleveland accepts noclassName, so the16 heading sites remain blocked. #2639 is open and widens
Heading's props.Behavior questions the bot must not answer for you
B6. The two
it.todos inhydrateComponentReference.test.ts. —real-issue-bot-couldn't-safely-fix:892"should use text over spec when they differ" and:979"should return null when text is invalidYAML but valid spec" both carry their own "todo: decide" notes.
Yes ⇒ state the intended semantics for each; the bot then writes the two tests. Implementing them now
would mean inventing the behavior.
B7. Un-skip
tests/e2e/aggregator.spec.ts:49. —real-issue-bot-couldn't-safely-fixtest.skip("should add dynamic inputs when connection is made to add-input handle").Yes ⇒ someone runs Playwright locally and either un-skips it or deletes it. Left skipped because this
environment has no browser/dev server and shipping an unexecuted spec is worse than leaving it off.
B8. Widen
ArgumentTypeforDynamicDataArgument. —touchesProtectedarguments.actions.ts:57andBatchArgumentRow.tsx:138both useas unknown as ArgumentType.Yes ⇒ a human changes the
componentSpectype (aprotectedPatternsentry the bot may never touch),after which both casts delete cleanly.
B9. Adopt
useRequiredContextin the four hand-rolled contexts. —not-behavior-preservinguseDialog.ts:8,NodeRegistryContext.tsx:22,SpecContext.tsx:41,ContentWindowStateContext.tsx:31.The canonical hook throws a different message (
Required context ${displayName} was not found) andcreateRequiredContextchanges the context default tonull— both observable.Yes ⇒ accept the message/default change and the bot migrates all four.
Design / architecture calls
B11. Relocate the component-search logic. —
not-behavior-preservingcomponentSearchV2Logic.ts(a v2 Editor page internal) is re-implemented inroutes/Dashboard/DashboardComponentsV2View.tsx— 6 duplicated symbols. Adopting it directly would makeroutes/Dashboard/**import another page's internals.Yes ⇒ move it to
src/services/**, then the bot adopts it from both call sites.B13. Shared confirmation-dialog host. —
new-component proposaluseConfirmationDialog+<ConfirmationDialog {...props} />repeated verbatim in 6 files.Yes ⇒ a human writes the shared component; the bot then migrates the 6 call sites. (The bot may not
author new components.)
B14. Shared pagination control. —
new-component proposalDashboardFavoritesViewandDashboardRecentlyViewedViewshare 25 identical lines. Notesrc/components/shared/PaginationControls.tsxandsrc/hooks/usePagination.tsalready exist (from #2028)but neither view uses them — worth checking whether adopting those is enough.
Yes ⇒ a human decides adopt-or-extract; the bot migrates both.
B15.
RunActionsBarvsRunMenu. —new-component proposalRunActionsBar.tsxandRunViewMenuBar/components/RunMenu.tsxshare ~34 lines of menu items + dialogs,both v2, same feature.
Yes ⇒ a human extracts the shared surface; the bot migrates both.
B16.
src/components/ui/date-picker.tsx:42. —not-behavior-preservingAn exact
<span className="text-muted-foreground">→<Text tone="subdued">mapping, deliberatelyskipped: it would make one
components/uiprimitive depend on another, and the file is shadcn-CLIregenerable.
Yes ⇒ confirm cross-primitive imports are fine and the bot applies it.
Maintained by the
gardeningskill. Part A is rewritten each run (dedup by fingerprint, entriesthat landed or were suppressed are removed). Part B is curated — close an entry when it is actioned or
moot, and it will not come back.