ai-team 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/release.yml +40 -0
- package/.releaserc.json +34 -0
- package/CHANGELOG.md +32 -0
- package/README.md +9 -0
- package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/backend.md +77 -0
- package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/code-review.md +80 -0
- package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/frontend.md +22 -0
- package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/integration.md +65 -0
- package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/planning-agent.md +67 -0
- package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/qa.md +87 -0
- package/docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/requirement-analyst.md +77 -0
- package/docs/agents/knowledge/backend-dev.md +7 -0
- package/docs/agents/knowledge/code-reviewer.md +7 -0
- package/docs/agents/knowledge/frontend-dev.md +5 -0
- package/docs/agents/knowledge/planning-agent.md +17 -0
- package/docs/agents/knowledge/requirement-analyst.md +7 -0
- package/docs/agents/knowledge/tester.md +7 -0
- package/docs/agents/plans/REL-SEMVER-AUTOPUBLISH/plan.md +148 -0
- package/docs/cli.md +1 -0
- package/package.json +18 -9
- package/src/cli.js +13 -0
- package/tests/cli.integration.test.js +15 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
name: release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
id-token: write # Required for OIDC
|
|
11
|
+
contents: write
|
|
12
|
+
issues: write
|
|
13
|
+
pull-requests: write
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
release:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
env:
|
|
19
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
20
|
+
steps:
|
|
21
|
+
- name: Checkout
|
|
22
|
+
uses: actions/checkout@v4
|
|
23
|
+
with:
|
|
24
|
+
fetch-depth: 0
|
|
25
|
+
|
|
26
|
+
- name: Setup pnpm
|
|
27
|
+
uses: pnpm/action-setup@v4
|
|
28
|
+
|
|
29
|
+
- name: Setup Node.js
|
|
30
|
+
uses: actions/setup-node@v4
|
|
31
|
+
with:
|
|
32
|
+
node-version: lts/*
|
|
33
|
+
registry-url: https://registry.npmjs.org
|
|
34
|
+
cache: pnpm
|
|
35
|
+
|
|
36
|
+
- name: Install dependencies
|
|
37
|
+
run: pnpm install --frozen-lockfile
|
|
38
|
+
|
|
39
|
+
- name: Release
|
|
40
|
+
run: pnpm release
|
package/.releaserc.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"branches": [
|
|
3
|
+
"main"
|
|
4
|
+
],
|
|
5
|
+
"tagFormat": "v${version}",
|
|
6
|
+
"plugins": [
|
|
7
|
+
"@semantic-release/commit-analyzer",
|
|
8
|
+
"@semantic-release/release-notes-generator",
|
|
9
|
+
[
|
|
10
|
+
"@semantic-release/changelog",
|
|
11
|
+
{
|
|
12
|
+
"changelogFile": "CHANGELOG.md"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
[
|
|
16
|
+
"@semantic-release/npm",
|
|
17
|
+
{
|
|
18
|
+
"npmPublish": true
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"@semantic-release/github",
|
|
22
|
+
[
|
|
23
|
+
"@semantic-release/git",
|
|
24
|
+
{
|
|
25
|
+
"assets": [
|
|
26
|
+
"package.json",
|
|
27
|
+
"pnpm-lock.yaml",
|
|
28
|
+
"CHANGELOG.md"
|
|
29
|
+
],
|
|
30
|
+
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
]
|
|
34
|
+
}
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# [1.1.0](https://github.com/seanwuapps/ai-team/compare/v1.0.2...v1.1.0) (2026-02-23)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* implement semantic versioning and release automation ([fe46bdd](https://github.com/seanwuapps/ai-team/commit/fe46bdd03c754fa4cda235001feabda7b7203d4e))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* add version command to CLI and update documentation ([058da9c](https://github.com/seanwuapps/ai-team/commit/058da9c900ac790cea73cfec72902ec0f27a11a1))
|
|
12
|
+
|
|
13
|
+
# 1.0.0 (2026-02-23)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
* correct path in bin configuration for ai-team CLI ([016c553](https://github.com/seanwuapps/ai-team/commit/016c55376cb1976117233eca5fbaa7c840e58346))
|
|
19
|
+
* implement semantic versioning and release automation ([fe46bdd](https://github.com/seanwuapps/ai-team/commit/fe46bdd03c754fa4cda235001feabda7b7203d4e))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### Features
|
|
23
|
+
|
|
24
|
+
* add documentation writer agent and enhance code-reviewer tools ([215ebe7](https://github.com/seanwuapps/ai-team/commit/215ebe7a2d87eb85e76c0b30805ee2efd33c80a8))
|
|
25
|
+
* add emoji to agent definitions, enhance descriptions, and update related documentation ([0c169ef](https://github.com/seanwuapps/ai-team/commit/0c169ef194edeb7ca43b49f5da31a257e62988d6))
|
|
26
|
+
* add new agent definitions and update existing ones, enhance README and documentation ([6d9c3ed](https://github.com/seanwuapps/ai-team/commit/6d9c3eda7fb2dab0b3a2df277e644bc3a4cff61e))
|
|
27
|
+
* add new agent definitions for frontend, backend, planning, requirement analysis, testing, and orchestration ([513a162](https://github.com/seanwuapps/ai-team/commit/513a162a94b08729ed3d7bca9e9af8b2babf6ff9))
|
|
28
|
+
* Add styling standards and self-improvement templates ([1d094a9](https://github.com/seanwuapps/ai-team/commit/1d094a93b7c2a116f6bc868a35e6a34a6b4de4c2))
|
|
29
|
+
* add version command to CLI and update documentation ([058da9c](https://github.com/seanwuapps/ai-team/commit/058da9c900ac790cea73cfec72902ec0f27a11a1))
|
|
30
|
+
* update agent creation process and documentation, standardize definitions in YAML format ([e10ce27](https://github.com/seanwuapps/ai-team/commit/e10ce275d056cdf4cd0c810b7ee1b417b32f92a2))
|
|
31
|
+
* update package name and description, add YAML dependency, and enhance frontmatter parsing ([d7414f2](https://github.com/seanwuapps/ai-team/commit/d7414f2bbdf5e9e2bd05f0a4b51bdac1caeb0c51))
|
|
32
|
+
* update README for ai-team CLI, enhance installation and usage instructions ([25bcd33](https://github.com/seanwuapps/ai-team/commit/25bcd33348567c856d7747d18ca8306120d9e5ba))
|
package/README.md
CHANGED
|
@@ -168,6 +168,15 @@ ai-team doctor
|
|
|
168
168
|
ai-team doctor --json # machine-readable output for CI
|
|
169
169
|
```
|
|
170
170
|
|
|
171
|
+
### `version`
|
|
172
|
+
|
|
173
|
+
Print the installed CLI version.
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
ai-team version
|
|
177
|
+
ai-team --version
|
|
178
|
+
```
|
|
179
|
+
|
|
171
180
|
## Adding your own agents and skills
|
|
172
181
|
|
|
173
182
|
The CLI never reads or modifies anything under `.agents/custom/`. Use that directory freely:
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Backend/CLI Implementation Handoff — REL-SEMVER-AUTOPUBLISH
|
|
2
|
+
|
|
3
|
+
Date: 2026-02-23
|
|
4
|
+
From: backend-dev / cli-dev
|
|
5
|
+
To: reviewers / maintainers
|
|
6
|
+
|
|
7
|
+
## Completed (MVP)
|
|
8
|
+
|
|
9
|
+
- Added semantic-release stack and `release` script to `package.json`.
|
|
10
|
+
- Updated `pnpm-lock.yaml` importer devDependency entries to reflect release stack additions.
|
|
11
|
+
- Added `.releaserc.json` for branch `main` with plugins:
|
|
12
|
+
- commit-analyzer
|
|
13
|
+
- release-notes-generator
|
|
14
|
+
- changelog (`CHANGELOG.md`)
|
|
15
|
+
- npm publish
|
|
16
|
+
- github release
|
|
17
|
+
- git commit-back of `package.json`, `pnpm-lock.yaml`, `CHANGELOG.md`
|
|
18
|
+
- Added `.github/workflows/release.yml`:
|
|
19
|
+
- trigger: push to `main`
|
|
20
|
+
- explicit permissions: `contents`, `issues`, `pull-requests` write
|
|
21
|
+
- env tokens: `GITHUB_TOKEN`, `NPM_TOKEN`
|
|
22
|
+
- preflight failure if `NPM_TOKEN` missing
|
|
23
|
+
- checkout full history + setup pnpm/node + non-frozen lockfile install + `pnpm release`
|
|
24
|
+
|
|
25
|
+
## Notes / Constraints
|
|
26
|
+
|
|
27
|
+
- Implementation kept to MVP scope only; no additional CI jobs or release channels were added.
|
|
28
|
+
- Ensure repository secret `NPM_TOKEN` is configured before first release run.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Static validation performed by inspection of config/workflow content.
|
|
33
|
+
- Runtime validation (workflow execution and publishing) requires GitHub Actions environment and repository secrets.
|
|
34
|
+
|
|
35
|
+
## Code Review Remediation (blocker/major)
|
|
36
|
+
|
|
37
|
+
Date: 2026-02-23
|
|
38
|
+
|
|
39
|
+
### Finding status
|
|
40
|
+
|
|
41
|
+
1. **[blocker] Lockfile incomplete for semantic-release graph**
|
|
42
|
+
|
|
43
|
+
- Confirmed by inspection: importer `devDependencies` contains `semantic-release` and `@semantic-release/*`, while `packages:` does not contain matching resolved entries.
|
|
44
|
+
- Validation evidence: searched `pnpm-lock.yaml` for `semantic-release@` and `@semantic-release/*@` package keys; none present.
|
|
45
|
+
|
|
46
|
+
2. **[major] Release workflow lockfile integrity**
|
|
47
|
+
|
|
48
|
+
- Not switched back to frozen mode because blocker above is unresolved.
|
|
49
|
+
- Current workflow remains intentionally on `pnpm install --no-frozen-lockfile` as the minimal fallback until lockfile is regenerated.
|
|
50
|
+
|
|
51
|
+
### Environment blocker (exact)
|
|
52
|
+
|
|
53
|
+
- This agent session can read/edit workspace files but cannot run package-manager or git commands directly (no command-execution tool available in-session).
|
|
54
|
+
- Because of that, `pnpm install` lockfile regeneration and commit creation cannot be performed from this handoff.
|
|
55
|
+
|
|
56
|
+
### Minimal fallback (no added scope)
|
|
57
|
+
|
|
58
|
+
Run these commands in the repository from a local shell or CI runner with write access:
|
|
59
|
+
|
|
60
|
+
1. `pnpm install`
|
|
61
|
+
2. `pnpm install --frozen-lockfile`
|
|
62
|
+
3. `pnpm test`
|
|
63
|
+
|
|
64
|
+
Then commit regenerated `pnpm-lock.yaml` and switch `.github/workflows/release.yml` install step back to:
|
|
65
|
+
|
|
66
|
+
- `pnpm install --frozen-lockfile`
|
|
67
|
+
|
|
68
|
+
### Exit criteria to clear blocker
|
|
69
|
+
|
|
70
|
+
- `pnpm-lock.yaml` includes resolved `packages:` entries for:
|
|
71
|
+
- `semantic-release@...`
|
|
72
|
+
- `@semantic-release/changelog@...`
|
|
73
|
+
- `@semantic-release/commit-analyzer@...`
|
|
74
|
+
- `@semantic-release/git@...`
|
|
75
|
+
- `@semantic-release/github@...`
|
|
76
|
+
- `@semantic-release/npm@...`
|
|
77
|
+
- `@semantic-release/release-notes-generator@...`
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Code Review — REL-SEMVER-AUTOPUBLISH
|
|
2
|
+
|
|
3
|
+
Date: 2026-02-23
|
|
4
|
+
Reviewer: code-reviewer
|
|
5
|
+
|
|
6
|
+
## Review Scope
|
|
7
|
+
|
|
8
|
+
- `docs/agents/plans/REL-SEMVER-AUTOPUBLISH/plan.md`
|
|
9
|
+
- `docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/integration.md`
|
|
10
|
+
- `package.json`
|
|
11
|
+
- `pnpm-lock.yaml`
|
|
12
|
+
- `.releaserc.json`
|
|
13
|
+
- `.github/workflows/release.yml`
|
|
14
|
+
|
|
15
|
+
## Structured Findings
|
|
16
|
+
|
|
17
|
+
### 1) [blocker] Lockfile is internally inconsistent for release dependencies
|
|
18
|
+
|
|
19
|
+
**Where:** `pnpm-lock.yaml`
|
|
20
|
+
**What:** `importers.devDependencies` includes `semantic-release` and `@semantic-release/*`, but the lockfile has no corresponding resolved entries in `packages:` for these modules.
|
|
21
|
+
**Why it matters:** This breaks determinism and signals an incomplete lockfile regeneration. CI should fail under strict lockfile mode; current workflow masks this by disabling frozen lockfile.
|
|
22
|
+
|
|
23
|
+
### 2) [major] CI workflow bypasses lockfile integrity
|
|
24
|
+
|
|
25
|
+
**Where:** `.github/workflows/release.yml` (`Install dependencies` step)
|
|
26
|
+
**What:** Uses `pnpm install --no-frozen-lockfile`.
|
|
27
|
+
**Why it matters:** Allows implicit lockfile mutation during release and hides dependency drift, reducing reproducibility and increasing supply-chain risk surface.
|
|
28
|
+
|
|
29
|
+
### 3) [major] Release pipeline and docs are coupled to duplicated dependency-state assumptions
|
|
30
|
+
|
|
31
|
+
**Where:** `plan.md` and `integration.md`
|
|
32
|
+
**What:** Both documents carry overlapping statements about lockfile completeness/state, but only one contains unresolved caveats.
|
|
33
|
+
**Why it matters:** Duplication invites drift; operational readiness can be misread if one doc is updated and the other is not.
|
|
34
|
+
|
|
35
|
+
### 4) [minor] Workflow permissions are broader than strictly required for current config intent
|
|
36
|
+
|
|
37
|
+
**Where:** `.github/workflows/release.yml`
|
|
38
|
+
**What:** Grants `issues: write` and `pull-requests: write` globally.
|
|
39
|
+
**Why it matters:** Principle-of-least-privilege concern. Keep only permissions needed by the enabled behavior of `@semantic-release/github`.
|
|
40
|
+
|
|
41
|
+
### 5) [minor] Toolchain versions in workflow are not pinned for deterministic release infra
|
|
42
|
+
|
|
43
|
+
**Where:** `.github/workflows/release.yml`
|
|
44
|
+
**What:** Uses floating action tags and `node-version: lts/*`.
|
|
45
|
+
**Why it matters:** Reproducibility and auditability are weaker when release infra floats over time.
|
|
46
|
+
|
|
47
|
+
### 6) [nit] Potentially unnecessary artifact commit in release commit-back
|
|
48
|
+
|
|
49
|
+
**Where:** `.releaserc.json` (`@semantic-release/git` assets)
|
|
50
|
+
**What:** Includes `pnpm-lock.yaml` in committed assets.
|
|
51
|
+
**Why it matters:** If no dependency version changes are intended during release, lockfile churn should not happen; including it can create noisy release commits. Keep only if intentionally required by your process.
|
|
52
|
+
|
|
53
|
+
## Simplification / Duplication / Maintainability / Security Summary
|
|
54
|
+
|
|
55
|
+
- **Simplification:** Single source of truth for release readiness should live in one doc (prefer integration handoff), with plan doc treated as design-time baseline.
|
|
56
|
+
- **Duplication:** Lockfile readiness notes are duplicated across plan/handoff narratives.
|
|
57
|
+
- **Maintainability:** Reproducible release behavior requires frozen lockfile and fully regenerated lock state.
|
|
58
|
+
- **Security:** Current install mode and broad permissions are avoidable risk multipliers in a release pipeline.
|
|
59
|
+
|
|
60
|
+
## Explicit Action List (ordered)
|
|
61
|
+
|
|
62
|
+
1. **Regenerate and commit lockfile fully**
|
|
63
|
+
- Run `pnpm install` locally and ensure `pnpm-lock.yaml` has resolved `packages:` entries for `semantic-release` + all configured plugins.
|
|
64
|
+
2. **Enforce deterministic install in release job**
|
|
65
|
+
- Change release workflow install step to `pnpm install --frozen-lockfile`.
|
|
66
|
+
3. **Add a pre-release integrity gate**
|
|
67
|
+
- Optionally add `pnpm install --frozen-lockfile` as a dedicated validation step before `pnpm release` to fail early and clearly.
|
|
68
|
+
4. **Right-size workflow permissions**
|
|
69
|
+
- Keep only required scopes; if PR/issue comments are not needed, remove `issues: write` and `pull-requests: write`.
|
|
70
|
+
5. **Reduce infra drift**
|
|
71
|
+
- Pin Node major (for example `22`) and consider pinning action SHAs for release-critical workflows.
|
|
72
|
+
6. **Document ownership of readiness state**
|
|
73
|
+
- Consolidate lockfile readiness status into one canonical handoff section and reference it from plan docs to avoid drift.
|
|
74
|
+
7. **Re-evaluate git commit assets**
|
|
75
|
+
- Keep `pnpm-lock.yaml` in release commit assets only if lockfile mutations are expected/desired during release operations.
|
|
76
|
+
|
|
77
|
+
## QA Readiness Decision
|
|
78
|
+
|
|
79
|
+
**QA should not proceed yet** (blocked) until Actions 1 and 2 are completed.
|
|
80
|
+
After those are addressed, QA can proceed with end-to-end validation from the integration test scope.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Frontend Handoff — REL-SEMVER-AUTOPUBLISH
|
|
2
|
+
|
|
3
|
+
Date: 2026-02-23
|
|
4
|
+
From: frontend-dev
|
|
5
|
+
To: integration/review
|
|
6
|
+
|
|
7
|
+
## Context / Objective
|
|
8
|
+
|
|
9
|
+
Feature scope is release automation for npm publish and GitHub Actions. No frontend app/UI work is in scope.
|
|
10
|
+
|
|
11
|
+
## What Changed
|
|
12
|
+
|
|
13
|
+
N/A (no frontend code or UI changes required for this feature).
|
|
14
|
+
|
|
15
|
+
## Risks / Assumptions
|
|
16
|
+
|
|
17
|
+
- Assumes release automation remains backend/CI-only.
|
|
18
|
+
- Assumes no docs/UI surfaces are needed to expose release status in this iteration.
|
|
19
|
+
|
|
20
|
+
## Exact Next Action (Integration / Review)
|
|
21
|
+
|
|
22
|
+
Proceed with backend/CI integration review only; frontend sign-off is complete with no implementation changes.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Integration Handoff — REL-SEMVER-AUTOPUBLISH
|
|
2
|
+
|
|
3
|
+
Date: 2026-02-23
|
|
4
|
+
From: planning-agent (integration owner)
|
|
5
|
+
To: code-reviewer / tester
|
|
6
|
+
|
|
7
|
+
## 1) Combined Readiness Note
|
|
8
|
+
|
|
9
|
+
- Frontend readiness: complete with no code changes required for this feature.
|
|
10
|
+
- Backend/CI readiness: MVP implementation is present (`semantic-release` config + release workflow + release dependencies), with one known lockfile integrity follow-up.
|
|
11
|
+
- Integration status: conditionally ready for review/test, pending dependency closure listed below.
|
|
12
|
+
|
|
13
|
+
## 2) Confirmed Review Scope (Code Reviewer)
|
|
14
|
+
|
|
15
|
+
Review only the release automation surface (no frontend scope):
|
|
16
|
+
|
|
17
|
+
- `package.json`
|
|
18
|
+
- `release` script exists and release stack is in `devDependencies`.
|
|
19
|
+
- `pnpm-lock.yaml`
|
|
20
|
+
- lock graph consistency with the newly added release dependencies.
|
|
21
|
+
- `.releaserc.json`
|
|
22
|
+
- branch set to `main`.
|
|
23
|
+
- plugin order and intent:
|
|
24
|
+
1. commit analyzer
|
|
25
|
+
2. release notes generator
|
|
26
|
+
3. changelog (`CHANGELOG.md`)
|
|
27
|
+
4. npm publish
|
|
28
|
+
5. github release
|
|
29
|
+
6. git commit-back of `package.json`, `pnpm-lock.yaml`, `CHANGELOG.md`
|
|
30
|
+
- `.github/workflows/release.yml`
|
|
31
|
+
- trigger on push to `main`.
|
|
32
|
+
- explicit write permissions (`contents`, `issues`, `pull-requests`).
|
|
33
|
+
- env/token wiring (`GITHUB_TOKEN`, `NPM_TOKEN`) and fail-fast check for missing `NPM_TOKEN`.
|
|
34
|
+
- install + release steps are consistent with project package manager usage.
|
|
35
|
+
|
|
36
|
+
## 3) Confirmed Test Scope (Tester)
|
|
37
|
+
|
|
38
|
+
Validate the following behavior end-to-end in CI:
|
|
39
|
+
|
|
40
|
+
- Workflow executes on push to `main`.
|
|
41
|
+
- No-op path succeeds when no semver-relevant commit is present (for example `docs:`).
|
|
42
|
+
- Semver-relevant path (`fix:` / `feat:`) computes next version and performs release artifacts:
|
|
43
|
+
- npm publish,
|
|
44
|
+
- git tag,
|
|
45
|
+
- GitHub release,
|
|
46
|
+
- commit-back updates for `package.json` and `CHANGELOG.md` (and lockfile when changed).
|
|
47
|
+
- Missing or invalid `NPM_TOKEN` fails with explicit/auth-related error signal.
|
|
48
|
+
- Local dependency integrity checks pass after lockfile regeneration:
|
|
49
|
+
1. `pnpm install`
|
|
50
|
+
2. `pnpm install --frozen-lockfile`
|
|
51
|
+
3. `pnpm test`
|
|
52
|
+
|
|
53
|
+
## 4) Explicit Unresolved Dependencies
|
|
54
|
+
|
|
55
|
+
1. **Lockfile resolution completeness**
|
|
56
|
+
- Current state indicates importer devDependency references were added, but full resolved `packages:` entries for `semantic-release` and `@semantic-release/*` still require verification/regeneration.
|
|
57
|
+
- Needed action: regenerate lockfile and confirm frozen-lockfile install passes.
|
|
58
|
+
2. **Repository secret availability**
|
|
59
|
+
- `NPM_TOKEN` must be configured in GitHub repository secrets prior to first release execution.
|
|
60
|
+
3. **Runtime CI validation not yet executed in handoff context**
|
|
61
|
+
- End-to-end GitHub Actions run and actual npm publish flow remain pending tester execution in the target repo environment.
|
|
62
|
+
|
|
63
|
+
## Integration Owner Decision
|
|
64
|
+
|
|
65
|
+
Proceed to code review and tester validation with the above unresolved dependencies tracked as required completion gates before production reliance.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Planning Handoff — REL-SEMVER-AUTOPUBLISH
|
|
2
|
+
|
|
3
|
+
Date: 2026-02-23
|
|
4
|
+
From: planning-agent
|
|
5
|
+
To: implementation agent (`backend-dev` / `cli-dev`)
|
|
6
|
+
|
|
7
|
+
## Objective
|
|
8
|
+
|
|
9
|
+
Implement MVP auto semantic-version publishing for `ai-team` on push to `main` using `semantic-release`, including npm publish, GitHub release/tag, and commit-back of version/changelog artifacts.
|
|
10
|
+
|
|
11
|
+
## Required File Changes
|
|
12
|
+
|
|
13
|
+
- `package.json`
|
|
14
|
+
- `pnpm-lock.yaml`
|
|
15
|
+
- `.releaserc.json` (new)
|
|
16
|
+
- `.github/workflows/release.yml` (new)
|
|
17
|
+
- `CHANGELOG.md` (created/updated by release)
|
|
18
|
+
|
|
19
|
+
## Implementation Notes (MVP)
|
|
20
|
+
|
|
21
|
+
1. Add only required semantic-release stack dependencies and a `release` script.
|
|
22
|
+
2. Configure `.releaserc.json` for branch `main`, standard analyzer/notes plugins, npm publish, GitHub release, and git commit of artifacts.
|
|
23
|
+
3. Use a single workflow triggered on push to `main` with explicit permissions:
|
|
24
|
+
- `contents: write`
|
|
25
|
+
- `issues: write`
|
|
26
|
+
- `pull-requests: write`
|
|
27
|
+
4. Workflow auth/env must use:
|
|
28
|
+
- `GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}`
|
|
29
|
+
- `NPM_TOKEN: ${{ secrets.NPM_TOKEN }}`
|
|
30
|
+
5. Include a clear preflight check for missing `NPM_TOKEN`.
|
|
31
|
+
|
|
32
|
+
## Execution Checklist
|
|
33
|
+
|
|
34
|
+
- [ ] Update `package.json` with release dependencies + `release` script.
|
|
35
|
+
- [ ] Update `pnpm-lock.yaml` via install.
|
|
36
|
+
- [ ] Add `.releaserc.json` with plugin order and git assets (`package.json`, `pnpm-lock.yaml`, `CHANGELOG.md`).
|
|
37
|
+
- [ ] Add `.github/workflows/release.yml` with push-to-main trigger, permissions, setup/install, and `pnpm release`.
|
|
38
|
+
- [ ] Ensure repo secret `NPM_TOKEN` exists.
|
|
39
|
+
- [ ] Validate no-op behavior with non-release commit.
|
|
40
|
+
- [ ] Validate publish behavior with `fix:` or `feat:` commit.
|
|
41
|
+
|
|
42
|
+
## Acceptance Mapping
|
|
43
|
+
|
|
44
|
+
- AC1 (workflow on main push): workflow trigger in `.github/workflows/release.yml`.
|
|
45
|
+
- AC2 (no-op success): semantic-release exits successfully when no relevant commits.
|
|
46
|
+
- AC3 (publish + tag + GitHub release + commit-back): `.releaserc.json` plugins + workflow auth.
|
|
47
|
+
- AC4 (missing/invalid token fails clearly): workflow preflight + semantic-release logs.
|
|
48
|
+
- AC5 (no manual bump): commit-message-driven versioning only.
|
|
49
|
+
|
|
50
|
+
## Failure / Rollback
|
|
51
|
+
|
|
52
|
+
- If config breaks CI, revert `.releaserc.json` and `.github/workflows/release.yml` in one commit.
|
|
53
|
+
- If release artifacts are incorrect, revert release commit/tag and ship corrective follow-up version.
|
|
54
|
+
- If npm auth fails, rotate `NPM_TOKEN` and rerun workflow.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Closeout Note (2026-02-23)
|
|
59
|
+
|
|
60
|
+
- **Status:** Blocked (not complete).
|
|
61
|
+
- **Driver:** QA decision is **BLOCKED / NOT APPROVED** pending lockfile integrity closure and runtime CI release-path validation.
|
|
62
|
+
- **Required next actions:**
|
|
63
|
+
1. Regenerate + commit `pnpm-lock.yaml` and verify semantic-release packages are fully resolved.
|
|
64
|
+
2. Update release workflow install step to `pnpm install --frozen-lockfile`.
|
|
65
|
+
3. Re-run CI acceptance on `main` for `docs:` no-op and `fix:`/`feat:` publish behavior.
|
|
66
|
+
4. Confirm `NPM_TOKEN` secret and validate missing/invalid token failure paths.
|
|
67
|
+
- **Closeout gate:** Feature remains open until tester returns APPROVED.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# QA Report — REL-SEMVER-AUTOPUBLISH
|
|
2
|
+
|
|
3
|
+
Date: 2026-02-23
|
|
4
|
+
Agent: tester
|
|
5
|
+
|
|
6
|
+
## Inputs Reviewed
|
|
7
|
+
|
|
8
|
+
- docs/agents/plans/REL-SEMVER-AUTOPUBLISH/plan.md
|
|
9
|
+
- docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/integration.md
|
|
10
|
+
- docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/code-review.md
|
|
11
|
+
- docs/agents/handoffs/REL-SEMVER-AUTOPUBLISH/backend.md
|
|
12
|
+
- package.json
|
|
13
|
+
- .releaserc.json
|
|
14
|
+
- .github/workflows/release.yml
|
|
15
|
+
- pnpm-lock.yaml
|
|
16
|
+
|
|
17
|
+
## Verification Performed (Current Environment)
|
|
18
|
+
|
|
19
|
+
- Static verification of release config, workflow trigger/permissions/token checks, and dependency declarations.
|
|
20
|
+
- Lockfile integrity inspection for semantic-release package resolution entries.
|
|
21
|
+
- Workspace diagnostics check (`get_errors`) returned no editor-detected errors.
|
|
22
|
+
|
|
23
|
+
## Acceptance Check Results
|
|
24
|
+
|
|
25
|
+
1. **Workflow runs on push to `main`**
|
|
26
|
+
**Status:** BLOCKED (not executable in current environment)
|
|
27
|
+
**Evidence:** Workflow exists with `on.push.branches: [main]` in `.github/workflows/release.yml`, but no GitHub Actions execution capability is available in this session.
|
|
28
|
+
|
|
29
|
+
2. **No-op release succeeds when no semver-relevant commits**
|
|
30
|
+
**Status:** BLOCKED
|
|
31
|
+
**Evidence:** Requires an actual push (for example `docs:`) and observing workflow result; cannot be executed from this environment.
|
|
32
|
+
|
|
33
|
+
3. **Semver-relevant commits publish and create artifacts (npm/tag/GitHub release/commit-back)**
|
|
34
|
+
**Status:** BLOCKED
|
|
35
|
+
**Evidence:** Requires live GitHub Actions + npm publish credentials and repository access. Not executable here.
|
|
36
|
+
|
|
37
|
+
4. **Missing/invalid `NPM_TOKEN` fails clearly**
|
|
38
|
+
**Status:** PARTIAL PASS (missing-token path), BLOCKED (invalid-token path)
|
|
39
|
+
**Evidence:** `.github/workflows/release.yml` includes an explicit preflight that exits with a clear error when `NPM_TOKEN` is empty. Invalid token behavior still requires runtime execution to verify auth failure path.
|
|
40
|
+
|
|
41
|
+
5. **No manual version bump required**
|
|
42
|
+
**Status:** PARTIAL PASS (static), BLOCKED (runtime confirmation)
|
|
43
|
+
**Evidence:** `package.json` has `"release": "semantic-release"`; `.releaserc.json` is configured for semantic-release branch/plugin flow. End-to-end confirmation requires a real `fix:`/`feat:` release run.
|
|
44
|
+
|
|
45
|
+
## Additional QA Gate Checks from Integration Handoff
|
|
46
|
+
|
|
47
|
+
1. `pnpm install`
|
|
48
|
+
**Status:** BLOCKED (command execution unavailable in this session)
|
|
49
|
+
2. `pnpm install --frozen-lockfile`
|
|
50
|
+
**Status:** BLOCKED (command execution unavailable in this session)
|
|
51
|
+
3. `pnpm test`
|
|
52
|
+
**Status:** BLOCKED (command execution unavailable in this session)
|
|
53
|
+
|
|
54
|
+
Static evidence indicates lockfile/workflow readiness is not yet production-safe:
|
|
55
|
+
|
|
56
|
+
- `pnpm-lock.yaml` importer references include `semantic-release` and `@semantic-release/*`, but resolved `packages:` entries for those release modules are not present.
|
|
57
|
+
- `.github/workflows/release.yml` currently installs with `pnpm install --no-frozen-lockfile`, which bypasses lockfile integrity.
|
|
58
|
+
|
|
59
|
+
## Blockers and Exact Steps to Complete QA
|
|
60
|
+
|
|
61
|
+
### Blockers
|
|
62
|
+
|
|
63
|
+
1. No GitHub Actions execution / push capability in this environment.
|
|
64
|
+
2. No npm publish/token validation path in this environment.
|
|
65
|
+
3. No package-manager command execution available in-session for local integrity checks.
|
|
66
|
+
4. Dependency lockfile state not fully regenerated for release stack; workflow currently avoids frozen lockfile.
|
|
67
|
+
|
|
68
|
+
### Exact Completion Steps
|
|
69
|
+
|
|
70
|
+
1. Regenerate lockfile in a shell with repo write access:
|
|
71
|
+
- `pnpm install`
|
|
72
|
+
2. Validate deterministic install and tests:
|
|
73
|
+
- `pnpm install --frozen-lockfile`
|
|
74
|
+
- `pnpm test`
|
|
75
|
+
3. Commit regenerated `pnpm-lock.yaml`.
|
|
76
|
+
4. Update workflow install step in `.github/workflows/release.yml` to:
|
|
77
|
+
- `pnpm install --frozen-lockfile`
|
|
78
|
+
5. In GitHub repository settings, ensure `NPM_TOKEN` exists and has publish scope.
|
|
79
|
+
6. Execute CI acceptance runs on `main`:
|
|
80
|
+
- Push `docs:` commit and confirm successful no-op release.
|
|
81
|
+
- Push `fix:` commit and confirm npm publish, tag `vX.Y.Z`, GitHub release, and commit-back updates.
|
|
82
|
+
- Validate missing-token and invalid-token failure paths in a safe test repo/context.
|
|
83
|
+
|
|
84
|
+
## Final QA Decision
|
|
85
|
+
|
|
86
|
+
**Decision: BLOCKED / NOT APPROVED**
|
|
87
|
+
Reason: Core acceptance checks requiring CI runtime and publish flow are not executable in this environment, and pre-runtime dependency integrity gates (lockfile completeness + frozen lockfile install path) are not yet satisfied.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Requirement Analysis — REL-SEMVER-AUTOPUBLISH
|
|
2
|
+
|
|
3
|
+
Date: 2026-02-23
|
|
4
|
+
Agent: requirement-analyst
|
|
5
|
+
|
|
6
|
+
## User Ask (normalized)
|
|
7
|
+
|
|
8
|
+
Enable semantic versioning and a GitHub pipeline so that every push to `main` automatically determines the next version, bumps the package version, and publishes the new version of `ai-team` to npm.
|
|
9
|
+
|
|
10
|
+
## MVP Scope
|
|
11
|
+
|
|
12
|
+
1. Add one release workflow in `.github/workflows/` triggered on push to `main`.
|
|
13
|
+
2. Use semantic versioning automation (MVP choice: `semantic-release` + npm + git/github plugins).
|
|
14
|
+
3. Publish `ai-team` to npm when a release is produced.
|
|
15
|
+
4. Commit version/changelog updates back to `main` as part of release automation.
|
|
16
|
+
|
|
17
|
+
## Out of Scope (for this feature)
|
|
18
|
+
|
|
19
|
+
- Multi-branch release channels (`beta`, `next`, etc.).
|
|
20
|
+
- Monorepo/workspace package release orchestration.
|
|
21
|
+
- Container/image publishing.
|
|
22
|
+
- Custom changelog formatting beyond default plugin templates.
|
|
23
|
+
|
|
24
|
+
## Assumptions
|
|
25
|
+
|
|
26
|
+
1. `main` is the only release branch.
|
|
27
|
+
2. Commit messages will follow Conventional Commits for deterministic semver bumps:
|
|
28
|
+
- `fix:` => patch
|
|
29
|
+
- `feat:` => minor
|
|
30
|
+
- `BREAKING CHANGE:` / `!` => major
|
|
31
|
+
3. npm package `ai-team` already exists and is intended to remain public (`publishConfig.access=public`).
|
|
32
|
+
4. Repository administrators can add required GitHub Actions permissions and repository secrets.
|
|
33
|
+
|
|
34
|
+
## Required Secrets & Permissions
|
|
35
|
+
|
|
36
|
+
### GitHub Repository Secrets
|
|
37
|
+
|
|
38
|
+
- `NPM_TOKEN`: npm automation token with publish access to `ai-team`.
|
|
39
|
+
|
|
40
|
+
### Workflow Permissions
|
|
41
|
+
|
|
42
|
+
Release workflow job must grant:
|
|
43
|
+
|
|
44
|
+
- `contents: write` (commit/tag/release notes/version artifacts)
|
|
45
|
+
- `issues: write` and `pull-requests: write` (if release tool comments/updates PR metadata)
|
|
46
|
+
|
|
47
|
+
### Optional/Conditional
|
|
48
|
+
|
|
49
|
+
- `GH_TOKEN` is usually provided via `${{ secrets.GITHUB_TOKEN }}`; no extra secret needed unless org policy requires PAT.
|
|
50
|
+
|
|
51
|
+
## Acceptance Criteria (implementable)
|
|
52
|
+
|
|
53
|
+
1. On every push to `main`, GitHub Actions runs a release workflow.
|
|
54
|
+
2. If commits since last release contain no semver-relevant changes, workflow exits successfully without publishing.
|
|
55
|
+
3. If commits include semver-relevant changes:
|
|
56
|
+
- next semver version is computed from commit history,
|
|
57
|
+
- npm package `ai-team` is published,
|
|
58
|
+
- release tag (e.g. `v1.0.3`) and GitHub release are created,
|
|
59
|
+
- `package.json` version and changelog artifacts are committed back to `main`.
|
|
60
|
+
4. Workflow fails with clear logs when `NPM_TOKEN` is missing/invalid.
|
|
61
|
+
5. No manual version bump step is required from developers for normal releases.
|
|
62
|
+
|
|
63
|
+
## Constraints for Planning/Implementation
|
|
64
|
+
|
|
65
|
+
- Keep implementation minimal: one workflow file, minimal release config, only required dev dependencies/plugins.
|
|
66
|
+
- Do not add unrelated CI jobs or quality gates in this feature.
|
|
67
|
+
- Preserve current package metadata and existing scripts unless strictly needed for release automation.
|
|
68
|
+
|
|
69
|
+
## Exact Next Action for Planning Agent
|
|
70
|
+
|
|
71
|
+
Create `docs/agents/plans/REL-SEMVER-AUTOPUBLISH/plan.md` with a step-by-step implementation plan that includes:
|
|
72
|
+
|
|
73
|
+
1. Adding `semantic-release` and required plugins (`@semantic-release/commit-analyzer`, `@semantic-release/release-notes-generator`, `@semantic-release/changelog`, `@semantic-release/npm`, `@semantic-release/git`, `@semantic-release/github`).
|
|
74
|
+
2. Defining semantic-release config (release branch `main`, changelog + package version commit strategy).
|
|
75
|
+
3. Creating `.github/workflows/release.yml` for push-to-main execution with required permissions and npm auth.
|
|
76
|
+
4. Validation steps (dry-run where possible, then real run criteria) and rollback/failure handling notes.
|
|
77
|
+
5. Explicit checklist mapping each implementation step back to acceptance criteria above.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Backend Dev Knowledge
|
|
2
|
+
|
|
3
|
+
## 2026-02-23 — REL-SEMVER-AUTOPUBLISH
|
|
4
|
+
|
|
5
|
+
- Keep semantic-release MVP minimal: one `.releaserc.json` and one `push`-to-`main` workflow.
|
|
6
|
+
- Include explicit workflow permissions and a preflight `NPM_TOKEN` check to fail fast with clear logs.
|
|
7
|
+
- Include lockfile in git plugin assets so release commit-back stays deterministic for package metadata updates.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# code-reviewer knowledge
|
|
2
|
+
|
|
3
|
+
## 2026-02-23 — REL-SEMVER-AUTOPUBLISH
|
|
4
|
+
|
|
5
|
+
- Treat lockfile importer-only dependency additions as a blocker when `packages:` resolutions are missing; this is incomplete dependency state, not a cosmetic diff.
|
|
6
|
+
- Flag any release workflow use of `--no-frozen-lockfile` as a reproducibility/security risk unless explicitly justified for non-release jobs.
|
|
7
|
+
- For release features, always verify least-privilege workflow permissions and call out duplicated readiness statements across plan and integration docs to reduce drift.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Planning Agent Knowledge
|
|
2
|
+
|
|
3
|
+
## 2026-02-23 — REL-SEMVER-AUTOPUBLISH
|
|
4
|
+
|
|
5
|
+
- For semver autopublish MVPs, keep to one workflow (`push` on `main`) plus one `.releaserc.json`; avoid extra channels/gates.
|
|
6
|
+
- Always include git plugin assets explicitly (`package.json`, lockfile, `CHANGELOG.md`) to satisfy commit-back acceptance criteria.
|
|
7
|
+
- Add explicit token preflight in workflow to make missing `NPM_TOKEN` failures obvious and fast to diagnose.
|
|
8
|
+
|
|
9
|
+
## 2026-02-23 — Integration Handoff Practice
|
|
10
|
+
|
|
11
|
+
- Integration handoff should always consolidate frontend/backend readiness into one explicit go/no-go note.
|
|
12
|
+
- Confirm review scope and test scope as concrete file/behavior checklists, not generic guidance.
|
|
13
|
+
- Always include a dedicated unresolved dependencies list so blockers (for example secrets, lockfile integrity, runtime CI validation) are tracked to closure.
|
|
14
|
+
|
|
15
|
+
## 2026-02-23 — Closeout Discipline
|
|
16
|
+
|
|
17
|
+
- In closeout updates, feature status must mirror QA disposition exactly; if QA is blocked, plan/handoff status must remain blocked.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Requirement Analyst Knowledge
|
|
2
|
+
|
|
3
|
+
## 2026-02-23 — REL-SEMVER-AUTOPUBLISH
|
|
4
|
+
|
|
5
|
+
- For "auto bump + publish on main" asks, define MVP as a single push-to-main release workflow using semantic-release and Conventional Commits.
|
|
6
|
+
- Always capture required operational prerequisites explicitly: `NPM_TOKEN` secret and workflow write permissions (`contents` at minimum).
|
|
7
|
+
- Acceptance criteria must include both publish and no-op behavior so teams can verify deterministic release outcomes.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Tester Knowledge
|
|
2
|
+
|
|
3
|
+
## 2026-02-23
|
|
4
|
+
|
|
5
|
+
- For release automation features, separate static-confidence checks (workflow/config correctness) from runtime-proof checks (GitHub Actions execution, publish, tags, releases) and report them independently.
|
|
6
|
+
- Treat lockfile completeness + frozen-lockfile install as mandatory preconditions before declaring QA ready on CI release pipelines.
|
|
7
|
+
- When environment tooling cannot execute package-manager or CI actions, include exact completion commands and the minimum external validations needed to close QA.
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Implementation Plan — REL-SEMVER-AUTOPUBLISH
|
|
2
|
+
|
|
3
|
+
Date: 2026-02-23
|
|
4
|
+
Agent: planning-agent
|
|
5
|
+
|
|
6
|
+
## Scope (MVP)
|
|
7
|
+
|
|
8
|
+
Implement minimal semantic version auto-publish for `ai-team` on pushes to `main` using `semantic-release`, with changelog + package version committed back to `main`.
|
|
9
|
+
|
|
10
|
+
## Exact Files to Change (implementation phase)
|
|
11
|
+
|
|
12
|
+
1. `package.json`
|
|
13
|
+
- Add release stack devDependencies.
|
|
14
|
+
- Add a release script (`"release": "semantic-release"`) for local/CI consistency.
|
|
15
|
+
2. `pnpm-lock.yaml`
|
|
16
|
+
- Lockfile update from added devDependencies.
|
|
17
|
+
3. `.releaserc.json` (new)
|
|
18
|
+
- Define `main` as release branch.
|
|
19
|
+
- Configure semantic-release plugins and plugin order.
|
|
20
|
+
4. `.github/workflows/release.yml` (new)
|
|
21
|
+
- Push-to-main release workflow with explicit permissions and npm auth.
|
|
22
|
+
5. `CHANGELOG.md` (new/managed by release process)
|
|
23
|
+
- Created/updated automatically by `@semantic-release/changelog`.
|
|
24
|
+
|
|
25
|
+
## Dependency Additions (semantic-release stack)
|
|
26
|
+
|
|
27
|
+
Add to `devDependencies` in `package.json`:
|
|
28
|
+
|
|
29
|
+
- `semantic-release`
|
|
30
|
+
- `@semantic-release/commit-analyzer`
|
|
31
|
+
- `@semantic-release/release-notes-generator`
|
|
32
|
+
- `@semantic-release/changelog`
|
|
33
|
+
- `@semantic-release/npm`
|
|
34
|
+
- `@semantic-release/git`
|
|
35
|
+
- `@semantic-release/github`
|
|
36
|
+
|
|
37
|
+
No additional runtime dependencies.
|
|
38
|
+
|
|
39
|
+
## Semantic-Release Config Approach
|
|
40
|
+
|
|
41
|
+
Use one repo-root config file: `.releaserc.json`.
|
|
42
|
+
|
|
43
|
+
Proposed MVP config:
|
|
44
|
+
|
|
45
|
+
- `branches`: `["main"]`
|
|
46
|
+
- `tagFormat`: `"v${version}"`
|
|
47
|
+
- `plugins` in this order:
|
|
48
|
+
1. `@semantic-release/commit-analyzer`
|
|
49
|
+
2. `@semantic-release/release-notes-generator`
|
|
50
|
+
3. `@semantic-release/changelog` with `changelogFile: "CHANGELOG.md"`
|
|
51
|
+
4. `@semantic-release/npm` with `npmPublish: true`
|
|
52
|
+
5. `@semantic-release/github`
|
|
53
|
+
6. `@semantic-release/git` with assets:
|
|
54
|
+
- `package.json`
|
|
55
|
+
- `pnpm-lock.yaml`
|
|
56
|
+
- `CHANGELOG.md`
|
|
57
|
+
and message pattern:
|
|
58
|
+
- `chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}`
|
|
59
|
+
|
|
60
|
+
Why this approach (minimal):
|
|
61
|
+
|
|
62
|
+
- Single declarative config file.
|
|
63
|
+
- Keeps release behavior explicit and reproducible.
|
|
64
|
+
- Ensures changelog/version updates are committed after publish.
|
|
65
|
+
|
|
66
|
+
## GitHub Actions Workflow Details
|
|
67
|
+
|
|
68
|
+
Workflow file: `.github/workflows/release.yml`
|
|
69
|
+
|
|
70
|
+
Trigger:
|
|
71
|
+
|
|
72
|
+
- `on.push.branches: [main]`
|
|
73
|
+
|
|
74
|
+
Job permissions (explicit):
|
|
75
|
+
|
|
76
|
+
- `contents: write` (tags + release commit + GitHub release)
|
|
77
|
+
- `issues: write` (plugin capability)
|
|
78
|
+
- `pull-requests: write` (plugin capability)
|
|
79
|
+
|
|
80
|
+
Auth and environment:
|
|
81
|
+
|
|
82
|
+
- `GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}`
|
|
83
|
+
- `NPM_TOKEN: ${{ secrets.NPM_TOKEN }}`
|
|
84
|
+
- Add preflight step: fail fast if `NPM_TOKEN` missing.
|
|
85
|
+
- Node setup with npm registry URL and pnpm install using lockfile (`pnpm install --frozen-lockfile`).
|
|
86
|
+
|
|
87
|
+
Minimal job steps:
|
|
88
|
+
|
|
89
|
+
1. `actions/checkout` with full history (`fetch-depth: 0`)
|
|
90
|
+
2. `pnpm/action-setup`
|
|
91
|
+
3. `actions/setup-node` (Node LTS + npm registry)
|
|
92
|
+
4. Install deps (`pnpm install --frozen-lockfile`)
|
|
93
|
+
5. Run release (`pnpm release`)
|
|
94
|
+
|
|
95
|
+
## Step-by-Step Execution Checklist
|
|
96
|
+
|
|
97
|
+
1. Add release dependencies and script in `package.json`.
|
|
98
|
+
2. Install deps to update `pnpm-lock.yaml`.
|
|
99
|
+
3. Add `.releaserc.json` with branch/plugins configuration.
|
|
100
|
+
4. Add `.github/workflows/release.yml` with trigger/permissions/auth.
|
|
101
|
+
5. Confirm repository secret `NPM_TOKEN` is configured.
|
|
102
|
+
6. Merge to `main` with a Conventional Commit (`feat:` or `fix:`) to validate end-to-end.
|
|
103
|
+
|
|
104
|
+
## Acceptance Checks Mapped to Requirement Criteria
|
|
105
|
+
|
|
106
|
+
1. **Workflow runs on push to main**
|
|
107
|
+
- Check Actions tab shows `release` workflow for a `main` push.
|
|
108
|
+
2. **No-op release succeeds when no semver-relevant commits**
|
|
109
|
+
- Push commit such as `docs: ...`; verify workflow exits success with "no release" behavior.
|
|
110
|
+
3. **Semver-relevant commits publish and create release artifacts**
|
|
111
|
+
- Push `fix:` and verify:
|
|
112
|
+
- computed next version,
|
|
113
|
+
- npm package published,
|
|
114
|
+
- git tag `vX.Y.Z` exists,
|
|
115
|
+
- GitHub release created,
|
|
116
|
+
- commit back to `main` includes `package.json` + `CHANGELOG.md` (+ lockfile if updated).
|
|
117
|
+
4. **Missing/invalid NPM_TOKEN fails clearly**
|
|
118
|
+
- Temporarily remove/rotate invalid secret in test repo; verify release job fails with explicit auth/preflight error.
|
|
119
|
+
5. **No manual version bump required**
|
|
120
|
+
- Verify release succeeds from commit messages only without editing `version` manually.
|
|
121
|
+
|
|
122
|
+
## Rollback / Failure Notes
|
|
123
|
+
|
|
124
|
+
1. If publish fails before git commit step:
|
|
125
|
+
- Fix token/permissions and rerun workflow; no repo file rollback needed.
|
|
126
|
+
2. If git release commit is undesirable:
|
|
127
|
+
- Revert release commit on `main` and delete erroneous tag/release in GitHub.
|
|
128
|
+
3. If wrong version was published to npm:
|
|
129
|
+
- Do **not** unpublish stable versions broadly; publish a corrective next version and document in changelog.
|
|
130
|
+
4. If semantic-release config causes repeated failures:
|
|
131
|
+
- Revert `.releaserc.json` and `.github/workflows/release.yml` via a single rollback commit to restore previous non-automated state.
|
|
132
|
+
|
|
133
|
+
## Out-of-Scope Guardrails
|
|
134
|
+
|
|
135
|
+
- No multi-branch channels.
|
|
136
|
+
- No monorepo/workspace release orchestration.
|
|
137
|
+
- No extra CI jobs/quality gates added in this feature.
|
|
138
|
+
|
|
139
|
+
## Closeout Status (2026-02-23)
|
|
140
|
+
|
|
141
|
+
- **Current state:** **Blocked (QA not approved)**.
|
|
142
|
+
- **Why blocked:** QA handoff reports end-to-end acceptance is blocked by unresolved lockfile integrity and unavailable runtime CI/publish validation in current environment.
|
|
143
|
+
- **Completion criteria to close feature:**
|
|
144
|
+
1. Regenerate and commit `pnpm-lock.yaml` with full semantic-release dependency resolution.
|
|
145
|
+
2. Enforce deterministic install in `.github/workflows/release.yml` using `pnpm install --frozen-lockfile`.
|
|
146
|
+
3. Execute CI validation on `main` for no-op (`docs:`) and release (`fix:`/`feat:`) paths.
|
|
147
|
+
4. Verify `NPM_TOKEN` secret presence and confirm missing/invalid token failure behavior.
|
|
148
|
+
- **Planning decision:** Do not mark feature complete until QA re-runs and returns APPROVED.
|
package/docs/cli.md
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
- `ai-team update` — apply bundled template updates with drift protection
|
|
9
9
|
- `ai-team plan` (or `diff`) — dry-run preview
|
|
10
10
|
- `ai-team doctor` — validate manifest health and local drift
|
|
11
|
+
- `ai-team version` (or `--version`) — print installed CLI version
|
|
11
12
|
|
|
12
13
|
## Runtime Profile
|
|
13
14
|
|
package/package.json
CHANGED
|
@@ -1,29 +1,38 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-team",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "AI agent team management CLI tool",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/cli.js",
|
|
7
7
|
"bin": {
|
|
8
8
|
"ai-team": "src/cli.js"
|
|
9
9
|
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"test": "node --test",
|
|
12
|
+
"ai-team": "node ./src/cli.js",
|
|
13
|
+
"release": "semantic-release"
|
|
14
|
+
},
|
|
10
15
|
"keywords": [],
|
|
11
16
|
"author": "",
|
|
12
17
|
"license": "ISC",
|
|
13
18
|
"publishConfig": {
|
|
14
19
|
"access": "public"
|
|
15
20
|
},
|
|
21
|
+
"packageManager": "pnpm@10.28.1",
|
|
16
22
|
"dependencies": {
|
|
17
|
-
"@inquirer/prompts": "^8.
|
|
23
|
+
"@inquirer/prompts": "^8.3.0",
|
|
18
24
|
"chalk": "^5.6.2",
|
|
19
25
|
"ora": "^9.3.0",
|
|
20
|
-
"yaml": "^2.8.
|
|
26
|
+
"yaml": "^2.8.2"
|
|
21
27
|
},
|
|
22
28
|
"devDependencies": {
|
|
23
|
-
"
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
"
|
|
29
|
+
"@semantic-release/changelog": "^6.0.3",
|
|
30
|
+
"@semantic-release/commit-analyzer": "^13.0.1",
|
|
31
|
+
"@semantic-release/git": "^10.0.1",
|
|
32
|
+
"@semantic-release/github": "^11.0.6",
|
|
33
|
+
"@semantic-release/npm": "^13.1.4",
|
|
34
|
+
"@semantic-release/release-notes-generator": "^14.1.0",
|
|
35
|
+
"mustache": "^4.2.0",
|
|
36
|
+
"semantic-release": "^25.0.3"
|
|
28
37
|
}
|
|
29
|
-
}
|
|
38
|
+
}
|
package/src/cli.js
CHANGED
|
@@ -19,8 +19,10 @@ Commands:
|
|
|
19
19
|
plan Dry-run preview of changes
|
|
20
20
|
diff Alias of plan
|
|
21
21
|
doctor Validate install health and report drift
|
|
22
|
+
version Print installed CLI version
|
|
22
23
|
|
|
23
24
|
Options:
|
|
25
|
+
-v, --version Print installed CLI version
|
|
24
26
|
--ide <vscode|claude-code>
|
|
25
27
|
--team <web-product>
|
|
26
28
|
--target <path> Default: current directory
|
|
@@ -33,6 +35,12 @@ Options:
|
|
|
33
35
|
`);
|
|
34
36
|
}
|
|
35
37
|
|
|
38
|
+
async function printVersion() {
|
|
39
|
+
const packageJsonPath = new URL("../package.json", import.meta.url);
|
|
40
|
+
const packageJson = JSON.parse(await fs.readFile(packageJsonPath, "utf8"));
|
|
41
|
+
console.log(packageJson.version);
|
|
42
|
+
}
|
|
43
|
+
|
|
36
44
|
function createSpinner(values, text) {
|
|
37
45
|
const canUseSpinner = !values.json && process.stdout.isTTY;
|
|
38
46
|
return ora({ text, isEnabled: canUseSpinner }).start();
|
|
@@ -272,6 +280,11 @@ function asJson(values, payload) {
|
|
|
272
280
|
|
|
273
281
|
async function run() {
|
|
274
282
|
const [, , commandArg] = process.argv;
|
|
283
|
+
if (["version", "--version", "-v"].includes(commandArg)) {
|
|
284
|
+
await printVersion();
|
|
285
|
+
process.exit(0);
|
|
286
|
+
}
|
|
287
|
+
|
|
275
288
|
const command = commandArg === "diff" ? "plan" : commandArg;
|
|
276
289
|
|
|
277
290
|
if (!command || ["-h", "--help", "help"].includes(command)) {
|
|
@@ -61,3 +61,18 @@ test("cli init and doctor succeed in temp repo", async () => {
|
|
|
61
61
|
assert.equal(doctorResult.code, 0, doctorResult.stderr);
|
|
62
62
|
assert.match(doctorResult.stdout, /Doctor: OK/);
|
|
63
63
|
});
|
|
64
|
+
|
|
65
|
+
test("cli prints package version", async () => {
|
|
66
|
+
const workspaceRoot = path.resolve(process.cwd());
|
|
67
|
+
const packageJson = JSON.parse(
|
|
68
|
+
await fs.readFile(path.join(workspaceRoot, "package.json"), "utf8"),
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
const versionResult = await runCli(["version"], workspaceRoot);
|
|
72
|
+
assert.equal(versionResult.code, 0, versionResult.stderr);
|
|
73
|
+
assert.equal(versionResult.stdout.trim(), packageJson.version);
|
|
74
|
+
|
|
75
|
+
const flagResult = await runCli(["--version"], workspaceRoot);
|
|
76
|
+
assert.equal(flagResult.code, 0, flagResult.stderr);
|
|
77
|
+
assert.equal(flagResult.stdout.trim(), packageJson.version);
|
|
78
|
+
});
|