@devcxl/opencode-cabbage 1.3.0 → 2.0.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/.codex-plugin/plugin.json +1 -1
- package/README.md +35 -23
- package/README.zh.md +22 -15
- package/assets/agents/dev-lifecycle.md +6 -0
- package/assets/prompts/bootstrap.md +4 -0
- package/assets/skills/flow-change/SKILL.md +109 -0
- package/assets/skills/flow-design/SKILL.md +15 -0
- package/assets/skills/flow-docs/SKILL.md +112 -0
- package/assets/skills/flow-incident/SKILL.md +98 -0
- package/assets/skills/flow-research/SKILL.md +9 -0
- package/assets/skills/flow-setup/SKILL.md +13 -0
- package/codex-skills/agent-dev-lifecycle/SKILL.md +2 -0
- package/codex-skills/flow-change/SKILL.md +109 -0
- package/codex-skills/flow-design/SKILL.md +18 -3
- package/codex-skills/flow-docs/SKILL.md +112 -0
- package/codex-skills/flow-incident/SKILL.md +98 -0
- package/codex-skills/flow-research/SKILL.md +12 -3
- package/codex-skills/flow-setup/SKILL.md +13 -0
- package/dist/index.d.ts +2 -5
- package/dist/index.js +1 -4
- package/dist/index.js.map +1 -1
- package/dist/plugin/agents.d.ts +20 -0
- package/dist/plugin/agents.js +79 -0
- package/dist/plugin/agents.js.map +1 -1
- package/dist/plugin/cabbage-cli.d.ts +28 -0
- package/dist/plugin/cabbage-cli.js +92 -0
- package/dist/plugin/cabbage-cli.js.map +1 -0
- package/dist/plugin/cabbage-tool.d.ts +103 -0
- package/dist/plugin/cabbage-tool.js +169 -0
- package/dist/plugin/cabbage-tool.js.map +1 -0
- package/dist/plugin/commands.d.ts +10 -0
- package/dist/plugin/commands.js +1 -1
- package/dist/plugin/commands.js.map +1 -1
- package/dist/plugin/continuation.d.ts +22 -0
- package/dist/plugin/continuation.js +233 -0
- package/dist/plugin/continuation.js.map +1 -0
- package/dist/plugin/goal-store.d.ts +42 -49
- package/dist/plugin/goal-store.js +35 -32
- package/dist/plugin/goal-store.js.map +1 -1
- package/dist/plugin/goal.d.ts +92 -28
- package/dist/plugin/goal.js +201 -158
- package/dist/plugin/goal.js.map +1 -1
- package/dist/plugin/install-dir.d.ts +13 -0
- package/dist/plugin/install-dir.js +46 -0
- package/dist/plugin/install-dir.js.map +1 -0
- package/dist/plugin/server.d.ts +4 -13
- package/dist/plugin/server.js +278 -423
- package/dist/plugin/server.js.map +1 -1
- package/dist/plugin/session-abort.d.ts +5 -0
- package/dist/plugin/session-abort.js +26 -0
- package/dist/plugin/session-abort.js.map +1 -0
- package/dist/plugin/skills.d.ts +15 -0
- package/dist/plugin/skills.js +47 -50
- package/dist/plugin/skills.js.map +1 -1
- package/dist/plugin.d.ts +2 -2
- package/dist/plugin.js +6 -2
- package/dist/plugin.js.map +1 -1
- package/dist/util/paths.d.ts +0 -6
- package/dist/util/paths.js +0 -15
- package/dist/util/paths.js.map +1 -1
- package/package.json +4 -7
- package/vendor/cabbage/MANIFEST.json +8 -0
- package/vendor/cabbage/cabbage_cli/__init__.py +1 -0
- package/vendor/cabbage/cabbage_cli/__main__.py +2 -0
- package/vendor/cabbage/cabbage_cli/assets/docs-site/.vitepress/config.ts +78 -0
- package/vendor/cabbage/cabbage_cli/assets/docs-site/README.md +31 -0
- package/vendor/cabbage/cabbage_cli/assets/docs-site/package.json +16 -0
- package/vendor/cabbage/cabbage_cli/assets/docs-site/pnpm-lock.yaml +2504 -0
- package/vendor/cabbage/cabbage_cli/assets/integrations/cabbage.yml +127 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/adr.md +47 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/api-design.md +45 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/change-record.md +21 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/database-design.md +37 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/generic.md +20 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/impact.md +41 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/incident.md +48 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/postmortem.md +43 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/prd.md +71 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/release-plan.md +45 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/rfc.md +44 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/security-review.md +35 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/tasks.md +62 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/tech-spec.md +87 -0
- package/vendor/cabbage/cabbage_cli/assets/templates/test-plan.md +44 -0
- package/vendor/cabbage/cabbage_cli/assets/workflows/change.yaml +11 -0
- package/vendor/cabbage/cabbage_cli/assets/workflows/incident.yaml +4 -0
- package/vendor/cabbage/cabbage_cli/cli.py +283 -0
- package/vendor/cabbage/cabbage_cli/core.py +606 -0
- package/vendor/cabbage/cabbage_cli/scaffold.py +313 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Generated template for cabbage projects. If this project does not publish a
|
|
2
|
+
# documentation site, delete the `deploy-pages` job (and the documentation steps
|
|
3
|
+
# of `validate-and-test`); CI stays green because those steps are conditional.
|
|
4
|
+
# The test step below runs Python's unittest when tests/ exists; adapt it to your
|
|
5
|
+
# project's test runner so a missing test run is surfaced instead of silent.
|
|
6
|
+
name: CI & Docs Deployment
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
push:
|
|
10
|
+
branches:
|
|
11
|
+
- master
|
|
12
|
+
- main
|
|
13
|
+
pull_request:
|
|
14
|
+
branches:
|
|
15
|
+
- master
|
|
16
|
+
- main
|
|
17
|
+
|
|
18
|
+
permissions:
|
|
19
|
+
contents: read
|
|
20
|
+
|
|
21
|
+
concurrency:
|
|
22
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
23
|
+
cancel-in-progress: false
|
|
24
|
+
|
|
25
|
+
jobs:
|
|
26
|
+
validate-and-test:
|
|
27
|
+
name: Test & Validate
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
steps:
|
|
30
|
+
- name: Checkout repository
|
|
31
|
+
uses: actions/checkout@v4
|
|
32
|
+
with:
|
|
33
|
+
fetch-depth: 0
|
|
34
|
+
|
|
35
|
+
- name: Set up Python
|
|
36
|
+
uses: actions/setup-python@v5
|
|
37
|
+
with:
|
|
38
|
+
python-version: '3.12'
|
|
39
|
+
|
|
40
|
+
- name: Install Python dependencies
|
|
41
|
+
run: |
|
|
42
|
+
python -m pip install --upgrade pip
|
|
43
|
+
if [ -f requirements.txt ]; then
|
|
44
|
+
python -m pip install -r requirements.txt
|
|
45
|
+
else
|
|
46
|
+
echo "No requirements.txt; skipping project dependencies."
|
|
47
|
+
fi
|
|
48
|
+
python -m pip install PyYAML
|
|
49
|
+
|
|
50
|
+
- name: Run Test Suite
|
|
51
|
+
run: |
|
|
52
|
+
if [ -d tests ]; then
|
|
53
|
+
python -m unittest discover tests
|
|
54
|
+
else
|
|
55
|
+
echo "::warning title=Test suite skipped::no tests/ directory found; adapt the Run Test Suite step to this project's test runner so the test stage actually runs."
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
- name: Validate Cabbage Changes
|
|
59
|
+
run: |
|
|
60
|
+
if [ -d ".cabbage/tooling" ]; then
|
|
61
|
+
export PYTHONPATH=".cabbage/tooling${PYTHONPATH:+:$PYTHONPATH}"
|
|
62
|
+
python -m cabbage_cli validate --all
|
|
63
|
+
elif command -v cabbage >/dev/null 2>&1; then
|
|
64
|
+
cabbage validate --all
|
|
65
|
+
else
|
|
66
|
+
echo "Error: cabbage CLI not found. Expected a vendored .cabbage/tooling or an installed 'cabbage' command." >&2
|
|
67
|
+
exit 1
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
- name: Validate PR Workflow & Doc Binding
|
|
71
|
+
if: github.event_name == 'pull_request'
|
|
72
|
+
run: |
|
|
73
|
+
if [ -d ".cabbage/tooling" ]; then
|
|
74
|
+
export PYTHONPATH=".cabbage/tooling${PYTHONPATH:+:$PYTHONPATH}"
|
|
75
|
+
python -m cabbage_cli ci --base origin/${{ github.base_ref }}
|
|
76
|
+
elif command -v cabbage >/dev/null 2>&1; then
|
|
77
|
+
cabbage ci --base origin/${{ github.base_ref }}
|
|
78
|
+
else
|
|
79
|
+
echo "Error: cabbage CLI not found. Expected a vendored .cabbage/tooling or an installed 'cabbage' command." >&2
|
|
80
|
+
exit 1
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
- name: Set up pnpm
|
|
84
|
+
if: ${{ hashFiles('docs/package.json') != '' }}
|
|
85
|
+
uses: pnpm/action-setup@v4
|
|
86
|
+
with:
|
|
87
|
+
version: 10
|
|
88
|
+
|
|
89
|
+
- name: Set up Node.js
|
|
90
|
+
if: ${{ hashFiles('docs/package.json') != '' }}
|
|
91
|
+
uses: actions/setup-node@v4
|
|
92
|
+
with:
|
|
93
|
+
node-version: 22
|
|
94
|
+
cache: 'pnpm'
|
|
95
|
+
cache-dependency-path: 'docs/pnpm-lock.yaml'
|
|
96
|
+
|
|
97
|
+
- name: Install documentation dependencies
|
|
98
|
+
if: ${{ hashFiles('docs/package.json') != '' }}
|
|
99
|
+
working-directory: docs
|
|
100
|
+
run: pnpm install --frozen-lockfile
|
|
101
|
+
|
|
102
|
+
- name: Build documentation site
|
|
103
|
+
if: ${{ hashFiles('docs/package.json') != '' }}
|
|
104
|
+
working-directory: docs
|
|
105
|
+
run: pnpm run build
|
|
106
|
+
|
|
107
|
+
- name: Upload Pages artifact
|
|
108
|
+
if: ${{ hashFiles('docs/package.json') != '' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main') }}
|
|
109
|
+
uses: actions/upload-pages-artifact@v3
|
|
110
|
+
with:
|
|
111
|
+
path: docs/.vitepress/dist
|
|
112
|
+
|
|
113
|
+
deploy-pages:
|
|
114
|
+
name: Deploy to GitHub Pages
|
|
115
|
+
if: github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main')
|
|
116
|
+
needs: validate-and-test
|
|
117
|
+
runs-on: ubuntu-latest
|
|
118
|
+
permissions:
|
|
119
|
+
pages: write
|
|
120
|
+
id-token: write
|
|
121
|
+
environment:
|
|
122
|
+
name: github-pages
|
|
123
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
124
|
+
steps:
|
|
125
|
+
- name: Deploy to GitHub Pages
|
|
126
|
+
id: deployment
|
|
127
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
change: {{CHANGE_ID}}
|
|
3
|
+
cabbage_stage: {{STAGE_ID}}
|
|
4
|
+
change_type: {{CHANGE_TYPE}}
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!-- Replace every marked prompt before verifying this stage. -->
|
|
8
|
+
|
|
9
|
+
# Status
|
|
10
|
+
|
|
11
|
+
<!-- CABBAGE: Set Proposed, Accepted, Superseded, or Deprecated, with the decision date and owners. -->
|
|
12
|
+
|
|
13
|
+
# Context
|
|
14
|
+
|
|
15
|
+
<!-- CABBAGE: Describe the forces, constraints, and architectural problem that require a decision. -->
|
|
16
|
+
|
|
17
|
+
# Decision Drivers
|
|
18
|
+
|
|
19
|
+
- <!-- CABBAGE: List a criterion used to compare options. -->
|
|
20
|
+
|
|
21
|
+
# Considered Options
|
|
22
|
+
|
|
23
|
+
| Option | Benefits | Drawbacks | Outcome |
|
|
24
|
+
|---|---|---|---|
|
|
25
|
+
| <!-- CABBAGE: Name an option, including the status quo. --> | <!-- CABBAGE: List the benefits. --> | <!-- CABBAGE: List costs and risks. --> | <!-- CABBAGE: State why it was selected or rejected. --> |
|
|
26
|
+
|
|
27
|
+
# Decision
|
|
28
|
+
|
|
29
|
+
<!-- CABBAGE: State the chosen option and the boundaries of the decision. -->
|
|
30
|
+
|
|
31
|
+
# Consequences
|
|
32
|
+
|
|
33
|
+
## Positive
|
|
34
|
+
|
|
35
|
+
- <!-- CABBAGE: Record an expected benefit. -->
|
|
36
|
+
|
|
37
|
+
## Negative
|
|
38
|
+
|
|
39
|
+
- <!-- CABBAGE: Record a cost, constraint, or accepted trade-off. -->
|
|
40
|
+
|
|
41
|
+
## Risks
|
|
42
|
+
|
|
43
|
+
- <!-- CABBAGE: Record a residual risk and mitigation. -->
|
|
44
|
+
|
|
45
|
+
# Validation
|
|
46
|
+
|
|
47
|
+
<!-- CABBAGE: Define how and when the decision will be reviewed or measured. -->
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
change: {{CHANGE_ID}}
|
|
3
|
+
cabbage_stage: {{STAGE_ID}}
|
|
4
|
+
change_type: {{CHANGE_TYPE}}
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!-- Replace every marked prompt before verifying this stage. Use N/A with a reason when a section does not apply. -->
|
|
8
|
+
|
|
9
|
+
# Overview
|
|
10
|
+
|
|
11
|
+
<!-- CABBAGE: Identify the API purpose, protocol, owners, and consumers. -->
|
|
12
|
+
|
|
13
|
+
# Contract
|
|
14
|
+
|
|
15
|
+
## Operations
|
|
16
|
+
|
|
17
|
+
| Method or event | Path or topic | Purpose | Authentication | Idempotency |
|
|
18
|
+
|---|---|---|---|---|
|
|
19
|
+
| <!-- CABBAGE: Name the method or event. --> | <!-- CABBAGE: Provide the path or topic. --> | <!-- CABBAGE: Describe the operation. --> | <!-- CABBAGE: State the required identity and permission. --> | <!-- CABBAGE: Describe retry and deduplication behavior. --> |
|
|
20
|
+
|
|
21
|
+
## Inputs and Outputs
|
|
22
|
+
|
|
23
|
+
| Name | Location | Type | Required | Validation or semantics |
|
|
24
|
+
|---|---|---|---|---|
|
|
25
|
+
| <!-- CABBAGE: Name a field. --> | <!-- CABBAGE: Path, query, header, or body. --> | <!-- CABBAGE: State the type. --> | <!-- CABBAGE: Yes or No. --> | <!-- CABBAGE: State constraints and meaning. --> |
|
|
26
|
+
|
|
27
|
+
<!-- CABBAGE: Provide representative request, response, or event examples without secrets. -->
|
|
28
|
+
|
|
29
|
+
# Error Model
|
|
30
|
+
|
|
31
|
+
| Code or condition | Meaning | Client action | Retryable |
|
|
32
|
+
|---|---|---|---|
|
|
33
|
+
| <!-- CABBAGE: Name an error. --> | <!-- CABBAGE: Explain the failure. --> | <!-- CABBAGE: Describe recovery. --> | <!-- CABBAGE: Yes or No, with policy. --> |
|
|
34
|
+
|
|
35
|
+
# Compatibility
|
|
36
|
+
|
|
37
|
+
<!-- CABBAGE: Describe versioning, backward compatibility, deprecation, and consumer migration. -->
|
|
38
|
+
|
|
39
|
+
# Security
|
|
40
|
+
|
|
41
|
+
<!-- CABBAGE: Describe authorization, input validation, sensitive fields, rate limits, and abuse controls. -->
|
|
42
|
+
|
|
43
|
+
# Observability
|
|
44
|
+
|
|
45
|
+
<!-- CABBAGE: Define logs, metrics, traces, audit events, SLOs, and alerts for the contract. -->
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
change: {{CHANGE_ID}}
|
|
3
|
+
cabbage_stage: {{STAGE_ID}}
|
|
4
|
+
change_type: {{CHANGE_TYPE}}
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Goal
|
|
8
|
+
|
|
9
|
+
<!-- CABBAGE: Describe the goal or reproduced problem, scope, and observable acceptance criteria. -->
|
|
10
|
+
|
|
11
|
+
# Design
|
|
12
|
+
|
|
13
|
+
<!-- CABBAGE: Describe the minimal change and risks. Before implementation, declare architecture/API/database/security/design/RFC/high-risk deployment impacts with cabbage impact. -->
|
|
14
|
+
|
|
15
|
+
# Tasks
|
|
16
|
+
|
|
17
|
+
- [ ] <!-- CABBAGE: Implement the change and cover the affected behavior with tests. -->
|
|
18
|
+
|
|
19
|
+
# Verification
|
|
20
|
+
|
|
21
|
+
<!-- CABBAGE: Record exact commands and actual results. For a bugfix include the failing reproduction and passing regression. -->
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
change: {{CHANGE_ID}}
|
|
3
|
+
cabbage_stage: {{STAGE_ID}}
|
|
4
|
+
change_type: {{CHANGE_TYPE}}
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!-- Replace every marked prompt before verifying this stage. Use N/A with a reason when a section does not apply. -->
|
|
8
|
+
|
|
9
|
+
# Summary
|
|
10
|
+
|
|
11
|
+
<!-- CABBAGE: Describe the data change, affected stores, ownership, and expected scale. -->
|
|
12
|
+
|
|
13
|
+
# Schema
|
|
14
|
+
|
|
15
|
+
| Object and field | Type | Nullable | Default | Constraint or index | Rationale |
|
|
16
|
+
|---|---|---|---|---|---|
|
|
17
|
+
| <!-- CABBAGE: Name the table, collection, and field. --> | <!-- CABBAGE: State the type. --> | <!-- CABBAGE: Yes or No. --> | <!-- CABBAGE: State the default. --> | <!-- CABBAGE: Describe keys, checks, or indexes. --> | <!-- CABBAGE: Explain the design choice. --> |
|
|
18
|
+
|
|
19
|
+
<!-- CABBAGE: Record invariants, relationships, retention, and ownership rules. -->
|
|
20
|
+
|
|
21
|
+
# Migration
|
|
22
|
+
|
|
23
|
+
| Phase | Operation | Batching or lock risk | Verification | Owner |
|
|
24
|
+
|---|---|---|---|---|
|
|
25
|
+
| <!-- CABBAGE: Name expand, backfill, switch, or contract phase. --> | <!-- CABBAGE: Describe the operation. --> | <!-- CABBAGE: Describe load, duration, and concurrency risk. --> | <!-- CABBAGE: Define pass criteria. --> | <!-- CABBAGE: Name the owner. --> |
|
|
26
|
+
|
|
27
|
+
# Data Verification
|
|
28
|
+
|
|
29
|
+
<!-- CABBAGE: Define row counts, checksums, invariants, reconciliation, and post-migration sampling. -->
|
|
30
|
+
|
|
31
|
+
# Compatibility and Operations
|
|
32
|
+
|
|
33
|
+
<!-- CABBAGE: Describe mixed-version behavior, query performance, capacity, replication, backups, and observability. -->
|
|
34
|
+
|
|
35
|
+
# Rollback
|
|
36
|
+
|
|
37
|
+
<!-- CABBAGE: Define rollback triggers, ordering, recovery commands, and irreversible data impact. -->
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
change: {{CHANGE_ID}}
|
|
3
|
+
cabbage_stage: {{STAGE_ID}}
|
|
4
|
+
change_type: {{CHANGE_TYPE}}
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!-- Replace every marked prompt before verifying this stage. -->
|
|
8
|
+
|
|
9
|
+
# Summary
|
|
10
|
+
|
|
11
|
+
<!-- CABBAGE: State the artifact's purpose, audience, and expected outcome. -->
|
|
12
|
+
|
|
13
|
+
# Content
|
|
14
|
+
|
|
15
|
+
<!-- CABBAGE: Provide the information required by this workflow stage. -->
|
|
16
|
+
|
|
17
|
+
# Decisions and Follow-up
|
|
18
|
+
|
|
19
|
+
- Decision: <!-- CABBAGE: Record a decision or state N/A. -->
|
|
20
|
+
- Follow-up: <!-- CABBAGE: Record an owner and due date or state N/A. -->
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
change: {{CHANGE_ID}}
|
|
3
|
+
cabbage_stage: {{STAGE_ID}}
|
|
4
|
+
change_type: {{CHANGE_TYPE}}
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!-- Replace every marked prompt before verifying this stage. Keep the matrix aligned with change.yaml. -->
|
|
8
|
+
|
|
9
|
+
# Change Summary
|
|
10
|
+
|
|
11
|
+
<!-- CABBAGE: Summarize what changes and which users, systems, or teams are affected. -->
|
|
12
|
+
|
|
13
|
+
# Impact Matrix
|
|
14
|
+
|
|
15
|
+
| Area | Impact | Notes |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| Product | No | |
|
|
18
|
+
| Design | No | |
|
|
19
|
+
| Architecture | No | |
|
|
20
|
+
| RFC | No | |
|
|
21
|
+
| API | No | |
|
|
22
|
+
| Database | No | |
|
|
23
|
+
| Security | No | |
|
|
24
|
+
| Testing | Yes | |
|
|
25
|
+
| Deployment | No | |
|
|
26
|
+
| Operations | No | |
|
|
27
|
+
| Performance | No | |
|
|
28
|
+
|
|
29
|
+
# Impact Details
|
|
30
|
+
|
|
31
|
+
<!-- CABBAGE: For each area marked Yes, describe affected components, consumers, data, and operational processes. -->
|
|
32
|
+
|
|
33
|
+
# Risks
|
|
34
|
+
|
|
35
|
+
| Risk | Likelihood | Impact | Mitigation | Owner |
|
|
36
|
+
|---|---|---|---|---|
|
|
37
|
+
| <!-- CABBAGE: Describe a material risk. --> | <!-- CABBAGE: Low, Medium, or High. --> | <!-- CABBAGE: Describe the consequence. --> | <!-- CABBAGE: Describe prevention or recovery. --> | <!-- CABBAGE: Name the accountable owner. --> |
|
|
38
|
+
|
|
39
|
+
# Documentation Updates
|
|
40
|
+
|
|
41
|
+
- <!-- CABBAGE: List current-state documents, runbooks, API references, or release notes to update. -->
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
change: {{CHANGE_ID}}
|
|
3
|
+
cabbage_stage: {{STAGE_ID}}
|
|
4
|
+
change_type: {{CHANGE_TYPE}}
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!-- Replace every marked prompt before verifying this stage. Use UTC or include the timezone for every timestamp. -->
|
|
8
|
+
|
|
9
|
+
# Incident Metadata
|
|
10
|
+
|
|
11
|
+
| Field | Value |
|
|
12
|
+
|---|---|
|
|
13
|
+
| Severity | <!-- CABBAGE: State the severity level. --> |
|
|
14
|
+
| Status | <!-- CABBAGE: Investigating, Mitigated, Resolved, or Monitoring. --> |
|
|
15
|
+
| Started / Detected / Resolved | <!-- CABBAGE: Record timestamps and timezone. --> |
|
|
16
|
+
| Incident commander | <!-- CABBAGE: Name the accountable responder. --> |
|
|
17
|
+
|
|
18
|
+
# Impact
|
|
19
|
+
|
|
20
|
+
<!-- CABBAGE: Quantify affected users, duration, regions, features, data, revenue, and SLO or SLA impact. -->
|
|
21
|
+
|
|
22
|
+
# Detection
|
|
23
|
+
|
|
24
|
+
<!-- CABBAGE: Describe the first signal, detection delay, and why existing alerts did or did not work. -->
|
|
25
|
+
|
|
26
|
+
# Timeline
|
|
27
|
+
|
|
28
|
+
| Time | Event or observation | Action and owner |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| <!-- CABBAGE: Record a timestamp. --> | <!-- CABBAGE: Record a material event. --> | <!-- CABBAGE: Record the response and actor. --> |
|
|
31
|
+
|
|
32
|
+
# Mitigation
|
|
33
|
+
|
|
34
|
+
## Containment
|
|
35
|
+
|
|
36
|
+
<!-- CABBAGE: Describe how impact was stopped or limited. -->
|
|
37
|
+
|
|
38
|
+
## Recovery
|
|
39
|
+
|
|
40
|
+
<!-- CABBAGE: Describe restoration steps and any remaining degraded behavior. -->
|
|
41
|
+
|
|
42
|
+
# Recovery Verification
|
|
43
|
+
|
|
44
|
+
<!-- CABBAGE: Record the metrics, checks, and observation window that prove recovery. -->
|
|
45
|
+
|
|
46
|
+
# Communications
|
|
47
|
+
|
|
48
|
+
<!-- CABBAGE: Record customer, stakeholder, support, and status-page updates with timestamps. -->
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
change: {{CHANGE_ID}}
|
|
3
|
+
cabbage_stage: {{STAGE_ID}}
|
|
4
|
+
change_type: {{CHANGE_TYPE}}
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!-- Replace every marked prompt before verifying this stage. Keep the analysis blameless and evidence based. -->
|
|
8
|
+
|
|
9
|
+
# Summary
|
|
10
|
+
|
|
11
|
+
<!-- CABBAGE: Summarize what happened, the duration, resolution, and principal lesson. -->
|
|
12
|
+
|
|
13
|
+
# Impact and Detection
|
|
14
|
+
|
|
15
|
+
<!-- CABBAGE: Quantify impact and explain how the incident was detected, including detection gaps. -->
|
|
16
|
+
|
|
17
|
+
# Root Cause
|
|
18
|
+
|
|
19
|
+
<!-- CABBAGE: State the causal chain with supporting evidence; distinguish the trigger from the root cause. -->
|
|
20
|
+
|
|
21
|
+
# Contributing Factors
|
|
22
|
+
|
|
23
|
+
- <!-- CABBAGE: Record a systemic condition that increased likelihood, impact, or recovery time. -->
|
|
24
|
+
|
|
25
|
+
# Response Assessment
|
|
26
|
+
|
|
27
|
+
## What Went Well
|
|
28
|
+
|
|
29
|
+
- <!-- CABBAGE: Record an effective safeguard or response action. -->
|
|
30
|
+
|
|
31
|
+
## What Went Poorly
|
|
32
|
+
|
|
33
|
+
- <!-- CABBAGE: Record a response or process gap. -->
|
|
34
|
+
|
|
35
|
+
# Corrective Actions
|
|
36
|
+
|
|
37
|
+
| Action | Type | Owner | Due date | Verification | Status |
|
|
38
|
+
|---|---|---|---|---|---|
|
|
39
|
+
| <!-- CABBAGE: Define a specific preventive or detective action. --> | <!-- CABBAGE: Prevent, Detect, or Mitigate. --> | <!-- CABBAGE: Name one owner. --> | <!-- CABBAGE: Set a date. --> | <!-- CABBAGE: Define evidence of completion. --> | Open |
|
|
40
|
+
|
|
41
|
+
# Lessons Learned
|
|
42
|
+
|
|
43
|
+
<!-- CABBAGE: Record reusable technical or organizational learning and where it will be shared. -->
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
change: {{CHANGE_ID}}
|
|
3
|
+
cabbage_stage: {{STAGE_ID}}
|
|
4
|
+
change_type: {{CHANGE_TYPE}}
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!-- Replace every marked prompt before verifying this stage. Use N/A with a reason when a section does not apply. -->
|
|
8
|
+
|
|
9
|
+
# Goal
|
|
10
|
+
|
|
11
|
+
<!-- CABBAGE: State the user or business problem, the desired outcome, and why it matters now. -->
|
|
12
|
+
|
|
13
|
+
## Grill-Me Alignment Summary
|
|
14
|
+
|
|
15
|
+
- **Core Problem & Value**: <!-- CABBAGE: Summarize the clarified business intent and primary value hypothesis from pre-flight grilling. -->
|
|
16
|
+
- **Assumptions Validated**: <!-- CABBAGE: Record validated assumptions and eliminated ambiguities. -->
|
|
17
|
+
|
|
18
|
+
# Users and Use Cases
|
|
19
|
+
|
|
20
|
+
| User or actor | Need | Primary use case |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| <!-- CABBAGE: Identify the affected user or system. --> | <!-- CABBAGE: Describe the need. --> | <!-- CABBAGE: Describe the observable workflow. --> |
|
|
23
|
+
|
|
24
|
+
# Scope
|
|
25
|
+
|
|
26
|
+
## In Scope
|
|
27
|
+
|
|
28
|
+
- <!-- CABBAGE: List behavior delivered by this change. -->
|
|
29
|
+
|
|
30
|
+
## Out of Scope
|
|
31
|
+
|
|
32
|
+
- <!-- CABBAGE: List adjacent behavior intentionally excluded. -->
|
|
33
|
+
|
|
34
|
+
## Decision Boundaries
|
|
35
|
+
|
|
36
|
+
- **AI Autonomous Decisions**: <!-- CABBAGE: Technical details, internal naming, local refactoring, and test fixtures decided directly by AI. -->
|
|
37
|
+
- **Human Gate Decisions**: <!-- CABBAGE: Business rules, breaking interface/data model changes, scope expansion, and domain trade-offs requiring explicit human approval. -->
|
|
38
|
+
|
|
39
|
+
# Requirements
|
|
40
|
+
|
|
41
|
+
| ID | Requirement (SHALL/MUST) | Priority | Rationale |
|
|
42
|
+
|---|---|---|---|
|
|
43
|
+
| R-1 | <!-- CABBAGE: Write a testable requirement using SHALL/MUST. --> | Must | <!-- CABBAGE: Explain why it is needed. --> |
|
|
44
|
+
|
|
45
|
+
# Acceptance Criteria
|
|
46
|
+
|
|
47
|
+
### Scenario 1: <!-- CABBAGE: Scenario title -->
|
|
48
|
+
- **GIVEN**: <!-- CABBAGE: Initial context / precondition -->
|
|
49
|
+
- **WHEN**: <!-- CABBAGE: Action or event triggered -->
|
|
50
|
+
- **THEN**: <!-- CABBAGE: Observable expected outcome -->
|
|
51
|
+
- [ ] <!-- CABBAGE: Acceptance verification checkbox -->
|
|
52
|
+
|
|
53
|
+
# Success Metrics
|
|
54
|
+
|
|
55
|
+
| Metric | Baseline | Target | Measurement window |
|
|
56
|
+
|---|---|---|---|
|
|
57
|
+
| <!-- CABBAGE: Name the outcome metric. --> | <!-- CABBAGE: Record the current value. --> | <!-- CABBAGE: Record the target value. --> | <!-- CABBAGE: Define when it is evaluated. --> |
|
|
58
|
+
|
|
59
|
+
# Dependencies and Constraints
|
|
60
|
+
|
|
61
|
+
- <!-- CABBAGE: Record external dependencies, policy constraints, deadlines, or compatibility requirements. -->
|
|
62
|
+
|
|
63
|
+
# Risks
|
|
64
|
+
|
|
65
|
+
| Risk | Impact | Mitigation |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| <!-- CABBAGE: Describe a product or delivery risk. --> | <!-- CABBAGE: Describe the consequence. --> | <!-- CABBAGE: Describe the mitigation. --> |
|
|
68
|
+
|
|
69
|
+
# Open Questions
|
|
70
|
+
|
|
71
|
+
- <!-- CABBAGE: Record unresolved decisions and an owner, or state N/A. -->
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
change: {{CHANGE_ID}}
|
|
3
|
+
cabbage_stage: {{STAGE_ID}}
|
|
4
|
+
change_type: {{CHANGE_TYPE}}
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!-- Replace every marked prompt before verifying this stage. Use N/A with a reason when a section does not apply. -->
|
|
8
|
+
|
|
9
|
+
# Release Summary
|
|
10
|
+
|
|
11
|
+
<!-- CABBAGE: Identify the release, affected services or clients, release window, and accountable owner. -->
|
|
12
|
+
|
|
13
|
+
# Preconditions
|
|
14
|
+
|
|
15
|
+
- [ ] <!-- CABBAGE: List an approval, dependency, backup, migration, capacity, or compatibility prerequisite. -->
|
|
16
|
+
|
|
17
|
+
# Deployment
|
|
18
|
+
|
|
19
|
+
| Order | Action | Owner | Success signal |
|
|
20
|
+
|---|---|---|---|
|
|
21
|
+
| 1 | <!-- CABBAGE: Describe a concrete deployment step. --> | <!-- CABBAGE: Name the owner. --> | <!-- CABBAGE: Define the expected signal. --> |
|
|
22
|
+
|
|
23
|
+
# Rollback
|
|
24
|
+
|
|
25
|
+
## Triggers
|
|
26
|
+
|
|
27
|
+
- <!-- CABBAGE: Define a measurable rollback trigger. -->
|
|
28
|
+
|
|
29
|
+
## Steps
|
|
30
|
+
|
|
31
|
+
1. <!-- CABBAGE: Describe rollback ordering, ownership, and data handling. -->
|
|
32
|
+
|
|
33
|
+
# Verification
|
|
34
|
+
|
|
35
|
+
| Check | Method | Expected result | Owner |
|
|
36
|
+
|---|---|---|---|
|
|
37
|
+
| <!-- CABBAGE: Name a functional or operational check. --> | <!-- CABBAGE: Provide a command, dashboard, or procedure. --> | <!-- CABBAGE: Define pass criteria. --> | <!-- CABBAGE: Name the verifier. --> |
|
|
38
|
+
|
|
39
|
+
# Monitoring
|
|
40
|
+
|
|
41
|
+
<!-- CABBAGE: List dashboards, alerts, logs, observation duration, and escalation thresholds. -->
|
|
42
|
+
|
|
43
|
+
# Communication
|
|
44
|
+
|
|
45
|
+
<!-- CABBAGE: Describe stakeholder notification, support readiness, status updates, and release notes. -->
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
change: {{CHANGE_ID}}
|
|
3
|
+
cabbage_stage: {{STAGE_ID}}
|
|
4
|
+
change_type: {{CHANGE_TYPE}}
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!-- Replace every marked prompt before verifying this stage. -->
|
|
8
|
+
|
|
9
|
+
# Summary
|
|
10
|
+
|
|
11
|
+
<!-- CABBAGE: Summarize the proposed direction and decision requested from reviewers. -->
|
|
12
|
+
|
|
13
|
+
# Problem
|
|
14
|
+
|
|
15
|
+
<!-- CABBAGE: Describe the current problem, evidence, affected parties, and cost of doing nothing. -->
|
|
16
|
+
|
|
17
|
+
# Goals and Non-goals
|
|
18
|
+
|
|
19
|
+
- Goal: <!-- CABBAGE: State an outcome the proposal must achieve. -->
|
|
20
|
+
- Non-goal: <!-- CABBAGE: State an adjacent concern intentionally excluded. -->
|
|
21
|
+
|
|
22
|
+
# Proposal
|
|
23
|
+
|
|
24
|
+
<!-- CABBAGE: Explain the approach, key components, boundaries, and operational model at decision level. -->
|
|
25
|
+
|
|
26
|
+
# Alternatives
|
|
27
|
+
|
|
28
|
+
| Option | Benefits | Costs and risks | Outcome |
|
|
29
|
+
|---|---|---|---|
|
|
30
|
+
| <!-- CABBAGE: Name an alternative, including the status quo. --> | <!-- CABBAGE: List advantages. --> | <!-- CABBAGE: List disadvantages. --> | <!-- CABBAGE: State why it is preferred or rejected. --> |
|
|
31
|
+
|
|
32
|
+
# Compatibility and Migration
|
|
33
|
+
|
|
34
|
+
<!-- CABBAGE: Describe consumer impact, transition phases, compatibility window, and deprecation. -->
|
|
35
|
+
|
|
36
|
+
# Risks
|
|
37
|
+
|
|
38
|
+
| Risk | Impact | Mitigation |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| <!-- CABBAGE: Describe a proposal risk. --> | <!-- CABBAGE: Describe the consequence. --> | <!-- CABBAGE: Describe mitigation or recovery. --> |
|
|
41
|
+
|
|
42
|
+
# Open Questions
|
|
43
|
+
|
|
44
|
+
- <!-- CABBAGE: Record an unresolved decision, owner, and target date. -->
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
change: {{CHANGE_ID}}
|
|
3
|
+
cabbage_stage: {{STAGE_ID}}
|
|
4
|
+
change_type: {{CHANGE_TYPE}}
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<!-- Replace every marked prompt before verifying this stage. -->
|
|
8
|
+
|
|
9
|
+
# Scope and Assets
|
|
10
|
+
|
|
11
|
+
| Asset or trust boundary | Sensitivity | Actor or owner |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| <!-- CABBAGE: Identify data, credentials, service, or boundary. --> | <!-- CABBAGE: State sensitivity and business impact. --> | <!-- CABBAGE: Name users, systems, and owner. --> |
|
|
14
|
+
|
|
15
|
+
# Threats
|
|
16
|
+
|
|
17
|
+
| ID | Threat or abuse case | Preconditions | Impact | Likelihood |
|
|
18
|
+
|---|---|---|---|---|
|
|
19
|
+
| S-1 | <!-- CABBAGE: Describe a credible threat. --> | <!-- CABBAGE: State what enables it. --> | <!-- CABBAGE: Describe the consequence. --> | <!-- CABBAGE: Low, Medium, or High. --> |
|
|
20
|
+
|
|
21
|
+
# Controls
|
|
22
|
+
|
|
23
|
+
| Threat ID | Preventive or detective control | Verification evidence | Owner |
|
|
24
|
+
|---|---|---|---|
|
|
25
|
+
| S-1 | <!-- CABBAGE: Describe authorization, validation, secrets, audit, or another control. --> | <!-- CABBAGE: Name a test, scan, log, or review. --> | <!-- CABBAGE: Name the owner. --> |
|
|
26
|
+
|
|
27
|
+
# Residual Risks
|
|
28
|
+
|
|
29
|
+
| Risk | Reason accepted | Approver | Review date |
|
|
30
|
+
|---|---|---|---|
|
|
31
|
+
| <!-- CABBAGE: Describe remaining exposure, or state N/A. --> | <!-- CABBAGE: Explain the trade-off. --> | <!-- CABBAGE: Name the risk owner. --> | <!-- CABBAGE: Set the review date. --> |
|
|
32
|
+
|
|
33
|
+
# Verification
|
|
34
|
+
|
|
35
|
+
- <!-- CABBAGE: List required security tests, privacy checks, and release-blocking evidence. -->
|