Skip to content

feat: release for beta 4 - #195

Merged
benym merged 116 commits into
masterfrom
beta4
Jul 12, 2026
Merged

feat: release for beta 4#195
benym merged 116 commits into
masterfrom
beta4

Conversation

@benym

@benym benym commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

✨ Summary

🎯 Scope

  • CLI commands (init, status, doctor, update)
  • Core installer / platform detection
  • Comet skills (assets/skills/, assets/skills-zh/)
  • Comet shell scripts (assets/skills/comet/scripts/)
  • Tests / CI
  • Documentation / changelog
  • Other:

🧪 Testing

  • pnpm build
  • pnpm lint
  • pnpm run lint:architecture
  • pnpm format:check
  • pnpm test
  • pnpm test -- test/domains/comet-classic/comet-scripts.test.ts
  • Not run:

✅ Checklist

  • PR title follows Conventional Commits, for example fix: handle project-scope init
  • User-facing behavior is documented in README.md, README-zh.md, or CONTRIBUTING.md
  • CHANGELOG.md is updated when behavior changes
  • Skill changes were made in Chinese first when applicable, then synced to English
  • New scripts are included in assets/manifest.json and relevant tests
  • Shell scripts remain portable across macOS, Linux, and Windows Git Bash
  • No unrelated generated files or local artifacts are included

👀 Notes for Reviewers

Summary by CodeRabbit

  • New Features
    • Added comet resume-probe for read-only Ambient Resume probing, including managed project instruction injection.
    • Added auditable Classic evidence recording via comet state record-check and improved stable Classic top-level commands.
    • Added a user-level project installation registry supporting indexed comet update/uninstall plus new scope prompts.
  • Improvements
    • comet status now clearly distinguishes Comet vs OpenSpec and surfaces archive readiness/command-check details.
    • Improved dashboard viewport/scroll preservation and archived artifact completeness.
  • Bug Fixes
    • Fixed comet eval harness/draft-hash resolution, archive confirmation gating, and multiple update/uninstall/init edge cases.

benym added 30 commits July 9, 2026 16:56
@benym
benym marked this pull request as ready for review July 12, 2026 07:12

@sourcery-ai sourcery-ai 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.

Sorry, we are unable to review this pull request

The GitHub API does not allow us to fetch diffs exceeding 20000 lines

@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: 1

🧹 Nitpick comments (2)
domains/comet-classic/classic-hook-guard.ts (2)

223-253: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Redundant non-null assertion followed by .filter(Boolean).

Line 250 uses governingChangeName(governing)! (non-null assertion) but then .filter(Boolean) removes nullish values. The ! is misleading since governingChangeName can return null, and .filter(Boolean) already handles that. Drop the ! for correctness clarity.

