aios-core
Version:
Synkra AIOS: AI-Orchestrated System for Full Stack Development - Core Framework
258 lines (194 loc) • 6.47 kB
Markdown
id: publish-npm
name: npm Publishing Pipeline (Preview to Latest)
agent: devops
category: release
complexity: high
tools:
- github-cli
- git
checklists:
- release-checklist.md
# npm Publishing Pipeline: Preview to Latest
## Purpose
Safe, validated npm publishing using a two-phase release strategy:
1. **Preview**: Publish to `preview` dist-tag for testing
2. **Promote**: After validation, promote `preview` to `latest`
This prevents broken releases reaching users (like v4.0.0-v4.0.4 incident).
## Commands
### `*publish-preview` - Publish as Preview
Publishes a new version to npm under the `preview` dist-tag.
#### Workflow
```
1. PRE-FLIGHT CHECKS
- Verify: branch = main, working tree clean
- Verify: git is up-to-date with remote (git fetch + compare)
2. QUALITY GATES
- npm run lint
- npm run typecheck
- npm test
3. PACKAGE VALIDATION
- npm run validate:package
(runs scripts/validate-package-completeness.js)
- Confirms: hooks, rules, bin, core config present
- Confirms: pro/ NOT in tarball
4. VERSION BUMP
- Ask user: patch | minor | major
- npm version {type} --no-git-tag-version
- git add package.json package-lock.json
- git commit -m "chore(release): bump version to {new_version}"
5. PUBLISH
- npm publish --tag preview
- Verify: npm view aios-core@preview version === {new_version}
6. SMOKE TEST
- Create temp directory
- npm init -y
- npm install aios-core@preview
- Verify critical files exist in node_modules/aios-core/:
- .claude/hooks/synapse-engine.cjs
- .aios-core/core-config.yaml
- bin/aios.js
- Clean up temp directory
7. PUSH VERSION COMMIT
- git push origin main
8. REPORT
- "v{X.Y.Z} published as preview"
- "Test with: npm install aios-core@preview"
- "When ready: *promote-latest"
```
#### Pre-conditions
- [ ] On `main` branch
- [ ] Working tree clean (no uncommitted changes)
- [ ] All quality gates pass (lint, typecheck, test)
- [ ] Package validation passes (validate-package-completeness.js)
- [ ] npm auth configured (`npm whoami` succeeds)
#### Post-conditions
- [ ] New version published to npm with `preview` tag
- [ ] `npm view aios-core@preview` returns new version
- [ ] Smoke test passes (critical files present in installed package)
- [ ] Version bump committed and pushed to main
### `*promote-latest` - Promote Preview to Latest
Promotes a tested `preview` version to the `latest` dist-tag.
#### Workflow
```
1. VERIFY PREVIEW EXISTS
- npm view aios-core@preview version
- If no preview: HALT with "No preview version found"
2. CONFIRM WITH USER
- Display: "Promote v{X.Y.Z} from preview to latest?"
- Show current latest: npm view aios-core@latest version
- Require explicit confirmation
3. PROMOTE
- npm dist-tag add aios-core@{version} latest
4. VERIFY
- npm view aios-core@latest version === {version}
- If mismatch: HALT with error
5. TAG & RELEASE
- git tag v{version}
- git push origin v{version}
- gh release create v{version} --generate-notes --latest
6. REPORT
- "v{X.Y.Z} promoted to latest"
- Release URL
- "Install with: npm install aios-core"
```
#### Pre-conditions
- [ ] Preview version exists (`npm view aios-core@preview`)
- [ ] User has tested the preview version
- [ ] npm auth configured
- [ ] GitHub CLI authenticated (`gh auth status`)
#### Post-conditions
- [ ] `npm view aios-core@latest` returns promoted version
- [ ] Git tag `v{version}` created and pushed
- [ ] GitHub Release created with auto-generated notes
### `*test-install` - Test Installation in Clean Environment
Tests package installation from a specific dist-tag in a clean temporary directory.
#### Workflow
```
1. SETUP
- Create temporary directory
- npm init -y
2. INSTALL
- npm install aios-core@{tag} (default: latest)
- Record: install time, exit code, warnings
3. VERIFY FILES
- Check node_modules/aios-core/ contains:
- .aios-core/core-config.yaml
- .aios-core/constitution.md
- .aios-core/development/agents/ (non-empty)
- .aios-core/development/tasks/ (non-empty)
- .claude/hooks/synapse-engine.cjs
- .claude/hooks/precompact-session-digest.cjs
- .claude/rules/ (non-empty)
- bin/aios.js
- bin/aios-minimal.js
- Check node_modules/aios-core/ does NOT contain:
- pro/
- .env
- .git/
- tests/
4. TEST INSTALLER (optional, if --full flag)
- npx aios-core install --preset minimal
- Verify: .aios-core/ created
- Verify: .claude/hooks/ created
- Verify: .claude/rules/ created
5. CLEANUP
- Remove temporary directory
6. REPORT
- Package version installed
- All critical files: present/missing
- Excluded content: clean/leaked
- Overall: PASS/FAIL
```
#### Parameters
- `tag`: dist-tag to test (default: `latest`)
- `--full`: Also test `npx aios-core install`
## Rollback Procedure
If a broken version reaches `latest`:
```bash
# 1. Identify previous good version
npm view aios-core versions --json
# 2. Point latest back to previous version
npm dist-tag add aios-core@{previous-good-version} latest
# 3. Deprecate broken version with message
npm deprecate aios-core@{broken-version} "Known issues, use v{previous-good-version}"
# 4. Verify
npm view aios-core@latest version
```
**Important:** `npm deprecate` shows a warning on install but does NOT prevent installation.
To fully block a version, use `npm unpublish aios-core@{version}` (within 72h of publish only).
## Configuration Reference
See `core-config.yaml` section `npm_registry` for:
- Required files list
- Excluded paths list
- Smoke test configuration
- Auth strategy
## Error Handling
| Error | Cause | Resolution |
|-------|-------|------------|
| `npm ERR! 403` | Auth issue | Run `npm login`, check token permissions |
| `npm ERR! 402` | Paid feature | Ensure package is public (`--access public`) |
| Smoke test fails | Files missing from tarball | Fix `files` array in package.json, re-validate |
| promote fails | Version not on preview | Run `*publish-preview` first |
| Tag already exists | Re-publishing same version | Bump version or use `--force` (with caution) |
## Metadata
```yaml
story: INS-2 (Release Pipeline: Preview to Latest)
version: 1.0.0
dependencies:
- release-management.md
- github-devops-pre-push-quality-gate.md
tags:
- npm
- release
- publishing
- preview
created: 2026-02-13
```