feat: overhaul Claude Code automation — agents, skills, hooks, docs#1307
feat: overhaul Claude Code automation — agents, skills, hooks, docs#1307jeremyeder merged 1 commit intomainfrom
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds a review/automation layer: multiple new Changes
Sequence Diagram(s)sequenceDiagram
actor User
participant Editor
participant ClaudeSettings as "Claude Settings / Hooks"
participant AgentSkill as "Agent/Skill"
participant Repo as "Repository / Filesystem"
participant StopHook as "stop-review.sh"
User->>Editor: edit/write files
Editor->>ClaudeSettings: PreToolUse hook triggered (glob match)
ClaudeSettings->>AgentSkill: dispatch agent/skill (e.g., convention-eval, backend-review)
AgentSkill->>Repo: read/search files, run grep/glob/bash checks
Repo-->>AgentSkill: findings/report
AgentSkill-->>ClaudeSettings: formatted markdown output
ClaudeSettings->>User: present findings/prompts
Note over User,StopHook: On Stop phase
ClaudeSettings->>StopHook: invoke Stop hook
StopHook->>Repo: git status --porcelain
Repo-->>StopHook: clean/dirty
StopHook-->>User: message (ask to run /amber-review if dirty)
🚥 Pre-merge checks | ✅ 6✅ Passed checks (6 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
✨ Simplify code
Comment |
There was a problem hiding this comment.
Actionable comments posted: 9
🧹 Nitpick comments (1)
.claude/skills/pr-fixer/evals/evals.json (1)
3-19: Good core coverage; add one URL-form PR case to harden extraction.Current fixtures are solid for direct and natural-language forms. Consider adding a case like
fix https://github.com/org/repo/pull/1234(orPR 1234.with punctuation) to prevent regex regressions.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.claude/skills/pr-fixer/evals/evals.json around lines 3 - 19, Add an additional fixture to the evals cases that verifies URL-based and punctuation-trailing PR extraction so the pr-fixer skill handles inputs like "fix https://github.com/org/repo/pull/1234" and "PR 1234." Update the JSON array (near the existing entries with "input": "/pr-fixer 1234" and "input": "fix PR 1234") to include a new object whose "input" is the URL form and whose "expected_args" maps to "1234" and "expected_tool_call" is "Skill" with "skill": "pr-fixer"; ensure the description notes URL and punctuation variants so the regex extraction logic in the pr-fixer handler (the component that parses inputs into args) is exercised by this fixture.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.claude/agents/operator-review.md:
- Around line 36-41: The O2/O6 checks are not machine-enforceable because they
lack concrete detection patterns; add explicit grep/rg rules and/or a required
checklist field so automated agents can detect violations: define and document
exact regexes to search for in controller code (e.g., search for
"errors.IsNotFound" usages that do not return nil, patterns where transient
errors are not returned to trigger requeue, and places updating CR status to
"Failed" but still returning errors), add these patterns to the agent ruleset
and/or add mandatory manual-procedure metadata fields (e.g.,
"reconciliation_check_patterns" containing the regexes) so the agent can run rg
against functions like Reconcile, reconcile, and any usages of errors.IsNotFound
and status.Update to enforce O2/O6.
- Around line 31-35: The current grep pattern misses multi-line builder chains;
update the scan to detect creation calls irrespective of same-line resource type
by searching for client.Create(...) / .Create( across files (or use rg -U to
allow multiline) in components/operator and then cross-reference the enclosing
function for OwnerReferences usage; alternatively replace the fragile grep with
a small Go AST check that finds calls to client.Create (or ctrlClient.Create/
k8s client Create) and verifies the created object's metadata.OwnerReferences is
set per DEVELOPMENT.md, referencing OwnerReferences, Create and the functions
that call them.
In @.claude/agents/security-review.md:
- Around line 26-49: Add executable detection criteria for each security check
S1–S6 so they can be automated: for S1 ensure handlers call
GetK8sClientsForRequest(c) for user flows and flag usage of service account
clients without preceding RBAC validation; for S2 verify code paths perform a
SelfSubjectAccessReview (or equivalent function) before accessing user-scoped
resources; for S3 search for token exposure in logs/responses and enforce
redaction using len(token) logging pattern instead of full token strings; for S4
add concrete input validators (DNS label regex, url.Parse usage, strip/escape
newlines) and fail when missing; for S5 detect PodSpec settings and require
SecurityContext.AllowPrivilegeEscalation == false and
SecurityContext.Capabilities.Drop includes "ALL"; for S6 require Secret creation
sites to set OwnerReferences pointing to the creating resource (e.g. controller
UID) and flag creations lacking OwnerReferences so these checks produce
actionable pass/fail signals.
In @.claude/skills/cypress-demo/SKILL.md:
- Line 80: The README claim that `sessions.cy.ts` is a "complete working
example" is inaccurate because that test file lacks the synthetic cursor, click
effects, and caption bar behavior described; either update the text in SKILL.md
to remove or qualify the "complete working example" statement and point to the
actual demo implementation, or modify the `sessions.cy.ts` test to include the
missing demo features (add the synthetic cursor utility, click-effect code, and
caption bar rendering/mocks) so it truly demonstrates the pattern; reference
`sessions.cy.ts`, the synthetic cursor/click-effect utilities, and the caption
bar feature in your change to ensure the documentation and example match.
- Around line 58-59: The documentation refers to helper functions caption(),
clearCaption(), initCursor(), moveTo(), moveToText(), clickEffect(),
cursorClickText() and timing constants LONG, PAUSE, SHORT, TYPE_DELAY as if they
live in e2e/cypress/e2e/sessions.cy.ts, but those symbols aren't present; locate
the actual source file that defines these helpers (or the canonical reference
implementation) in the repo, then update SKILL.md to point to that correct file
path (or copy the helper implementations into the referenced sessions.cy.ts if
that was the intention), and ensure the doc lists the exact symbol names and
their new location so readers can find caption(), clearCaption(), initCursor(),
moveTo(), moveToText(), clickEffect(), cursorClickText(), LONG, PAUSE, SHORT,
and TYPE_DELAY.
- Line 50: The curl check in the SKILL.md uses an incomplete URL (`curl -s -o
/dev/null -w "%{http_code}" http://localhost`) that omits the frontend port;
update the example to include the correct dev port (e.g., :3000 or :8080) or
make the port configurable in the instructions so the `curl` command targets the
actual frontend host:port; edit the line containing the curl command in SKILL.md
to show a concrete working example (for example using :3000) or indicate how to
substitute the correct port.
In @.claude/skills/pr-fixer/SKILL.md:
- Around line 25-27: Clarify that the `gh pr view` state is case-sensitive and
returned in uppercase (OPEN, CLOSED, MERGED) and update the text around the `gh
pr view <N> --repo <owner/repo> --json state --jq .state` check to require
exact-uppercase matching; ensure the abort message uses the actual returned
state (e.g., "PR `#N` is already CLOSED") and note that non-existent PRs cause `gh
pr view` to exit with code 1 and write an error to stderr (so detect the
non-zero exit and stderr output rather than relying on JSON output) and abort
with "PR `#N` not found in <owner/repo>."
In @.claude/skills/scaffold/evals/evals.json:
- Around line 9-12: The eval currently uses "input": "add a new integration for
PagerDuty" but the expected_args only assert { "skill": "scaffold" }, which
allows routing/extraction failures to pass; update the test vector in
.claude/skills/scaffold/evals/evals.json so expected_args includes the
integration target/name (e.g., add a field like "integration": "PagerDuty" or
"target": "PagerDuty") and ensure expected_tool_call remains "Skill" and
expected_args still contains "skill": "scaffold" alongside the new integration
key so the evaluator verifies correct extraction/routing for the scaffold skill.
In @.claude/skills/unleash-flag/SKILL.md:
- Around line 172-175: Summary: The docs show an unsafe inline secret export for
CYPRESS_UNLEASH_ADMIN_TOKEN; update guidance to avoid pasting tokens in shells
and to use non-echoing prompts or secret managers and avoid logging full tokens.
Replace the inline example export with instructions to store the Unleash admin
token in a CI/secret manager or to set it via a non-echoing prompt (e.g., "read
-s" style) when running tests, and add a note for contributors to never print
the token (log only len(token) or a masked value) and not include it in error
messages, API responses, or commit history; reference the
CYPRESS_UNLEASH_ADMIN_TOKEN variable and the E2E test guidance in SKILL.md when
making this change.
---
Nitpick comments:
In @.claude/skills/pr-fixer/evals/evals.json:
- Around line 3-19: Add an additional fixture to the evals cases that verifies
URL-based and punctuation-trailing PR extraction so the pr-fixer skill handles
inputs like "fix https://github.com/org/repo/pull/1234" and "PR 1234." Update
the JSON array (near the existing entries with "input": "/pr-fixer 1234" and
"input": "fix PR 1234") to include a new object whose "input" is the URL form
and whose "expected_args" maps to "1234" and "expected_tool_call" is "Skill"
with "skill": "pr-fixer"; ensure the description notes URL and punctuation
variants so the regex extraction logic in the pr-fixer handler (the component
that parses inputs into args) is exercised by this fixture.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 225e5aa4-86b9-43dc-8bda-c13cd2b1ccc4
📒 Files selected for processing (44)
.claude/agents.claude/agents/backend-review.md.claude/agents/convention-eval.md.claude/agents/frontend-review.md.claude/agents/operator-review.md.claude/agents/runner-review.md.claude/agents/security-review.md.claude/commands/acp-compile.md.claude/commands/cypress-demo.md.claude/commands/speckit.analyze.md.claude/commands/speckit.checklist.md.claude/commands/speckit.clarify.md.claude/commands/speckit.constitution.md.claude/commands/speckit.implement.md.claude/commands/speckit.plan.md.claude/commands/speckit.specify.md.claude/commands/speckit.tasks.md.claude/settings.json.claude/skills/align/SKILL.md.claude/skills/align/evals/evals.json.claude/skills/amber-review/SKILL.md.claude/skills/amber-review/evals/evals.json.claude/skills/cypress-demo/SKILL.md.claude/skills/cypress-demo/evals/evals.json.claude/skills/dev-cluster/SKILL.md.claude/skills/dev-cluster/evals/evals.json.claude/skills/memory/SKILL.md.claude/skills/memory/evals/evals.json.claude/skills/pr-fixer/SKILL.md.claude/skills/pr-fixer/evals/evals.json.claude/skills/scaffold/SKILL.md.claude/skills/scaffold/evals/evals.json.claude/skills/unleash-flag/SKILL.md.claude/skills/unleash-flag/evals/evals.jsonBOOKMARKS.mdCLAUDE.mdcomponents/backend/DEVELOPMENT.mdcomponents/backend/ERROR_PATTERNS.mdcomponents/backend/K8S_CLIENT_PATTERNS.mdcomponents/frontend/DEVELOPMENT.mdcomponents/frontend/REACT_QUERY_PATTERNS.mdcomponents/operator/DEVELOPMENT.mddocs/security-standards.mdscripts/claude-hooks/stop-review.sh
💤 Files with no reviewable changes (11)
- .claude/agents
- .claude/commands/speckit.checklist.md
- .claude/commands/acp-compile.md
- .claude/commands/speckit.tasks.md
- .claude/commands/speckit.analyze.md
- .claude/commands/speckit.implement.md
- .claude/commands/speckit.plan.md
- .claude/commands/cypress-demo.md
- .claude/commands/speckit.specify.md
- .claude/commands/speckit.constitution.md
- .claude/commands/speckit.clarify.md
There was a problem hiding this comment.
🧹 Nitpick comments (1)
.claude/commands/jira.log.md (1)
122-122: Add explicit issue-type normalization before API payload.Line 122 uses parsed input directly; document a strict allowlist/normalization (
Story|Bug|Task) before create to avoid Jira API rejects on variants likebug,BUG, or unexpected labels.Proposed doc tweak
- "issue_type": "[parsed issue type from step 1]", + "issue_type": "[validated issue type: Story|Bug|Task]",- **Issue Type** (optional): Defaults to `Story`, but can be `Bug` or `Task`. Tasks are tech debt related and not user facing + - **Issue Type** (optional): Defaults to `Story`, but can be `Bug` or `Task`. Normalize case and validate against this allowlist before confirmation/create.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.claude/commands/jira.log.md at line 122, The payload currently inserts the parsed value directly into the "issue_type" field; add explicit normalization and allowlisting before constructing/sending the Jira payload by implementing a normalizeIssueType function (or similar) that maps common variants (e.g., "bug", "BUG", "Bug") to allowed values "Bug", "Story", "Task", validates against that allowlist, and uses a sensible default or returns an error for unknown labels; update the code path that sets "issue_type" to call this normalization and ensure the final payload only contains the canonical values.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In @.claude/commands/jira.log.md:
- Line 122: The payload currently inserts the parsed value directly into the
"issue_type" field; add explicit normalization and allowlisting before
constructing/sending the Jira payload by implementing a normalizeIssueType
function (or similar) that maps common variants (e.g., "bug", "BUG", "Bug") to
allowed values "Bug", "Story", "Task", validates against that allowlist, and
uses a sensible default or returns an error for unknown labels; update the code
path that sets "issue_type" to call this normalization and ensure the final
payload only contains the canonical values.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 5cfe546c-e31b-40ae-ac88-a3085c950781
📒 Files selected for processing (4)
.claude/agents/frontend-review.md.claude/agents/operator-review.md.claude/commands/jira.log.md.claude/skills/pr-fixer/SKILL.md
✅ Files skipped from review due to trivial changes (3)
- .claude/agents/frontend-review.md
- .claude/agents/operator-review.md
- .claude/skills/pr-fixer/SKILL.md
|
Addressed all 9 actionable CodeRabbit comments + 2 nitpicks in commit 03a00acd: operator-review.md
security-review.md
cypress-demo/SKILL.md
pr-fixer/SKILL.md
pr-fixer/evals/evals.json
scaffold/evals/evals.json
unleash-flag/SKILL.md
jira.log.md
🤖 Session |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
.claude/skills/pr-fixer/evals/evals.json (1)
32-37: Add one malformed-input negative fixture to prevent false positives.Consider adding a case like
/pr-fixer abc(orfix PR twelve) withexpected_tool_call: "None"to lock down numeric-only extraction behavior.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.claude/skills/pr-fixer/evals/evals.json around lines 32 - 37, Add a negative test fixture to the evals JSON to ensure non-numeric PR identifiers don't trigger the skill: insert an entry similar to the existing `/pr-fixer` case but with "input": "/pr-fixer abc" (or "fix PR twelve") and "expected_tool_call": "None" and "expected_args": {} so the numeric-only extraction is validated; update the array in .claude/skills/pr-fixer/evals/evals.json alongside the other fixtures to cover this malformed-input scenario.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.claude/commands/jira.log.md:
- Line 25: Update the prose for clarity by changing the phrase "Tasks are tech
debt related and not user facing." to use hyphenated compound adjectives: "Tasks
are tech debt-related and not user-facing." Locate the sentence that begins with
"**Issue Type** (optional):" (the descriptive line containing "Tasks are ...")
and replace the two compound terms accordingly while leaving the rest of the
normalization/allowlist guidance unchanged.
- Line 122: The issue_type handling is contradictory: one place silently
defaults unrecognized values to "Story" while another re-prompts; standardize on
rejecting and re-prompting. Update the issue_type validation/normalization flow
(the "issue_type" field and its validator/normalizer) to remove the silent
"default Story if unrecognized" behavior, ensure the validator returns an
explicit error for unrecognized types, and trigger the re-prompt logic instead
of falling back; also update any inline comment or schema string that currently
reads "[validated issue type: normalize to Story|Bug|Task — default Story if
unrecognized]" to reflect "reject and re-prompt on unrecognized types" so
behavior and docs match.
---
Nitpick comments:
In @.claude/skills/pr-fixer/evals/evals.json:
- Around line 32-37: Add a negative test fixture to the evals JSON to ensure
non-numeric PR identifiers don't trigger the skill: insert an entry similar to
the existing `/pr-fixer` case but with "input": "/pr-fixer abc" (or "fix PR
twelve") and "expected_tool_call": "None" and "expected_args": {} so the
numeric-only extraction is validated; update the array in
.claude/skills/pr-fixer/evals/evals.json alongside the other fixtures to cover
this malformed-input scenario.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 11149c1c-ce1d-4ba6-84be-587cf316acb5
📒 Files selected for processing (8)
.claude/agents/operator-review.md.claude/agents/security-review.md.claude/commands/jira.log.md.claude/skills/cypress-demo/SKILL.md.claude/skills/pr-fixer/SKILL.md.claude/skills/pr-fixer/evals/evals.json.claude/skills/scaffold/evals/evals.json.claude/skills/unleash-flag/SKILL.md
✅ Files skipped from review due to trivial changes (5)
- .claude/skills/scaffold/evals/evals.json
- .claude/agents/security-review.md
- .claude/agents/operator-review.md
- .claude/skills/unleash-flag/SKILL.md
- .claude/skills/cypress-demo/SKILL.md
| - **Summary** (required): The title/summary of the issue | ||
| - **Description** (optional): Detailed description of the work | ||
| - **Issue Type** (optional): Defaults to `Story`, but can be `Bug` or `Task`. Tasks are tech debt related and not user facing | ||
| - **Issue Type** (optional): Defaults to `Story`, but can be `Bug` or `Task`. Tasks are tech debt related and not user facing. Normalize case before use (e.g. "bug" → "Bug", "TASK" → "Task") and validate against this allowlist; reject unrecognized values with a prompt to the user. |
There was a problem hiding this comment.
Tighten compound-adjective hyphenation for clarity
Use “tech debt-related” and “user-facing” on Line 25 for cleaner wording.
Suggested wording tweak
-- **Issue Type** (optional): Defaults to `Story`, but can be `Bug` or `Task`. Tasks are tech debt related and not user facing. Normalize case before use (e.g. "bug" → "Bug", "TASK" → "Task") and validate against this allowlist; reject unrecognized values with a prompt to the user.
+- **Issue Type** (optional): Defaults to `Story`, but can be `Bug` or `Task`. Tasks are tech debt-related and not user-facing. Normalize case before use (e.g. "bug" → "Bug", "TASK" → "Task") and validate against this allowlist; reject unrecognized values with a prompt to the user.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - **Issue Type** (optional): Defaults to `Story`, but can be `Bug` or `Task`. Tasks are tech debt related and not user facing. Normalize case before use (e.g. "bug" → "Bug", "TASK" → "Task") and validate against this allowlist; reject unrecognized values with a prompt to the user. | |
| - **Issue Type** (optional): Defaults to `Story`, but can be `Bug` or `Task`. Tasks are tech debt-related and not user-facing. Normalize case before use (e.g. "bug" → "Bug", "TASK" → "Task") and validate against this allowlist; reject unrecognized values with a prompt to the user. |
🧰 Tools
🪛 LanguageTool
[grammar] ~25-~25: Use a hyphen to join words.
Context: ...Tasks are tech debt related and not user facing. Normalize case before use (e.g. ...
(QB_NEW_EN_HYPHEN)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.claude/commands/jira.log.md at line 25, Update the prose for clarity by
changing the phrase "Tasks are tech debt related and not user facing." to use
hyphenated compound adjectives: "Tasks are tech debt-related and not
user-facing." Locate the sentence that begins with "**Issue Type** (optional):"
(the descriptive line containing "Tasks are ...") and replace the two compound
terms accordingly while leaving the rest of the normalization/allowlist guidance
unchanged.
There was a problem hiding this comment.
♻️ Duplicate comments (1)
.claude/commands/jira.log.md (1)
25-25:⚠️ Potential issue | 🟡 MinorHyphenate compound adjectives in Issue Type guidance
Line 25 still uses “tech debt related” and “user facing”; use “tech debt-related” and “user-facing” for clarity.
Suggested doc tweak
-- **Issue Type** (optional): Defaults to `Story`, but can be `Bug` or `Task`. Tasks are tech debt related and not user facing. Normalize case before use (e.g. "bug" → "Bug", "TASK" → "Task") and validate against this allowlist; reject unrecognized values with a prompt to the user. +- **Issue Type** (optional): Defaults to `Story`, but can be `Bug` or `Task`. Tasks are tech debt-related and not user-facing. Normalize case before use (e.g. "bug" → "Bug", "TASK" → "Task") and validate against this allowlist; reject unrecognized values with a prompt to the user.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.claude/commands/jira.log.md at line 25, Update the wording in the Issue Type guidance to hyphenate compound adjectives: change "tech debt related" to "tech debt-related" and "user facing" to "user-facing" in the sentence that describes Task vs user-facing issues (the text under "**Issue Type** (optional)"). Ensure both occurrences are updated exactly where those phrases appear.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Duplicate comments:
In @.claude/commands/jira.log.md:
- Line 25: Update the wording in the Issue Type guidance to hyphenate compound
adjectives: change "tech debt related" to "tech debt-related" and "user facing"
to "user-facing" in the sentence that describes Task vs user-facing issues (the
text under "**Issue Type** (optional)"). Ensure both occurrences are updated
exactly where those phrases appear.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: dd83f8e8-e1e7-49ac-ada6-b5bc23327a06
📒 Files selected for processing (1)
.claude/commands/jira.log.md
- Consolidate convention docs into component-level DEVELOPMENT.md files - Create 6 per-component review agents (backend, frontend, operator, runner, security, convention-eval) with grep-based checks - Overhaul 3 existing skills (dev-cluster, pr-fixer, unleash-flag) - Add 3 new skills (/align, /scaffold, /memory) - Promote amber-review and cypress-demo from commands to skills - Add enforcement hooks in .claude/settings.json - Update pr-fixer to use Amber Handler (replaces deleted pr-fixer.yml) - Delete 11 obsolete commands Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
90bcefa to
e17507e
Compare
|
I had ACP implement pr1145 using the existing setup and then again using pr1307 content. here is an impact report on what pr1307 added to the output. |
Summary
.claude/context/and.claude/patterns/into component-level files (components/*/DEVELOPMENT.md,*_PATTERNS.md), eliminating stale paths/alignfor convention scoring,/scaffoldfor integration/endpoint templates,/memoryfor auto-memory management).claude/settings.json(Shadcn UI, no manual fetch, service account misuse, no panic, skill-creator standard, feature flag nudge, stop review nudge)jira.log.mdas-isSupersedes #1293 (moved from fork to org branch for Amber compatibility).
Test plan
.tsxfile with<button→ verify Shadcn reminder firespanic(→ verify panic reminder fires/align→ verify convention-eval agent dispatches and produces scored report/amber-review→ verify it loads component-level docs (not old.claude/context/paths)/scaffold integration test-provider→ verify checklist output/memory audit→ verify it scans memory directory🤖 Generated with Claude Code
Summary by CodeRabbit