♻️ Remove redundant non-null assertion
-    active.map((governing) => governingChangeName(governing)!).filter(Boolean),
+    active.map((governing) => governingChangeName(governing)).filter(Boolean),
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@domains/comet-classic/classic-hook-guard.ts` around lines 223 - 253, In
repoSourceGoverningChange, remove the redundant non-null assertion from
governingChangeName(governing) in the active.map(...).filter(Boolean)
expression, leaving the existing nullish filtering behavior unchanged.

277-280: 🚀 Performance & Scalability | 🔵 Trivial | 💤 Low value

activeChanges called twice for the same project root.

superpowersArtifactGoverningChange (line 203) already calls activeChanges(projectRoot), and line 277 calls it again as a fallback. Consider passing the already-fetched active changes list to avoid a redundant async I/O call on the hot path.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@domains/comet-classic/classic-hook-guard.ts` around lines 277 - 280, Update
superpowersArtifactGoverningChange and its surrounding call flow to reuse the
active changes list already fetched for the same projectRoot instead of calling
activeChanges(projectRoot) again in the fallback. Pass the existing list into
the fallback logic and preserve the current first-entry and null behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@assets/skills/comet/SKILL.md`:
- Line 25: Update the existing-change language lookup in the Output Language
Rule of SKILL.md to use the stable `comet state get <name> language` command
form, matching comet-verify/SKILL.md. Preserve the existing fallback order and
explicit language propagation requirements.

---

Nitpick comments:
In `@domains/comet-classic/classic-hook-guard.ts`:
- Around line 223-253: In repoSourceGoverningChange, remove the redundant
non-null assertion from governingChangeName(governing) in the
active.map(...).filter(Boolean) expression, leaving the existing nullish
filtering behavior unchanged.
- Around line 277-280: Update superpowersArtifactGoverningChange and its
surrounding call flow to reuse the active changes list already fetched for the
same projectRoot instead of calling activeChanges(projectRoot) again in the
fallback. Pass the existing list into the fallback logic and preserve the
current first-entry and null behavior.
🪄 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: defaults

Review profile: CHILL

Plan: Pro

Run ID: 022c0b23-cf02-4611-a663-0e4cb69b0720

📥 Commits

Reviewing files that changed from the base of the PR and between 6ba43af and c4ab8a8.

📒 Files selected for processing (52)
  • .github/workflows/ci.yml
  • CHANGELOG.md
  • app/commands/init.ts
  • app/commands/update.ts
  • assets/skills-zh/comet-archive/SKILL.md
  • assets/skills-zh/comet-build/SKILL.md
  • assets/skills-zh/comet-design/SKILL.md
  • assets/skills-zh/comet-hotfix/SKILL.md
  • assets/skills-zh/comet-open/SKILL.md
  • assets/skills-zh/comet-tweak/SKILL.md
  • assets/skills-zh/comet-verify/SKILL.md
  • assets/skills-zh/comet/SKILL.md
  • assets/skills-zh/comet/reference/comet-yaml-fields.md
  • assets/skills-zh/comet/reference/scripts.md
  • assets/skills/comet-archive/SKILL.md
  • assets/skills/comet-build/SKILL.md
  • assets/skills/comet-design/SKILL.md
  • assets/skills/comet-hotfix/SKILL.md
  • assets/skills/comet-open/SKILL.md
  • assets/skills/comet-tweak/SKILL.md
  • assets/skills/comet-verify/SKILL.md
  • assets/skills/comet/SKILL.md
  • assets/skills/comet/reference/comet-yaml-fields.md
  • assets/skills/comet/reference/scripts.md
  • assets/skills/comet/rules/comet-phase-guard.en.md
  • assets/skills/comet/rules/comet-phase-guard.md
  • assets/skills/comet/scripts/comet-runtime.mjs
  • docs/superpowers/plans/2026-07-12-current-change-hook-binding.md
  • docs/superpowers/specs/2026-07-12-current-change-hook-binding-design.md
  • domains/comet-classic/classic-archive.ts
  • domains/comet-classic/classic-current-change.ts
  • domains/comet-classic/classic-guard.ts
  • domains/comet-classic/classic-hook-guard.ts
  • domains/comet-classic/classic-runtime-run.ts
  • domains/comet-classic/classic-state-command.ts
  • domains/comet-classic/index.ts
  • domains/dashboard/web/src/main.jsx
  • domains/integrations/openspec.ts
  • domains/skill/platform-install.ts
  • test/app/init-e2e.test.ts
  • test/app/update.test.ts
  • test/domains/comet-classic/classic-archive.test.ts
  • test/domains/comet-classic/classic-current-change.test.ts
  • test/domains/comet-classic/classic-hook-guard.test.ts
  • test/domains/comet-classic/comet-scripts-guard.test.ts
  • test/domains/comet-classic/comet-scripts.test.ts
  • test/domains/dashboard/web-source.test.ts
  • test/domains/integrations/openspec.test.ts
  • test/domains/skill/internal-skills.test.ts
  • test/domains/skill/skills.test.ts
  • test/repository/ci-workflows.test.ts
  • test/scripts/prepublish-check.test.ts
✅ Files skipped from review due to trivial changes (3)
  • assets/skills-zh/comet-design/SKILL.md
  • docs/superpowers/specs/2026-07-12-current-change-hook-binding-design.md
  • CHANGELOG.md
🚧 Files skipped from review as they are similar to previous changes (17)
  • assets/skills-zh/comet/reference/comet-yaml-fields.md
  • assets/skills/comet/reference/comet-yaml-fields.md
  • assets/skills/comet-archive/SKILL.md
  • app/commands/init.ts
  • assets/skills-zh/comet/reference/scripts.md
  • test/domains/comet-classic/comet-scripts-guard.test.ts
  • test/domains/integrations/openspec.test.ts
  • assets/skills-zh/comet-archive/SKILL.md
  • domains/comet-classic/classic-archive.ts
  • assets/skills/comet/reference/scripts.md
  • domains/dashboard/web/src/main.jsx
  • domains/skill/platform-install.ts
  • test/app/init-e2e.test.ts
  • assets/skills-zh/comet-verify/SKILL.md
  • assets/skills/comet-build/SKILL.md
  • assets/skills-zh/comet-build/SKILL.md
  • app/commands/update.ts

@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.

Caution

Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.

Actionable comments posted: 1

🧹 Nitpick comments (2)
domains/comet-classic/classic-hook-guard.ts (2)

223-253: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Redundant non-null assertion followed by .filter(Boolean).

Line 250 uses governingChangeName(governing)! (non-null assertion) but then .filter(Boolean) removes nullish values. The ! is misleading since governingChangeName can return null, and .filter(Boolean) already handles that. Drop the ! for correctness clarity.

♻️ Remove redundant non-null assertion
-    active.map((governing) => governingChangeName(governing)!).filter(Boolean),
+    active.map((governing) => governingChangeName(governing)).filter(Boolean),
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@domains/comet-classic/classic-hook-guard.ts` around lines 223 - 253, In
repoSourceGoverningChange, remove the redundant non-null assertion from
governingChangeName(governing) in the active.map(...).filter(Boolean)
expression, leaving the existing nullish filtering behavior unchanged.

