Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,10 @@ body:
description: Which part of Comet is affected?
options:
- CLI command / user interaction (`app/`)
- Native workflow runtime (`domains/comet-native`)
- Bundle authoring (`domains/bundle`)
- Classic workflow runtime (`domains/comet-classic`, `assets/skills/comet/scripts/`)
- Shared Hook / Hook Router (`domains/comet-entry`)
- Dashboard (`domains/dashboard`)
- Engine (`domains/engine`)
- Eval (`domains/eval`)
Expand Down
2 changes: 2 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,10 @@ body:
description: Where would this feature live?
options:
- CLI command / user interaction (`app/`)
- Native workflow runtime (`domains/comet-native`)
- Bundle authoring (`domains/bundle`)
- Classic workflow runtime (`domains/comet-classic`, `assets/skills/comet/scripts/`)
- Shared Hook / Hook Router (`domains/comet-entry`)
- Dashboard (`domains/dashboard`)
- Engine (`domains/engine`)
- Eval (`domains/eval`)
Expand Down
2 changes: 2 additions & 0 deletions .github/ISSUE_TEMPLATE/question.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,10 @@ body:
description: Which part of Comet is your question about?
options:
- CLI command / user interaction (`app/`)
- Native workflow runtime (`domains/comet-native`)
- Bundle authoring (`domains/bundle`)
- Classic workflow runtime (`domains/comet-classic`, `assets/skills/comet/scripts/`)
- Shared Hook / Hook Router (`domains/comet-entry`)
- Dashboard (`domains/dashboard`)
- Engine (`domains/engine`)
- Eval (`domains/eval`)
Expand Down
103 changes: 103 additions & 0 deletions .github/workflows/issue-triage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
name: Issue Triage

on:
issues:
types: [opened, edited]

permissions:
issues: write

jobs:
triage:
name: Apply issue triage labels
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@d746ffe35508b1917358783b479e04febd2b8f71 # v9.0.0
with:
script: |
const issue = context.payload.issue;
if (!issue) {
core.setFailed('Issue payload is missing.');
return;
}

