Release v1.9.0#22
Conversation
…conservative assistant handling - check-update.md: CLI-outdated always runs upgrade+update as a pair - bin: findAllInstalls() diagnoses shadowing npm/volta/yarn/bun binaries on both logUpgradeResult branches - bin: ASSISTANTS registry gates init/update/add-assistant — update refreshes only present folders, init multi-selects which to install, new add-assistant subcommand adopts one later - start.md: show AIContext version from .aicontext/.version Co-Authored-By: Claude Opus 4.6 (1M context) via AIContext
Centralizes filename composition in `resolve-task-naming.md` so per-prompt substitution narratives stop diverging. `pattern: ask` default surfaces the menu on first task creation; legacy `{task-name}` token normalized to `{task_name}` with silent config migration.
Co-Authored-By: Claude via AIContext
Replace the opaque partial/full test scale with type-aware grammar driven by structure.md's type table. Centralize config validation, migration, and interactive resolution in ensure-config.md with caller-guarded lazy loading. Add prompt architecture diagrams to structure.md for context-cost awareness. Co-Authored-By: Claude via AIContext
Rename remaining "brief" references to "task-context" in README.md, require concrete file:line anchors in start-feature.md task-context creation instruction, and clarify ensure-config.md validation prose. Co-Authored-By: Claude via AIContext
…x finish-task ordering Reorder finish-task so worklog updates before git commit, delegate spec sync to align-context, rename and broaden review-task to validate whole task (plan + spec + context), not just the plan. Co-Authored-By: Claude via AIContext
Same-version `update` now detects and restores missing framework files (prompts, agents, skills, scripts) instead of silently returning. `--force` resets all framework files to defaults in one flag. Co-Authored-By: Claude via AIContext
VSCode extension bug makes flagged skills invisible even on explicit invocation. Safety against auto-invocation is covered by standards.md. Co-Authored-By: Claude via AIContext
New skill generates project documentation from code and existing artifacts. Supports two types (reference for internal, guide for user-facing) with parallel agent execution in Claude Code. Discovery-first approach works on any project regardless of AIContext instrumentation. Co-Authored-By: Claude via AIContext
The Quick Start wording read as a one-time setup instruction. Reworded to make clear that /start must begin every session and that other commands won't work without it. Co-Authored-By: Claude via AIContext
New logo4.svg with "Power AI to build features, not just write code" tagline at font size 18. README now references logo4. Co-Authored-By: Claude via AIContext
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (3)
✅ Files skipped from review due to trivial changes (2)
📝 WalkthroughWalkthroughThis PR renames and restructures task resume/review workflows (check-task→resume-task, review-task-plan→review-task), adds docs-generation agents/skills, centralizes config validation/migration/interactive ask resolution, replaces upfront ask-batching with per-step resolution, expands CLI assistant management (addAssistant, self-heal), and updates templates, tests, and docs to match new flows. Changes
Sequence Diagram(s)sequenceDiagram
actor User
participant CLI as bin/aicontext.js
participant Ensure as ensure-config.md
participant Migrator as migrate-config.md
participant Asks as resolve-asks.md
participant Config as config.yml
User->>CLI: /run-task or /start
CLI->>Ensure: Load ensure-config.md
Ensure->>Config: Read config.yml
alt config missing/invalid
Ensure->>Config: Create from template
end
Ensure->>Ensure: Validate sections & patterns
alt deprecated keys found
Ensure->>Migrator: Migrate legacy keys
Migrator->>Config: Transform/write config.yml
end
Ensure->>Ensure: Collect ask-valued after_* fields
alt asks present
Ensure->>Asks: Call resolve-asks.md with list
Asks->>User: Batch prompt
User->>Asks: Provide answers
Asks->>Config: Persist defaults (optional)
Asks->>Ensure: Return resolved map
end
Ensure->>CLI: Return resolved config
CLI->>User: Proceed with task execution
sequenceDiagram
actor User
participant CLI as /generate-docs
participant Main as generate-docs.md
participant Ensure as ensure-config.md
participant Agent as docs-generator
participant Repo as Repository
participant Output as output file
User->>CLI: /generate-docs
CLI->>Main: Load generate-docs.md
Main->>Ensure: Follow ensure-config.md
Ensure->>Main: Return resolved config
Main->>User: Prompt: select type (reference/guide/both)
alt docs.output_path not set
Main->>User: Prompt: output path
User->>Main: Provide path
Main->>Ensure: Update config.yml
end
Main->>Agent: Spawn docs-generator (type=reference/guide)
Agent->>Repo: Scan docs & code (grep-first)
Agent->>Repo: Read targeted code artifacts
Agent->>Output: Write reference.md / guide.md
Agent->>Main: Return path + sections + TODO count
Main->>User: Summarize generated files & paths
sequenceDiagram
participant Caller as create-task.md
participant Resolver as resolve-task-naming.md
participant Config as config.yml
participant User as User
participant Task as .aicontext/tasks/{filename}.md
Caller->>Resolver: Call with {task_name} slug + pattern
alt pattern = ask
Resolver->>User: Show template menu
User->>Resolver: Select template (optional save)
alt save
Resolver->>Config: Write chosen pattern
end
else pattern literal
Resolver->>Resolver: Use template verbatim
end
alt {issue_id} required and missing
Resolver->>Resolver: Try reuse from prior /draft-issue
alt still missing
Resolver->>User: Prompt for issue ID or skip/create
User->>Resolver: Provide or skip
end
end
Resolver->>Resolver: Substitute tokens ({version},{issue_id},{date},{task_name})
Resolver->>Caller: Return filename stem
Caller->>Task: Create .aicontext/tasks/{filename}.md
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 8
🧹 Nitpick comments (4)
.aicontext/prompts/check-update.md (1)
56-56: Optionally clarify the description placeholder.The
{description of what's outdated}placeholder could be more specific to guide the AI on what to display for each case:
- CLI outdated (line 52): e.g., "CLI update available (v{cliVersion} → v{latestVersion})"
- Project outdated (line 53): e.g., "Project framework update available (v{currentVersion} → v{cliVersion})"
The AI can likely infer the appropriate message from context, but explicit guidance would improve consistency.
📝 Example clarification
Add a note after line 54 or before line 56:
- **Neither outdated** or versions missing: stop silently. + +For the notification message, describe what's outdated: +- If CLI outdated: "CLI update available (v{cliVersion} → v{latestVersion})" +- If project outdated: "Project framework update available (v{currentVersion} → v{cliVersion})" > "AIContext update available: {description of what's outdated}. Would you like me to run the upgrade?"🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.aicontext/prompts/check-update.md at line 56, Update the placeholder "AIContext update available: {description of what's outdated}" to explicitly document the two expected message formats: for CLI updates use "CLI update available (v{cliVersion} → v{latestVersion})" and for project/framework updates use "Project framework update available (v{currentVersion} → v{cliVersion})"; add this clarification immediately adjacent to the placeholder and reference the exact placeholder "{description of what's outdated}" plus the variable names "{cliVersion}", "{latestVersion}", and "{currentVersion}" so the AI produces consistent, concrete messages..aicontext/prompts/start-feature.md (1)
59-59: Consider clarifying the file:line requirement.The new requirement for concrete
file:lineanchors in[Step 0]entries improves actionability, but might be overly restrictive if exploration surfaces broader architectural patterns without specific line references (e.g., "follows repository pattern across service layer").Consider adding a clarification:
📝 Suggested clarification
-**Task-context(s)** — `.aicontext/data/task-context/context-{task-filename}.md` from `task-context.template.md`. If Step 1 exploration surfaced non-obvious codebase patterns, add them to `## Codebase Patterns` prefixed `[Step 0]` with concrete `file:line` anchors (e.g. `[Step 0] config.yml:12 — task_naming validated by ensure-config before use`). +**Task-context(s)** — `.aicontext/data/task-context/context-{task-filename}.md` from `task-context.template.md`. If Step 1 exploration surfaced non-obvious codebase patterns, add them to `## Codebase Patterns` prefixed `[Step 0]` with concrete `file:line` anchors when applicable (e.g. `[Step 0] config.yml:12 — task_naming validated by ensure-config before use`). For cross-cutting patterns without a single anchor point, describe the pattern location generally.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.aicontext/prompts/start-feature.md at line 59, Update the Task-context(s) guidance in .aicontext/prompts/start-feature.md to clarify the "file:line" anchor requirement: state that concrete file:line anchors are preferred for actionable findings in the `## Codebase Patterns` `[Step 0]` entries but are optional when the investigation surfaces broader architectural patterns (e.g., "repository pattern across service layer"); when anchors are not available instruct authors to use a short rationale plus an example file or directory (e.g., "see service/* for examples") and include an explicit template sentence showing both forms (anchored: `[Step 0] config.yml:12 — ...` and broader: `[Step 0] service layer — pattern observed across multiple files, examples: service/foo.ts, service/bar.ts`) so reviewers know acceptable formats..aicontext/prompts/generate-docs.md (1)
9-18: Add a repo-boundary guard for customdocs.output_path.Allowing unrestricted custom paths can lead to accidental writes outside the project. Add a constraint that custom paths must be repo-relative and must not contain traversal segments.
Suggested prompt hardening
If `docs.output_path` is not set or missing, ask: ... > 3. Custom path +For custom path: +- Must be relative to project root +- Must not be absolute +- Must not contain `..` traversal segments + Write the chosen value to `docs.output_path` in `config.yml`.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.aicontext/prompts/generate-docs.md around lines 9 - 18, Add a repo-boundary guard when accepting a custom docs.output_path: validate the input is repo-relative (no absolute paths, no leading "/" ) and reject or sanitize any path containing traversal segments like "../"; normalize the candidate path and ensure its resolved path is within the repository root before writing it into config.yml and before creating the directory. Specifically, when prompting for a custom path for docs.output_path, enforce these checks (reject and re-prompt on failure) and only write the validated, normalized path into config.yml and then create the output directory..aicontext/prompts/ensure-config.md (1)
19-19: Match test-value validation order toresolve-tests.mdto reduce false invalids.Line 19 should explicitly detect literal shell commands before type-splitting, consistent with
resolve-tests.mdtrivial-case handling.Suggested wording refinement
-3. **Tests type names** — for each `after_*.tests` value, split on `|`, strip `-full`/`-affected` — verify each remaining name is a row in `structure.md`'s `## Testing` table. Skip `all`, `false`, `ask`, and literal shell commands. +3. **Tests type names** — for each `after_*.tests` value, first treat it as a literal shell command if it contains whitespace, quotes, `/`, or shell metacharacters. Otherwise split on `|`, strip `-full`/`-affected`, and verify each remaining name is a row in `structure.md`'s `## Testing` table. Skip `all`, `false`, and `ask`.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.aicontext/prompts/ensure-config.md at line 19, Update the "Tests type names" validation in ensure-config.md so it checks for literal shell commands before performing the type-splitting and suffix stripping steps (i.e., detect command-like values such as those containing spaces, pipes, semicolons, or starting with `./`/`/`/`bash`/`sh` first), matching the trivial-case handling in resolve-tests.md; keep skipping `all`, `false`, and `ask`, then only if not a detected shell command split on `|`, strip `-full`/`-affected`, and validate each remaining name against the `## Testing` table in structure.md.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.aicontext/prompts/generate-guide.md:
- Around line 9-20: The precedence wording is ambiguous: the "Then read in this
order" rule combined with "Code (primary source of truth)" could be read as
later docs overriding code; update the text under the "Then read in this order"
block to state explicitly that "Code (primary source of truth) always wins on
conflicts; later sources only override when code is silent" and clarify the role
of "Existing documentation (context for intent)" as context-only guidance, so
replace or append the phrasing around "Code (primary source of truth)" and
"Existing documentation (context for intent)" to make conflict resolution
deterministic and unambiguous.
In @.aicontext/prompts/resolve-test-types.md:
- Line 37: Add a pre-write hard validation that rejects any test-type row whose
"Full" command is empty: before saving in the write step, iterate the proposed
rows (including the fallback proposal that may produce `| unit | <blank — ask
user> | |`) and ensure the "Full" field contains a non-empty command string; if
any row fails, surface an explicit user-fix prompt (do not auto-save) and
prevent persistence. Apply this check to the code paths that prepare and commit
type rows (the fallback proposal generation and the write/save routine) so no
empty "Full" values can be saved.
In @.aicontext/prompts/run-task.md:
- Line 21: Update the run-task flow to explicitly handle a SKIP result from
resolve-tests.md: when after_task.tests is resolved, call resolve-tests.md and
check its return value; if it is SKIP, do not invoke the test-runner subagent or
run tests inline and treat the step as intentionally skipped (return/record a
skipped status), if it is ERROR surface the error to the user as before,
otherwise pass the returned command(s) to test-runner; reference
after_task.tests, resolve-tests.md, and test-runner when implementing this
branching.
In @.aicontext/rules/process.md:
- Line 167: Update the documentation sentence that currently reads "Lifecycle
actions (review, tests, commit, push) are configured in `config.yml` under
`after_step` and `after_task`" to explicitly reference the correct config file
by replacing `config.yml` with `.aicontext/config.yml` so it reads that
lifecycle actions are configured in `.aicontext/config.yml` under `after_step`
and `after_task`.
In @.aicontext/templates/structure.template.md:
- Around line 69-71: The table separator row is malformed — replace the current
separator line between the header and the {{TEST_STRUCTURE}} block so it has
leading and trailing pipes to match the header; i.e., change the separator to
include pipes for all three columns (use a row like |------|------|----------|)
so the markdown linter recognizes three columns and the table renders correctly.
In @.claude/agents/docs-generator.md:
- Around line 34-38: The agent output contract in the "Return ONLY:" block
currently requires four fields (file path, sections included, sections skipped,
TODO count) which conflicts with the caller that only expects "file path and
section list"; update the contract so both agree: either reduce the "Return
ONLY:" block to exactly "file path" and "sections included" or expand the caller
to accept the additional fields. Locate and edit the "Return ONLY:" block (the
literal lines starting with "Return ONLY:" and its four bullets) and make the
fields match the caller's expectation; also update any related
validation/serialization code that consumes this contract (the code that parses
the agent response) to accept the revised set of fields so downstream
parsing/validation will succeed.
In @.claude/skills/generate-docs/SKILL.md:
- Line 14: The agent prompt in .claude/skills/generate-docs/SKILL.md is
inconsistent with the output contract expected by
.claude/agents/docs-generator.md; update the Agent prompt string ("Generate
{type} documentation. Write to: {output_path}/{filename}. Project root:
{project_root}. Return only the file path and section list when done.") to
require the four return items that docs-generator expects (file path, section
list, skipped sections, and TODO count), or alternatively change
docs-generator.md to accept only the two items—make the two files' contracts
match by adding the missing "skipped sections" and "TODO count" return
requirements to the prompt in SKILL.md and ensure the wording/variable names
match the keys used in docs-generator.md.
In `@docs/skills.md`:
- Around line 155-168: The docs add a `/generate-docs` skill but it isn’t
registered so it won’t be installed or its prompt copied; update
bin/aicontext.js by adding 'generate-docs' to the FRAMEWORK_SKILLS array and
'generate-docs.md' to the FRAMEWORK_PROMPTS list (ensure the names match the
docs and prompt filename), or if the feature isn't ready remove the section from
docs/skills.md; locate the symbols FRAMEWORK_SKILLS and FRAMEWORK_PROMPTS in
bin/aicontext.js and make the corresponding change.
---
Nitpick comments:
In @.aicontext/prompts/check-update.md:
- Line 56: Update the placeholder "AIContext update available: {description of
what's outdated}" to explicitly document the two expected message formats: for
CLI updates use "CLI update available (v{cliVersion} → v{latestVersion})" and
for project/framework updates use "Project framework update available
(v{currentVersion} → v{cliVersion})"; add this clarification immediately
adjacent to the placeholder and reference the exact placeholder "{description of
what's outdated}" plus the variable names "{cliVersion}", "{latestVersion}", and
"{currentVersion}" so the AI produces consistent, concrete messages.
In @.aicontext/prompts/ensure-config.md:
- Line 19: Update the "Tests type names" validation in ensure-config.md so it
checks for literal shell commands before performing the type-splitting and
suffix stripping steps (i.e., detect command-like values such as those
containing spaces, pipes, semicolons, or starting with `./`/`/`/`bash`/`sh`
first), matching the trivial-case handling in resolve-tests.md; keep skipping
`all`, `false`, and `ask`, then only if not a detected shell command split on
`|`, strip `-full`/`-affected`, and validate each remaining name against the `##
Testing` table in structure.md.
In @.aicontext/prompts/generate-docs.md:
- Around line 9-18: Add a repo-boundary guard when accepting a custom
docs.output_path: validate the input is repo-relative (no absolute paths, no
leading "/" ) and reject or sanitize any path containing traversal segments like
"../"; normalize the candidate path and ensure its resolved path is within the
repository root before writing it into config.yml and before creating the
directory. Specifically, when prompting for a custom path for docs.output_path,
enforce these checks (reject and re-prompt on failure) and only write the
validated, normalized path into config.yml and then create the output directory.
In @.aicontext/prompts/start-feature.md:
- Line 59: Update the Task-context(s) guidance in
.aicontext/prompts/start-feature.md to clarify the "file:line" anchor
requirement: state that concrete file:line anchors are preferred for actionable
findings in the `## Codebase Patterns` `[Step 0]` entries but are optional when
the investigation surfaces broader architectural patterns (e.g., "repository
pattern across service layer"); when anchors are not available instruct authors
to use a short rationale plus an example file or directory (e.g., "see service/*
for examples") and include an explicit template sentence showing both forms
(anchored: `[Step 0] config.yml:12 — ...` and broader: `[Step 0] service layer —
pattern observed across multiple files, examples: service/foo.ts,
service/bar.ts`) so reviewers know acceptable formats.
🪄 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
Run ID: 0eb4e0a9-f16c-4d0a-a312-79a7dcf2dabf
⛔ Files ignored due to path filters (1)
assets/logo4.svgis excluded by!**/*.svg
📒 Files selected for processing (57)
.aicontext/prompts/add-idea.md.aicontext/prompts/aic-help.md.aicontext/prompts/check-update.md.aicontext/prompts/create-task.md.aicontext/prompts/do-it.md.aicontext/prompts/draft-issue.md.aicontext/prompts/ensure-config.md.aicontext/prompts/finish-task.md.aicontext/prompts/generate-docs.md.aicontext/prompts/generate-guide.md.aicontext/prompts/generate-reference.md.aicontext/prompts/gh-review-fix-loop.md.aicontext/prompts/migrate-config.md.aicontext/prompts/plan-tasks.md.aicontext/prompts/resolve-asks.md.aicontext/prompts/resolve-task-naming.md.aicontext/prompts/resolve-test-types.md.aicontext/prompts/resolve-tests.md.aicontext/prompts/resume-task.md.aicontext/prompts/review-task-plan.md.aicontext/prompts/review-task.md.aicontext/prompts/run-step.md.aicontext/prompts/run-task.md.aicontext/prompts/start-feature.md.aicontext/prompts/start.md.aicontext/prompts/step-loop.md.aicontext/readme.md.aicontext/rules/process.md.aicontext/rules/standards.md.aicontext/templates/config.template.yml.aicontext/templates/spec.template.md.aicontext/templates/structure.template.md.claude/agents/docs-generator.md.claude/agents/test-runner.md.claude/skills/check-task/SKILL.md.claude/skills/draft-issue/SKILL.md.claude/skills/draft-pr/SKILL.md.claude/skills/generate-docs/SKILL.md.claude/skills/gh-fix-tests/SKILL.md.claude/skills/gh-review-check/SKILL.md.claude/skills/gh-review-fix-loop/SKILL.md.claude/skills/resume-task/SKILL.md.claude/skills/review-task-plan/SKILL.md.claude/skills/review-task/SKILL.md.codex/skills/check-task/SKILL.md.codex/skills/generate-docs/SKILL.md.codex/skills/resume-task/SKILL.md.codex/skills/review-task-plan/SKILL.md.codex/skills/review-task/SKILL.md.cursor/rules/aicontext.mdc.github/copilot-instructions.mdREADME.mdbin/aicontext.jsdocs/development-model.mddocs/skills.mddocs/workflow.mdtest/cli.test.js
💤 Files with no reviewable changes (10)
- .claude/skills/draft-issue/SKILL.md
- .codex/skills/check-task/SKILL.md
- .claude/skills/check-task/SKILL.md
- .codex/skills/review-task-plan/SKILL.md
- .aicontext/prompts/review-task-plan.md
- .claude/skills/draft-pr/SKILL.md
- .claude/skills/gh-review-fix-loop/SKILL.md
- .claude/skills/review-task-plan/SKILL.md
- .claude/skills/gh-review-check/SKILL.md
- .claude/skills/gh-fix-tests/SKILL.md
…ration Clarify source-precedence in generate-guide.md (code wins on conflicts). Handle SKIP return from resolve-tests.md in run-task and step-loop. Remove output format override from generate-docs SKILL.md caller prompt. Register generate-docs in FRAMEWORK_PROMPTS, FRAMEWORK_AGENTS, and FRAMEWORK_SKILLS so it installs via aicontext init/update. Co-Authored-By: Claude via AIContext
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (2)
.aicontext/prompts/step-loop.md (1)
23-23: Optional: Vary sentence structure for readability.The parallel "If
ERROR... IfSKIP... IfCOMMANDS..." structure aids clarity but triggers a style hint. Consider introducing slight variation if desired, though the current form is clear and consistent with prompt template conventions.♻️ Optional rewording
-5. **Test** — if `after_step.tests` resolved to anything other than `false`: compute the changed-files corpus per the Review corpus table above (same rules), call `resolve-tests.md` with the resolved value, `step` context, and the corpus. If `ERROR`: surface to the user and skip tests. If `SKIP`: report skip and continue. If `COMMANDS`: pass them to `test-runner` subagent (Claude Code) or run inline (Cursor/Copilot/Codex). +5. **Test** — if `after_step.tests` resolved to anything other than `false`: compute the changed-files corpus per the Review corpus table above (same rules), call `resolve-tests.md` with the resolved value, `step` context, and the corpus. Handle the result: `ERROR` surfaces to the user and skips tests; `SKIP` reports skip and continues; `COMMANDS` passes to `test-runner` subagent (Claude Code) or runs inline (Cursor/Copilot/Codex).🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.aicontext/prompts/step-loop.md at line 23, The repeated "If `ERROR`... If `SKIP`... If `COMMANDS`..." phrasing in the step-loop doc is triggering a style hint; revise the sentence at step 5 to vary structure while preserving meaning: mention that when `after_step.tests` is not `false` you should compute the changed-files corpus per the Review corpus table, call `resolve-tests.md` with the resolved value, `step` context, and corpus, and then handle outcomes by stating that `ERROR` should be surfaced to the user and tests skipped, `SKIP` should report the skip and continue, and `COMMANDS` should be forwarded to the `test-runner` subagent (Claude Code) or executed inline (Cursor/Copilot/Codex); keep references to `after_step.tests`, `resolve-tests.md`, `step`, and the `COMMANDS`/`ERROR`/`SKIP` outcomes so readers can locate the related logic..aicontext/prompts/run-task.md (1)
21-21: Optional: Vary sentence structure for readability.The parallel "If
ERROR... IfSKIP... IfCOMMANDS..." structure aids clarity but triggers a style hint (same as instep-loop.md). Consider introducing slight variation if desired, though the current form is clear and maintains consistency across prompt files.♻️ Optional rewording
-2. **Tests** — if `after_task.tests` resolved to anything other than `false`: call `resolve-tests.md` with the resolved value and `task` context. If `ERROR`: surface to the user, do not run tests. If `SKIP`: report skip and continue. If `COMMANDS`: pass them to `test-runner` subagent (Claude Code) or run inline (Cursor/Copilot/Codex). +2. **Tests** — if `after_task.tests` resolved to anything other than `false`: call `resolve-tests.md` with the resolved value and `task` context. Handle the result: `ERROR` surfaces to the user without running tests; `SKIP` reports skip and continues; `COMMANDS` passes to `test-runner` subagent (Claude Code) or runs inline (Cursor/Copilot/Codex).🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.aicontext/prompts/run-task.md at line 21, The sentence block describing test-handling for after_task.tests is repetitive in its "If `ERROR`... If `SKIP`... If `COMMANDS`..." phrasing; edit the line in .aicontext/prompts/run-task.md to vary sentence structure while preserving meaning and references to after_task.tests, resolve-tests.md, the task context, and the test-runner subagent (Claude Code) or inline runners (Cursor/Copilot/Codex), e.g., restructure one or two of the clauses into a different grammatical form (such as turning "If `ERROR`: surface to the user" into "Errors should be surfaced to the user and tests must not run") so readability improves without changing behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@bin/aicontext.js`:
- Around line 333-344: The restore loop for FRAMEWORK_PROMPTS can fail if the
destination prompts directory was deleted because it calls fs.copyFileSync(dest)
without ensuring promptDestDir exists; update the logic around
promptSrcDir/promptDestDir to create the destination directory before copying
(e.g., check promptDestDir with fs.existsSync and call
fs.mkdirSync(promptDestDir, { recursive: true }) when missing) so the loop in
bin/aicontext.js that references FRAMEWORK_PROMPTS, promptSrcDir and
promptDestDir always has the target directory present before calling
fs.copyFileSync.
- Around line 361-386: The Claude branch that restores FRAMEWORK_AGENTS and
FRAMEWORK_SKILLS should also restore the top-level Claude manifest file; add
logic (inside the presentAssistants loop where name === 'claude') to check for
the source file path.join(packageRoot, '.claude', 'CLAUDE.md') and the
destination path.join(target, '.claude', 'CLAUDE.md'), and if the source exists
and destination is missing create the destination directory with
fs.mkdirSync(path.join(target, '.claude'), { recursive: true }), copy it with
fs.copyFileSync, call log(` Restored: CLAUDE.md`, 'yellow') and increment
healed; use the same variable names (packageRoot, target, healed, log) so the
new code fits with the existing FRAMEWORK_AGENTS / FRAMEWORK_SKILLS restore
logic.
---
Nitpick comments:
In @.aicontext/prompts/run-task.md:
- Line 21: The sentence block describing test-handling for after_task.tests is
repetitive in its "If `ERROR`... If `SKIP`... If `COMMANDS`..." phrasing; edit
the line in .aicontext/prompts/run-task.md to vary sentence structure while
preserving meaning and references to after_task.tests, resolve-tests.md, the
task context, and the test-runner subagent (Claude Code) or inline runners
(Cursor/Copilot/Codex), e.g., restructure one or two of the clauses into a
different grammatical form (such as turning "If `ERROR`: surface to the user"
into "Errors should be surfaced to the user and tests must not run") so
readability improves without changing behavior.
In @.aicontext/prompts/step-loop.md:
- Line 23: The repeated "If `ERROR`... If `SKIP`... If `COMMANDS`..." phrasing
in the step-loop doc is triggering a style hint; revise the sentence at step 5
to vary structure while preserving meaning: mention that when `after_step.tests`
is not `false` you should compute the changed-files corpus per the Review corpus
table, call `resolve-tests.md` with the resolved value, `step` context, and
corpus, and then handle outcomes by stating that `ERROR` should be surfaced to
the user and tests skipped, `SKIP` should report the skip and continue, and
`COMMANDS` should be forwarded to the `test-runner` subagent (Claude Code) or
executed inline (Cursor/Copilot/Codex); keep references to `after_step.tests`,
`resolve-tests.md`, `step`, and the `COMMANDS`/`ERROR`/`SKIP` outcomes so
readers can locate the related logic.
🪄 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
Run ID: 08a219fe-fdb5-499e-8b5a-7bdeee459ef2
📒 Files selected for processing (6)
.aicontext/prompts/generate-guide.md.aicontext/prompts/run-task.md.aicontext/prompts/step-loop.md.claude/skills/generate-docs/SKILL.mdbin/aicontext.jstest/cli.test.js
🚧 Files skipped from review as they are similar to previous changes (1)
- .claude/skills/generate-docs/SKILL.md
Add mkdirSync for prompts directory before restore loop (matching scripts/agents/skills pattern). Restore .claude/CLAUDE.md when missing. Co-Authored-By: Claude via AIContext
Bump version to 1.9.0, add changelog entry, update README version history. Co-Authored-By: Claude via AIContext
Summary
ensure-config.mdas single gateway with migration, interactive resolution, and type-aware test configaskmode,resolve-task-naming.md, branch pattern extractioncheck-tasktoresume-task,review-task-plantoreview-task, fixfinish-taskordering--forceflag, skill-precedence rule/generate-docsskill for reference and guide documentation/startemphasized as required every sessionTest plan
node --test test/*.test.js— all CLI tests passaicontext initin a fresh project — config created with all sectionsaicontext updatepreserves user content, adds new files/startloads context and runs update check/generate-docsproduces reference and guide outputSummary by CodeRabbit
New Features
Command Updates
Improvements