277-280: 🚀 Performance & Scalability | 🔵 Trivial | 💤 Low value

activeChanges called twice for the same project root.

superpowersArtifactGoverningChange (line 203) already calls activeChanges(projectRoot), and line 277 calls it again as a fallback. Consider passing the already-fetched active changes list to avoid a redundant async I/O call on the hot path.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@domains/comet-classic/classic-hook-guard.ts` around lines 277 - 280, Update
superpowersArtifactGoverningChange and its surrounding call flow to reuse the
active changes list already fetched for the same projectRoot instead of calling
activeChanges(projectRoot) again in the fallback. Pass the existing list into
the fallback logic and preserve the current first-entry and null behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@assets/skills/comet/SKILL.md`:
- Line 25: Update the existing-change language lookup in the Output Language
Rule of SKILL.md to use the stable `comet state get <name> language` command
form, matching comet-verify/SKILL.md. Preserve the existing fallback order and
explicit language propagation requirements.

---

Nitpick comments:
In `@domains/comet-classic/classic-hook-guard.ts`:
- Around line 223-253: In repoSourceGoverningChange, remove the redundant
non-null assertion from governingChangeName(governing) in the
active.map(...).filter(Boolean) expression, leaving the existing nullish
filtering behavior unchanged.
- Around line 277-280: Update superpowersArtifactGoverningChange and its
surrounding call flow to reuse the active changes list already fetched for the
same projectRoot instead of calling activeChanges(projectRoot) again in the
fallback. Pass the existing list into the fallback logic and preserve the
current first-entry and null behavior.
🪄 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: defaults

Review profile: CHILL

Plan: Pro

Run ID: 022c0b23-cf02-4611-a663-0e4cb69b0720

📥 Commits

Reviewing files that changed from the base of the PR and between 6ba43af and c4ab8a8.

📒 Files selected for processing (52)
  • .github/workflows/ci.yml
  • CHANGELOG.md
  • app/commands/init.ts
  • app/commands/update.ts
  • assets/skills-zh/comet-archive/SKILL.md
  • assets/skills-zh/comet-build/SKILL.md
  • assets/skills-zh/comet-design/SKILL.md
  • assets/skills-zh/comet-hotfix/SKILL.md
  • assets/skills-zh/comet-open/SKILL.md
  • assets/skills-zh/comet-tweak/SKILL.md
  • assets/skills-zh/comet-verify/SKILL.md
  • assets/skills-zh/comet/SKILL.md
  • assets/skills-zh/comet/reference/comet-yaml-fields.md
  • assets/skills-zh/comet/reference/scripts.md
  • assets/skills/comet-archive/SKILL.md
  • assets/skills/comet-build/SKILL.md
  • assets/skills/comet-design/SKILL.md
  • assets/skills/comet-hotfix/SKILL.md
  • assets/skills/comet-open/SKILL.md
  • assets/skills/comet-tweak/SKILL.md
  • assets/skills/comet-verify/SKILL.md
  • assets/skills/comet/SKILL.md
  • assets/skills/comet/reference/comet-yaml-fields.md
  • assets/skills/comet/reference/scripts.md
  • assets/skills/comet/rules/comet-phase-guard.en.md
  • assets/skills/comet/rules/comet-phase-guard.md
  • assets/skills/comet/scripts/comet-runtime.mjs
  • docs/superpowers/plans/2026-07-12-current-change-hook-binding.md
  • docs/superpowers/specs/2026-07-12-current-change-hook-binding-design.md
  • domains/comet-classic/classic-archive.ts
  • domains/comet-classic/classic-current-change.ts
  • domains/comet-classic/classic-guard.ts
  • domains/comet-classic/classic-hook-guard.ts
  • domains/comet-classic/classic-runtime-run.ts
  • domains/comet-classic/classic-state-command.ts
  • domains/comet-classic/index.ts
  • domains/dashboard/web/src/main.jsx
  • domains/integrations/openspec.ts
  • domains/skill/platform-install.ts
  • test/app/init-e2e.test.ts
  • test/app/update.test.ts
  • test/domains/comet-classic/classic-archive.test.ts
  • test/domains/comet-classic/classic-current-change.test.ts
  • test/domains/comet-classic/classic-hook-guard.test.ts
  • test/domains/comet-classic/comet-scripts-guard.test.ts
  • test/domains/comet-classic/comet-scripts.test.ts
  • test/domains/dashboard/web-source.test.ts
  • test/domains/integrations/openspec.test.ts
  • test/domains/skill/internal-skills.test.ts
  • test/domains/skill/skills.test.ts
  • test/repository/ci-workflows.test.ts
  • test/scripts/prepublish-check.test.ts