const sections = new Map();
let currentHeading;
for (const line of (issue.body ?? '').replace(/\r\n/g, '\n').split('\n')) {
const heading = line.match(/^###\s+(.+?)\s*$/);
if (heading) {
currentHeading = heading[1].trim().replace(/^[^A-Za-z0-9]+/, '');
sections.set(currentHeading, []);
continue;
}
if (currentHeading) sections.get(currentHeading).push(line);
}

const selectedArea = ['Affected area', 'Primary area', 'Topic']
.flatMap((heading) => sections.get(heading) ?? [])
.join(' ')
.replace(/[`*_]/g, '')
.replace(/\s+/g, ' ')
.trim();

const areaRules = [
{ label: 'area:native', pattern: /Native workflow runtime/i },
{ label: 'area:classic', pattern: /Classic workflow runtime/i },
{ label: 'area:hook', pattern: /Shared Hook|Hook Router/i },
{ label: 'area:cli', pattern: /CLI command|user interaction/i },
{ label: 'area:dashboard', pattern: /Dashboard/i },
{ label: 'area:platform', pattern: /Platform adapter|installer/i },
{ label: 'area:skills', pattern: /Skill domain|Bundled skills|assets/i },
{ label: 'area:workflow', pattern: /Workflow contract/i },
{ label: 'area:core', pattern: /Bundle authoring|Engine|Factory|Integrations/i },
{ label: 'area:eval', pattern: /Eval/i },
{ label: 'area:docs', pattern: /Documentation/i },
{
label: 'area:ci',
pattern: /Repository automation|CI \/ release \/ architecture checks/i,
},
{ label: 'area:repo', pattern: /Tests \/ repository architecture/i },
];
const targetArea = areaRules.find(({ pattern }) => pattern.test(selectedArea))?.label;
const managedAreaLabels = new Set(areaRules.map(({ label }) => label));

const labelsResponse = await github.rest.issues.listLabelsOnIssue({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
per_page: 100,
});
const currentLabels = labelsResponse.data.map(({ name }) => name);
const currentManagedAreas = currentLabels.filter((label) =>
managedAreaLabels.has(label),
);

for (const label of currentManagedAreas) {
if (label !== targetArea) {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
name: label,
});
}
}

const labelsToAdd = [];
if (targetArea && !currentLabels.includes(targetArea)) labelsToAdd.push(targetArea);
if (context.payload.action === 'opened' && !currentLabels.includes('needs-triage')) {
labelsToAdd.push('needs-triage');
}
if (labelsToAdd.length > 0) {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
labels: labelsToAdd,
});
}

core.info(
`Issue #${issue.number}: selected area=${selectedArea || 'none'}, ` +
`applied area=${targetArea || 'none'}.`,
);
15 changes: 15 additions & 0 deletions .github/workflows/pr-title-lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,28 @@ jobs:
cli
commands
core
app
skills
assets
scripts
docs
ci
deps
release
native
classic
hook
dashboard
platform
workflow
bundle
engine
factory
integrations
eval
repo
tests
website
requireScope: false
subjectPattern: ^.{1,72}$
subjectPatternError: |
Expand Down
2 changes: 2 additions & 0 deletions .npmignore
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ __tests__/
eval/**/.pytest*/
eval/**/.pytest-*/
eval/**/.pytest_*/
eval/.pytest-basetemp-*/
eval/.pytest-tmp-*/
eval/**/.tmp/
eval/**/.cache/
eval/**/.ruff_cache/
Expand Down
17 changes: 12 additions & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,25 @@

All notable changes to @rpamis/comet will be documented in this file.

## What's Changed [0.4.0-beta.19] - 2026-08-15
## What's Changed [0.4.0-beta.19] - 2026-08-16

### Added

- **CodeBuddy rules support**: Comet now installs and refreshes Markdown workflow rules in CodeBuddy's `.codebuddy/rules/` directory.
- **On-demand change review**: The new `/comet-review` Skill reviews the current Native or Classic change against its implementation diff and existing evidence, reports prioritized correctness, security, edge-case, and coverage findings, and remains read-only without advancing or replacing Verify.
- **Fork pull request guidance**: First-time contributors opening pull requests from forks now receive the repository guidance comment through a trusted workflow.
- **Pull request template validation**: Pull requests now receive an actionable comment and a failing check when required template sections or items are missing, or when checklist items are incomplete.
- **Issue triage labels**: New issues are automatically marked for triage and assigned a repository area label from their structured issue form selection.

### Changed

- **Dashboard artifact previews**: Fullscreen previews now close with Escape, keep long tables horizontally scrollable, preserve readable table headers, and use a larger directory navigation scale.
- **Hook allow-path documentation**: The website now explains how to configure project-relative `hook.allow_paths` directories for guarded workflow phases.
- **On-demand change review**: The new `/comet-review` Skill reviews the current Native or Classic change against its implementation diff and existing evidence, reports prioritized correctness, security, edge-case, and coverage findings, and remains read-only without advancing or replacing Verify.
- **Pull request title scopes**: Conventional PR titles now support Native, Classic, Hook, Dashboard, Platform, Workflow, Eval, and other repository areas, including titles such as `feat(native): ...`.

### Fixed

- **Fork pull request greetings**: First-time contributors now receive the repository guidance comment when opening a pull request from a fork, without weakening the read-only permissions of workflows that execute contributor code.
- **Pull request template checks**: Pull requests now receive an actionable comment and a failing check when items from the repository template are missing or its checklist is incomplete.
- **Native Archive**: Archive now respects Git ignore rules when staging workspace artifacts and keeps valid portable verification reports from being treated as incomplete migrations.
- **Windows Eval packaging**: Packaging no longer traverses ignored pytest and Eval runtime artifacts before applying the package boundary, so stale Windows test directories cannot make `pnpm pack` fail with `EPERM`.

## What's Changed [0.4.0-beta.18] - 2026-08-13

Expand Down
Loading
Loading