mirror of
https://github.com/penpot/penpot.git
synced 2026-09-21 11:26:15 +00:00
Merge remote-tracking branch 'origin/staging' into develop
This commit is contained in:
commit
729cc5a828
@ -344,6 +344,39 @@ delegating when it helps), review it when the task is complex
|
|||||||
(`/review-plan`), implement it (`/implement-plan`), and mark progress
|
(`/review-plan`), implement it (`/implement-plan`), and mark progress
|
||||||
on the roadmap as you land each piece.
|
on the roadmap as you land each piece.
|
||||||
|
|
||||||
|
### Plan file naming (base + derivatives)
|
||||||
|
|
||||||
|
Base plans live in `.agents/plans/` as `YYYY-MM-DD-<slug>.md`.
|
||||||
|
Derived plans reuse the parent basename verbatim and append one
|
||||||
|
suffix per level with `--`, with no new date — the parent prefix
|
||||||
|
keeps everything adjacent in `ls`:
|
||||||
|
|
||||||
|
- Review followup on implemented work:
|
||||||
|
`2026-09-14-paste-before-init-crash.md` →
|
||||||
|
`2026-09-14-paste-before-init-crash--review-01.md`
|
||||||
|
- Roadmap sub-plan (task number from the roadmap):
|
||||||
|
`2026-09-20-upload-pipeline-roadmap.md` →
|
||||||
|
`2026-09-20-upload-pipeline-roadmap--task-01-chunk-upload.md`
|
||||||
|
- Chained: `...--task-02-gc--review-01.md`
|
||||||
|
|
||||||
|
While a plan is still unimplemented, `/make-a-plan` revises it in
|
||||||
|
place. Once implemented and reviewed, it writes a new followup file.
|
||||||
|
Full rules live in the `planner` skill.
|
||||||
|
|
||||||
|
### Plan status lifecycle
|
||||||
|
|
||||||
|
Every plan carries `Status: draft | reviewed | done` plus an
|
||||||
|
append-only `Review Log` (UTC ISO 8601, one line per entry):
|
||||||
|
|
||||||
|
- `draft` — fresh from `/make-a-plan`.
|
||||||
|
- `reviewed` — review feedback incorporated. `/review-plan` stays
|
||||||
|
read-only; only your explicit "apply" makes `/make-a-plan` apply
|
||||||
|
the changes, flip the status, and log one line.
|
||||||
|
- `done` — `/implement-plan` closes it on completion, logging the
|
||||||
|
issue URL when one exists (never commit hashes).
|
||||||
|
|
||||||
|
A plan approved with no changes goes `draft` → `done` directly.
|
||||||
|
|
||||||
## 7. Connecting `gh` CLI with a token
|
## 7. Connecting `gh` CLI with a token
|
||||||
|
|
||||||
The `create-issue` and `create-pr` flows need an authenticated `gh`
|
The `create-issue` and `create-pr` flows need an authenticated `gh`
|
||||||
|
|||||||
@ -102,8 +102,14 @@ Implement every task in one go. Work methodically, keeping changes
|
|||||||
focused on what the issue requires. Respect the plan's proposed
|
focused on what the issue requires. Respect the plan's proposed
|
||||||
parallelization when it applies.
|
parallelization when it applies.
|
||||||
|
|
||||||
When the implementation is complete, load the **`create-commit`** skill
|
When the implementation is complete, close the plan file first: flip its
|
||||||
and follow its workflow to commit the changes. Provide a brief summary
|
`Status` to `done` and append one UTC ISO 8601 line to its `Review Log`
|
||||||
|
with the issue URL when one exists (standalone mode, e.g.
|
||||||
|
`https://github.com/penpot/penpot/issues/NNNN`); in continue/direct
|
||||||
|
mode with no issue, just `done` with no invented identifier. Never
|
||||||
|
record commit hashes. Then load the **`create-commit`** skill
|
||||||
|
and follow its workflow to commit the changes together with the
|
||||||
|
closed plan file, so plan and code land in the same commit. Provide a brief summary
|
||||||
of what was implemented and why, the issue reference (`issue-NNNN`) when
|
of what was implemented and why, the issue reference (`issue-NNNN`) when
|
||||||
there is one, and the model name you are running as so the
|
there is one, and the model name you are running as so the
|
||||||
`AI-assisted-by` trailer is set correctly.
|
`AI-assisted-by` trailer is set correctly.
|
||||||
@ -117,6 +123,9 @@ per task" — loop one task at a time:
|
|||||||
- Commit it now: load the **`create-commit`** skill and follow it —
|
- Commit it now: load the **`create-commit`** skill and follow it —
|
||||||
one commit per task, never two tasks in one commit. Same inputs as
|
one commit per task, never two tasks in one commit. Same inputs as
|
||||||
always: what and why, the issue reference, your model name.
|
always: what and why, the issue reference, your model name.
|
||||||
|
- After the final task, close the plan file (`Status: done`, one
|
||||||
|
`Review Log` line with the issue URL when one exists) and include
|
||||||
|
it in that last commit.
|
||||||
- Show the user the result (what changed, files touched, how it was
|
- Show the user the result (what changed, files touched, how it was
|
||||||
verified).
|
verified).
|
||||||
- WAIT for the user's confirmation before starting the next task.
|
- WAIT for the user's confirmation before starting the next task.
|
||||||
|
|||||||
@ -16,8 +16,18 @@ stop — this skill needs the build agent to save the plan.
|
|||||||
- The user asks to plan, design, or break down a task, in any phrasing:
|
- The user asks to plan, design, or break down a task, in any phrasing:
|
||||||
"make a plan", "how would we build X", "design an approach for Y" —
|
"make a plan", "how would we build X", "design an approach for Y" —
|
||||||
or runs `/make-a-plan`.
|
or runs `/make-a-plan`.
|
||||||
- The user asks to rework or extend an existing plan (for example, after
|
- The user asks to rework or extend an existing plan. While the plan is
|
||||||
review findings) — revise the saved plan file in place.
|
still unimplemented (pre-`implement-plan` iteration, e.g. after
|
||||||
|
`/review-plan` findings or user feedback), revise the saved plan file
|
||||||
|
in place. Once the plan has been implemented and reviewed (post
|
||||||
|
`/review-code` findings on committed work), write a new derived plan
|
||||||
|
file instead — never rewrite the executed plan. The `planner` skill
|
||||||
|
defines the derived naming (`--review-NN`, `--task-NN`).
|
||||||
|
- The user says to apply `review-plan` findings to a still-unimplemented
|
||||||
|
plan: apply the agreed changes, flip `Status` to `reviewed`, and
|
||||||
|
append one UTC ISO 8601 line to `Review Log` describing what changed.
|
||||||
|
This apply step is the only pre-implementation write to those fields —
|
||||||
|
`review-plan` itself stays read-only and never writes.
|
||||||
|
|
||||||
Do not use it to execute a plan — that is the `implement-plan` flow.
|
Do not use it to execute a plan — that is the `implement-plan` flow.
|
||||||
|
|
||||||
@ -34,8 +44,12 @@ Do not use it to execute a plan — that is the `implement-plan` flow.
|
|||||||
3. Once all decisions are answered and the plan is final, save it verbatim to the
|
3. Once all decisions are answered and the plan is final, save it verbatim to the
|
||||||
announced path under `.agents/plans/` (create the directory if it does not
|
announced path under `.agents/plans/` (create the directory if it does not
|
||||||
exist). This step is the flow's explicit authorization to write the plan
|
exist). This step is the flow's explicit authorization to write the plan
|
||||||
file — the only write allowed here. If I later ask for changes, update the
|
file — the only write allowed here. A fresh plan uses
|
||||||
saved file directly.
|
`.agents/plans/YYYY-MM-DD-<slug>.md` with `Status: draft` and an
|
||||||
|
empty `Review Log`; a derived plan uses the parent
|
||||||
|
basename plus the `planner` suffix (`--review-NN`, `--task-NN`) in its
|
||||||
|
own new file, also starting as `draft`. If I later ask for changes to a still-unimplemented plan,
|
||||||
|
update the saved file directly.
|
||||||
4. Present me with a clear, self-contained summary of the plan's most relevant points
|
4. Present me with a clear, self-contained summary of the plan's most relevant points
|
||||||
only after all required decisions have been answered. Write it for someone who knows
|
only after all required decisions have been answered. Write it for someone who knows
|
||||||
only the project's high-level goal and may not know the plan's low-level context.
|
only the project's high-level goal and may not know the plan's low-level context.
|
||||||
|
|||||||
@ -70,7 +70,7 @@ Skipping this step is the #1 cause of incorrect or incomplete plans.
|
|||||||
Each task follows this structure:
|
Each task follows this structure:
|
||||||
|
|
||||||
```markdown
|
```markdown
|
||||||
## Task [N]: [Short descriptive title]
|
### Task [N]: [Short descriptive title]
|
||||||
|
|
||||||
**Description:** One or two paragraphs explaining what this task accomplishes.
|
**Description:** One or two paragraphs explaining what this task accomplishes.
|
||||||
Should be clear and concise.
|
Should be clear and concise.
|
||||||
@ -153,6 +153,45 @@ Announce the save path `.agents/plans/YYYY-MM-DD-<slug>.md` (today's date,
|
|||||||
lowercase hyphen-separated slug, e.g. `2026-09-10-add-batch-get-profiles`;
|
lowercase hyphen-separated slug, e.g. `2026-09-10-add-batch-get-profiles`;
|
||||||
an explicit user path wins).
|
an explicit user path wins).
|
||||||
|
|
||||||
|
### Derived plans
|
||||||
|
|
||||||
|
Never invent a fresh slug when the plan derives from an existing one.
|
||||||
|
The derived name is `<parent-basename>` plus one suffix per level,
|
||||||
|
joined with `--` (double hyphen; single hyphens already separate
|
||||||
|
slug words, so `--` marks where the derivation starts). The parent
|
||||||
|
name is never edited, and no new date is added — the parent prefix
|
||||||
|
already carries its date, which keeps parent and derivatives adjacent
|
||||||
|
in `ls`. Record the real creation date inside the plan (`Created:`).
|
||||||
|
|
||||||
|
Valid names match:
|
||||||
|
|
||||||
|
```
|
||||||
|
^\d{4}-\d{2}-\d{2}-[a-z0-9-]+(--(review-\d{2}|task-\d{2})(-[a-z0-9-]+)?)*\.md$
|
||||||
|
```
|
||||||
|
|
||||||
|
- `review-NN` — a new plan addressing findings of a `review-code` or
|
||||||
|
`review-plan` on already-implemented work. `NN` counts reviews of
|
||||||
|
that parent from `01`. Example: parent
|
||||||
|
`2026-09-14-paste-before-init-crash.md` →
|
||||||
|
`2026-09-14-paste-before-init-crash--review-01.md`,
|
||||||
|
then `--review-02.md`.
|
||||||
|
- `task-NN-<short-slug>` — sub-plan for task `NN` of a high-level
|
||||||
|
roadmap plan. `NN` is the roadmap task number. Example: parent
|
||||||
|
`2026-09-20-upload-pipeline-roadmap.md` →
|
||||||
|
`2026-09-20-upload-pipeline-roadmap--task-01-chunk-upload.md`.
|
||||||
|
Levels chain: `...--task-02-gc--review-01.md`.
|
||||||
|
|
||||||
|
Never use `v2`, `final`, `new`, or `fix2` as suffixes. Keep the
|
||||||
|
optional short slug to 3-4 lowercase hyphen-separated words.
|
||||||
|
|
||||||
|
Every derived plan opens its `Context` with:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
Parent: `<parent-basename>.md`
|
||||||
|
Source: review-code over `<commit>` (branch `<branch>`) | task `NN` of roadmap `<parent-basename>.md`
|
||||||
|
Created: YYYY-MM-DD
|
||||||
|
```
|
||||||
|
|
||||||
End the response by suggesting the next steps: `/review-plan` to get a second
|
End the response by suggesting the next steps: `/review-plan` to get a second
|
||||||
opinion on the plan and `/implement-plan` to execute it.
|
opinion on the plan and `/implement-plan` to execute it.
|
||||||
|
|
||||||
@ -163,6 +202,10 @@ Use this document shape:
|
|||||||
```markdown
|
```markdown
|
||||||
# Plan: Title
|
# Plan: Title
|
||||||
|
|
||||||
|
Status: draft | reviewed | done
|
||||||
|
Review Log:
|
||||||
|
- YYYY-MM-DDTHH:MM:SSZ — <what changed and why, one line per entry>
|
||||||
|
|
||||||
## Context
|
## Context
|
||||||
## Affected Modules
|
## Affected Modules
|
||||||
## Architecture Decisions
|
## Architecture Decisions
|
||||||
@ -174,6 +217,23 @@ Use this document shape:
|
|||||||
## Open Questions
|
## Open Questions
|
||||||
```
|
```
|
||||||
|
|
||||||
|
`Status` and `Review Log` are write-restricted metadata, not free text:
|
||||||
|
|
||||||
|
- `make-a-plan` creates every plan with `Status: draft` and an empty
|
||||||
|
log. `reviewed` never means "a review was emitted" — it means
|
||||||
|
"review feedback was incorporated". A plan approved with no changes
|
||||||
|
goes `draft` → `done` without passing through `reviewed`.
|
||||||
|
- Only a user-triggered apply step writes them before implementation:
|
||||||
|
when the user says to apply `review-plan` findings, `make-a-plan`
|
||||||
|
applies the changes, flips to `reviewed`, and appends one UTC
|
||||||
|
ISO 8601 line describing what changed.
|
||||||
|
- `implement-plan` flips to `done` on completion and appends one line
|
||||||
|
with the issue URL when one exists (standalone mode); otherwise
|
||||||
|
just `done`. Never record commit hashes — they rot on amend/rebase
|
||||||
|
and git already links the commit.
|
||||||
|
- The log is append-only: never rewrite or delete lines.
|
||||||
|
- `review-plan` and `review-code` never write these fields.
|
||||||
|
|
||||||
Omit empty sections only when they do not apply. Every implementation task
|
Omit empty sections only when they do not apply. Every implementation task
|
||||||
still requires acceptance criteria, verification, dependencies, likely files,
|
still requires acceptance criteria, verification, dependencies, likely files,
|
||||||
and scope.
|
and scope.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user