✅ Files skipped from review due to trivial changes (3)
  • assets/skills-zh/comet-design/SKILL.md
  • docs/superpowers/specs/2026-07-12-current-change-hook-binding-design.md
  • CHANGELOG.md
🚧 Files skipped from review as they are similar to previous changes (17)
  • assets/skills-zh/comet/reference/comet-yaml-fields.md
  • assets/skills/comet/reference/comet-yaml-fields.md
  • assets/skills/comet-archive/SKILL.md
  • app/commands/init.ts
  • assets/skills-zh/comet/reference/scripts.md
  • test/domains/comet-classic/comet-scripts-guard.test.ts
  • test/domains/integrations/openspec.test.ts
  • assets/skills-zh/comet-archive/SKILL.md
  • domains/comet-classic/classic-archive.ts
  • assets/skills/comet/reference/scripts.md
  • domains/dashboard/web/src/main.jsx
  • domains/skill/platform-install.ts
  • test/app/init-e2e.test.ts
  • assets/skills-zh/comet-verify/SKILL.md
  • assets/skills/comet-build/SKILL.md
  • assets/skills-zh/comet-build/SKILL.md
  • app/commands/update.ts
🛑 Comments failed to post (1)
assets/skills/comet/SKILL.md (1)

25-25: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Inconsistent CLI form in Output Language Rule.

Line 25 uses "$COMET_BASH" "$COMET_STATE" get <name> language while comet-verify/SKILL.md line 17 uses the stable comet state get <name> language form. Since this PR's objective includes "stable Classic command facades," consider updating this reference for consistency.

♻️ Proposed fix
- Use the configured Comet artifact language as the output language for every OpenSpec and Superpowers artifact. The configured value is a normalized language id, `en` or `zh-CN`. For an existing change, read `language` from `openspec/changes/<name>/.comet.yaml` using `"$COMET_BASH" "$COMET_STATE" get <name> language`.
+ Use the configured Comet artifact language as the output language for every OpenSpec and Superpowers artifact. The configured value is a normalized language id, `en` or `zh-CN`. For an existing change, read `language` from `openspec/changes/<name>/.comet.yaml` using `comet state get <name> language`.
📝 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.

Use the configured Comet artifact language as the output language for every OpenSpec and Superpowers artifact. The configured value is a normalized language id, `en` or `zh-CN`. For an existing change, read `language` from `openspec/changes/<name>/.comet.yaml` using `comet state get <name> language`. Before `.comet.yaml` exists, read `language` from project `.comet/config.yaml`, then fall back to global `~/.comet/config.yaml`; if neither exists, fall back to the current user request language. Include the resolved language explicitly in every prompt or ARGUMENTS passed to external OpenSpec/Superpowers skills.
🧰 Tools
🪛 SkillSpector (2.3.7)

[warning] 201: [EA2] Autonomous Decision Making: Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Remediation: Add human-in-the-loop confirmation for destructive, irreversible, or high-impact operations. Never auto-execute commands that modify files, send data, or alter system state.

(Excessive Agency (EA2))

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@assets/skills/comet/SKILL.md` at line 25, Update the existing-change language
lookup in the Output Language Rule of SKILL.md to use the stable `comet state
get <name> language` command form, matching comet-verify/SKILL.md. Preserve the
existing fallback order and explicit language propagation requirements.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment