Skip to content

Release v1.9.0#22

Merged
zahardev merged 13 commits into
mainfrom
version/1.9.0
Apr 22, 2026
Merged

Release v1.9.0#22
zahardev merged 13 commits into
mainfrom
version/1.9.0

Conversation

@zahardev

@zahardev zahardev commented Apr 22, 2026

Copy link
Copy Markdown
Owner

Summary

  • Centralized config resolution — ensure-config.md as single gateway with migration, interactive resolution, and type-aware test config
  • Task naming UX — ask mode, resolve-task-naming.md, branch pattern extraction
  • Task flow improvements — rename check-task to resume-task, review-task-plan to review-task, fix finish-task ordering
  • Self-heal for missing files, --force flag, skill-precedence rule
  • /generate-docs skill for reference and guide documentation
  • CLI improvements — better update flow, shadowing detection, ESM compatibility
  • Logo and README refresh — updated tagline, /start emphasized as required every session

Test plan

  • Run node --test test/*.test.js — all CLI tests pass
  • aicontext init in a fresh project — config created with all sections
  • aicontext update preserves user content, adds new files
  • /start loads context and runs update check
  • /generate-docs produces reference and guide output

Summary by CodeRabbit

  • New Features

    • /generate-docs to produce Reference, Guide, or Both with selectable output path
    • aicontext add-assistant and improved init assistant selection
  • Command Updates

    • /resume-task replaces /check-task for session resumption
    • /review-task replaces /review-task-plan for broader task validation
  • Improvements

    • Interactive config validation/migration during setup; self-heal and --force update behavior
    • Tests run for any non-false setting with affected-file scoping
    • Task/spec naming now uses underscore-style {task_name}; /start prints framework version

zahardev added 10 commits April 14, 2026 11:32
…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
@coderabbitai

coderabbitai Bot commented Apr 22, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: a7639202-cbb3-49c2-8e6e-e11ad24379d1

📥 Commits

Reviewing files that changed from the base of the PR and between e07edb9 and d4e6e90.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (3)
  • CHANGELOG.md
  • README.md
  • package.json
✅ Files skipped from review due to trivial changes (2)
  • package.json
  • CHANGELOG.md

📝 Walkthrough

Walkthrough

This 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

Cohort / File(s) Summary
Filename resolution & task creation
.aicontext/prompts/resolve-task-naming.md, .aicontext/prompts/create-task.md, .aicontext/prompts/plan-tasks.md, .aicontext/prompts/start-feature.md
New resolver prompt for deriving task filenames from config pattern + {task_name} slug; removed inline issue-id/prefix heuristics; task creation flows delegate filename resolution.
Config validation & interactive resolution
.aicontext/prompts/ensure-config.md, .aicontext/prompts/migrate-config.md, .aicontext/prompts/resolve-asks.md, .aicontext/templates/config.template.yml
ensure-config.md now validates/creates/migrates config and routes legacy keys to migrate-config.md; resolve-asks.md handles interactive resolution of after_* fields; template documents new test/review grammar and docs.output_path.
Test discovery & execution
.aicontext/prompts/resolve-test-types.md, .aicontext/prompts/resolve-tests.md, .aicontext/prompts/run-task.md, .aicontext/prompts/run-step.md, .aicontext/prompts/step-loop.md, .aicontext/templates/structure.template.md, .claude/agents/test-runner.md
Introduces test-type discovery (Full vs Affected), new resolve-tests flow, changed step/run loops to call resolver per execution, tests run when not false, and test-runner execution/logging tightened.
Documentation generation feature
.aicontext/prompts/generate-docs.md, .aicontext/prompts/generate-guide.md, .aicontext/prompts/generate-reference.md, .claude/agents/docs-generator.md, .claude/skills/generate-docs/SKILL.md, .codex/skills/generate-docs/SKILL.md
Adds /generate-docs workflow with output-path resolution, user selection (reference/guide/both), a docs-generator agent that grep-first scans repo, and assistant skills to expose the command.
Prompt/workflow renames & flow changes
.aicontext/prompts/check-task.md (deleted), .aicontext/prompts/resume-task.md, .aicontext/prompts/review-task-plan.md (deleted), .aicontext/prompts/review-task.md, .aicontext/prompts/finish-task.md, .aicontext/prompts/do-it.md, .aicontext/prompts/run-task.md, .aicontext/prompts/run-step.md, .aicontext/prompts/step-loop.md
Renamed prompts, removed upfront ask-batching UX, inserted ensure-config.md prerequisites into flows, adjusted finish-task ordering and resumed-run semantics.
Skills & assistant examples
.claude/skills/..., .codex/skills/..., .cursor/rules/aicontext.mdc, .github/copilot-instructions.md, .aicontext/readme.md
Replaced check-task/review-task-plan skills with resume-task/review-task, added generate-docs skill, removed disable-model-invocation flags from several skills, and updated examples/docs to new names.
CLI framework & assistant management
bin/aicontext.js
Large CLI refactor: expanded FRAMEWORK registries, added ASSISTANTS abstraction with per-assistant detect/install, addAssistant(), selfHealMissingFiles(), findAllInstalls(), managerUninstallHint(), --force handling, and changed init/update flows to multi-select/install per assistant.
Tests & test updates
test/cli.test.js
Updated expectations for expanded registries and renamed prompts/skills; added tests for selfHealMissingFiles() and --force update behavior; adjusted template-related assertions.
Templates & docs
.aicontext/templates/spec.template.md, .aicontext/templates/structure.template.md, README.md, docs/*, .aicontext/rules/*, .aicontext/readme.md, CHANGELOG.md, package.json
Switched placeholders to underscore form {task_name}, updated structure template and config template, updated docs/README to reflect command renames and /generate-docs, bumped version to 1.9.0, and adjusted changelog.
Minor prompt text edits
.aicontext/prompts/add-idea.md, .aicontext/prompts/aic-help.md, .aicontext/prompts/check-update.md, .aicontext/prompts/gh-review-fix-loop.md, .aicontext/prompts/resume-task.md
Small wording updates: simplified add-idea fallback, replaced /check-task/resume-task in help text, adjusted CLI-outdated command sequence, and removed triage-table reference.

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
Loading
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
Loading
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
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • Version/1.2.0 #9: overlaps CLI core changes and prompt/skill renames (bin/aicontext.js, registries, init/update behavior).
  • Version 1.3.0 #13: closely related changes to prompt/skill/agent management and renaming of check-task/review-task-plan.
  • Version/1.4.0 #14: modifies FRAMEWORK_* registries and CLI exports similar to this PR (assistant install/update handling).

Poem

🐰 I hopped through prompts and renamed the course,

Slugs and configs now find their true source.
Tests split to Full or those Affected,
Docs sprout with agents — grep-first, well-acted.
From check to resume, the workflow's anew; hop, hop, hooray!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely summarizes the main change: a release version bump to 1.9.0, which is the primary purpose of the pull request.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch version/1.9.0

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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:line anchors 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 custom docs.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 to resolve-tests.md to reduce false invalids.

Line 19 should explicitly detect literal shell commands before type-splitting, consistent with resolve-tests.md trivial-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

📥 Commits

Reviewing files that changed from the base of the PR and between 50b6e90 and 4e9535c.

⛔ Files ignored due to path filters (1)
  • assets/logo4.svg is 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.md
  • README.md
  • bin/aicontext.js
  • docs/development-model.md
  • docs/skills.md
  • docs/workflow.md
  • test/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

Comment thread .aicontext/prompts/generate-guide.md Outdated
Comment thread .aicontext/prompts/resolve-test-types.md
Comment thread .aicontext/prompts/run-task.md Outdated
Comment thread .aicontext/rules/process.md
Comment thread .aicontext/templates/structure.template.md
Comment thread .claude/agents/docs-generator.md
Comment thread .claude/skills/generate-docs/SKILL.md Outdated
Comment thread docs/skills.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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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... If SKIP... If COMMANDS..." 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... If SKIP... If COMMANDS..." structure aids clarity but triggers a style hint (same as in step-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

📥 Commits

Reviewing files that changed from the base of the PR and between 4e9535c and c3a0544.

📒 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.md
  • bin/aicontext.js
  • test/cli.test.js
🚧 Files skipped from review as they are similar to previous changes (1)
  • .claude/skills/generate-docs/SKILL.md

Comment thread bin/aicontext.js
Comment thread bin/aicontext.js
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
coderabbitai[bot]
coderabbitai Bot previously approved these changes Apr 22, 2026
Bump version to 1.9.0, add changelog entry, update README
version history.

Co-Authored-By: Claude via AIContext
@zahardev zahardev merged commit eb93601 into main Apr 22, 2026
2 checks passed
@coderabbitai coderabbitai Bot mentioned this pull request May 3, 2026
5 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant