generate-closure-report
Triggers
Russian: «сформируй отчёт о закрытии», «закрой проект», «подготовь closure report», «отчёт о закрытии проекта»
English: "generate closure report", "close project", "project closure report", "prepare closure report"
Language Detection
Determine the language of the user's request:
- If the request is in Russian → use templates with
-ru suffix
- Otherwise → use templates with
-en suffix
All output (headings, labels, comments, instructions) must match the detected language.
1. Input Data
| Data |
Required |
Source |
Notes |
| Project charter |
yes |
knowledge (project-charter.md) |
Goal, deliverables, team, sponsor, budget, timeline |
| Plan-fact report |
yes |
knowledge (plan-fact-report.md) |
Deviation summary, actual dates/budget/scope. If multiple files — use the latest by date |
| Lessons learned |
yes |
chat |
User provides in any format: retrospective results, questionnaire answers, free text. Agent structures and assigns categories |
| Risk register |
no |
knowledge (risk-register.md) |
For section 4. If unavailable — agent asks the user about realized risks |
| Open items |
no |
chat |
Tasks/questions remaining after closure. If not provided — replace section with "All items closed" |
| Lessons source |
no |
chat |
team retrospective / questionnaire / PM input in chat. Default: PM input in chat |
If required data is missing — request it (system-prompt-draft.md §3.2):
To generate the project closure report, the following is needed:
1. Project charter (project-charter.md) — in knowledge or paste in chat.
2. Plan-fact report (plan-fact-report.md) — in knowledge or paste in chat.
3. Project lessons — in any format:
— team retrospective results;
— questionnaire answers;
— free-form description: what went well, what went wrong, what to do differently.
Available data: [list what is present].
Missing: [specify].
2. Execution Algorithm
- Verify input data. Check for minimum: charter, plan-fact report, lessons from user. Missing → request using the template from §1. Do NOT generate a stub report, template, or example — respond ONLY with a data request. Present → step 2.
- Structure lessons. If data is free-form — categorize into: Processes, Technologies, Communications, Resources, Risks. For each lesson — formulate a recommendation. Count: 1 to 5, only those supported by data. Do not pad artificially.
- Check data for contradictions. If charter data conflicts with plan-fact report (e.g., different planned dates or budget) — do NOT choose independently. List the discrepancies, ask which data is current. Exception: if the user explicitly corrects in chat — use the correction.
- Read the template
closure-report from project knowledge. Select the file with the appropriate language suffix based on Language Detection.
- Fill section 1 (general information): planned data from charter, actual data from plan-fact report (summary).
- Fill section 2 (project results): list of deliverables from charter (section 2, "Project Result"). Actual status from plan-fact report (scope data) or from user. Split into "Delivered" / "Not delivered / deferred". For each incomplete deliverable — state the reason. If reason not provided — use
[clarify].
- Fill section 3 (plan-fact deviations): copy the summary table from plan-fact-report.md (section 1). Data: plan, actual, deviation — without recalculation. Rephrase the "Comment" column in a closing tone (1 sentence per metric). At the bottom — reference: "Details — in
plan-fact-report.md."
- Fill section 4 (realized risks):
- If
risk-register.md is available → extract risks with status "realized" or mentioned in user data. Verify: each risk in section 4 must have an ID from the register.
- If
risk-register.md is unavailable → use data from user. If user did not specify realized risks — ask: "Which planned risks were realized? If none — I will note 'No realized risks'."
- If no risks occurred → replace the table with: "No realized risks".
- Fill section 5 (lessons learned): 1 to 5 lessons, structured in step 2. Category from the reference in §3.
- Fill section 6 (open items) and section 7 (closure approval):
- Section 6: if user provided open items → fill in. If not → replace the table with: "All items closed".
- Section 7: names from charter (Sponsor, PM). Dates — empty.
- Verify the result against the checklist (section 5 of this spec). Present the result in chat. Format (system-prompt-draft.md §3.4):
- What was done: "Generated project closure report based on [list sources]".
- Assumptions: list all (if any).
- Key outcomes: 1–3 lines — main results (delivered X of Y, budget, timeline).
- Required: "Approve, provide comments, or reject".
- Do not show system file paths. Use name only: "Report saved as closure-report.md".
- Wait for user response (system-prompt-draft.md §3.5).
- Approval → produce the final text.
- Comments → revise, show updated version. After the 3rd iteration — ask: "Continue revising or finalize the current version?"
- After approval:
- Offer the user text to insert into log.md and project-state.md (system-prompt-draft.md §11).
- State: "Closure report approved. Project completed." This is the final skill in the MVP chain — no subsequent tasks.
3. Section Fill Rules
Section 1. General Information
- Project goal — from charter (section 1). Copy as-is, do not rephrase.
- Sponsor — from charter (section 5 or header).
- Start and end dates (planned) — from charter (section 3).
- End date (actual) — from plan-fact report (last actual date) or from user. If project closes early — state the actual date with a note.
- Budget (planned) — from charter (section 4). Budget (actual) — from plan-fact report (summary).
Section 2. Project Results
- Delivered: each deliverable from charter (section 2, "Included") that is complete. Format:
deliverable — brief result description.
- Not delivered / deferred: deliverables that are incomplete or deferred. Format:
deliverable — reason: [explanation]. If reason not provided by user — [clarify].
- Status source: plan-fact report (scope data) > user data in chat.
- If a deliverable is partially complete — list under "Delivered" with a "partial" note and description of what was excluded.
Section 3. Plan-Fact Deviations
- Direct transfer of the summary table from plan-fact-report.md (section 1, 3 rows: timeline, budget, scope). Do not recalculate data.
- "Comment" column — rephrase from plan-fact report in a closing tone. One sentence per metric. Example: "Delay +1 week due to Safari hotfix" → "Project completed with a +1 week delay; root cause — Safari incident during launch phase".
- If budget was absent in plan-fact report — replace the budget row with "Budget — data unavailable".
- Below the table — in italics: Details — in
plan-fact-report.md.
Section 4. Realized Risks
Conditional section.
- If risks were realized — table with columns: ID, Risk, Project Impact, Response Result.
- ID — from risk-register.md (if available). If register unavailable — leave empty or assign R1, R2, ...
- Project Impact — specific: what happened, what consequences (delay, overrun, scope change).
- Response Result — what was done: did the response plan work, what actions were taken.
- If no risks occurred → replace the table with: "No realized risks".
- Do not include risks that were in the register but did not materialize.
Section 5. Lessons Learned
- 1 to 5 lessons. Count is determined by user data — do not pad artificially.
- Columns: #, Lesson, Category, Recommendation.
- Category — from reference:
Processes / Technologies / Communications / Resources / Risks.
- Lesson — a fact or observation. Wording: what happened and why it matters.
- Recommendation — a concrete action for future projects. Not an abstraction.
- If user provided lessons without categories — agent assigns based on content.
Section 6. Open Items and Handover
Conditional section.
- If open items exist — table: #, Item/Task, Owner, Deadline.
- Owner — from user data. If not specified —
[clarify].
- Deadline — specific date (YYYY-MM-DD). If not specified —
[clarify].
- If no open items → replace the table with: "All items closed".
Section 7. Closure Approval
- Sponsor and PM — from charter (section 5). Date — empty (filled upon approval).
Header Metadata
Version: 1.0
Date: current generation date.
File: closure-report.md
Document status: draft (on generation). After approval — approved.
Project manager: from charter.
Lessons source: from input data. Default: PM input in chat.
4. Placeholder Table
Placeholders {{}} in the template are fill guides, not auto-substitution variables. Replace each with the corresponding value from input data.
| Placeholder |
Required |
Source |
Allowed Values |
{{project_name}} |
yes |
charter |
text |
{{date}} |
yes |
system |
YYYY-MM-DD |
{{pm_name}} |
yes |
charter |
name |
{{lessons_source}} |
yes |
chat (default: PM input in chat) |
team retrospective / questionnaire / PM input in chat |
{{project_goal}} |
yes |
charter (section 1) |
text |
{{sponsor_name}} |
yes |
charter |
name |
{{planned_start}} |
yes |
charter (section 3) |
YYYY-MM-DD |
{{planned_end}} |
yes |
charter (section 3) |
YYYY-MM-DD |
{{actual_end}} |
yes |
plan-fact report / chat |
YYYY-MM-DD |
{{planned_budget}} |
no |
charter (section 4) |
number + currency |
{{actual_budget}} |
no |
plan-fact report |
number + currency |
{{deliverable_N}} |
yes (≥1) |
charter (section 2) |
deliverable name |
{{status_N}} |
yes |
plan-fact report / chat |
brief result description |
{{excluded_N}} |
no |
charter / plan-fact report |
undelivered deliverable name |
{{reason_N}} |
no |
chat / plan-fact report |
reason or [clarify] |
{{planned_duration}} |
yes |
plan-fact report (summary) |
number + unit |
{{actual_duration}} |
yes |
plan-fact report (summary) |
number + unit |
{{delta_time}} |
yes |
plan-fact report (summary) |
text (e.g., "+1 week (+8%)") |
{{comment_time}} |
yes |
agent (based on plan-fact report) |
closing comment, 1 sentence |
{{delta_budget}} |
no |
plan-fact report (summary) |
text (e.g., "-$3,600 (-4.5%)") |
{{comment_budget}} |
no |
agent (based on plan-fact report) |
closing comment, 1 sentence |
{{planned_scope}} |
yes |
plan-fact report (summary) |
number + unit (deliverables) |
{{actual_scope}} |
yes |
plan-fact report (summary) |
number + unit |
{{delta_scope}} |
yes |
plan-fact report (summary) |
text (e.g., "-1 deliverable") |
{{comment_scope}} |
yes |
agent (based on plan-fact report) |
closing comment, 1 sentence |
{{risk_id}} |
no |
risk-register / agent |
ID (e.g., R001) or empty |
{{risk_description}} |
no |
risk-register / chat |
risk description |
{{impact}} |
no |
chat / agent |
specific project impact |
{{response_result}} |
no |
chat / agent |
response result |
{{lesson_N}} |
yes (≥1) |
chat (structured by agent) |
text — fact/observation |
{{category_N}} |
yes |
agent |
Processes / Technologies / Communications / Resources / Risks |
{{recommendation_N}} |
yes |
agent |
concrete action |
{{open_item_N}} |
no |
chat |
question or task |
{{owner_N}} |
no |
chat |
owner or [clarify] |
{{deadline_N}} |
no |
chat |
YYYY-MM-DD or [clarify] |
5. Validation Checklist
Before presenting the result to the user — verify:
6. Dependencies
Consumes (input):
project-charter.md — from skill generate-charter (goal, deliverables, team, budget, timeline)
plan-fact-report.md — from skill generate-plan-fact-report (deviation summary, actual data)
risk-register.md — from skill generate-risk-register (optional, for realized risks)
- Lessons and open items — from user (via chat)
Produces (output): project closure report — the final artifact. Not consumed by other MVP skills.
In Product 1: additionally consumes data from generate-questionnaire (team lessons via questionnaire).
After report approval, user should upload closure-report.md to project knowledge for archival.
7. Example Invocation
User command:
Generate the project closure report. Charter and plan-fact report are in knowledge. Risk register too.
Lessons:
— Underestimated DB filter complexity, lost a week. Need to budget buffer for unknown tasks.
— Formalized change request saved us from scope creep — CEO wanted to add Intercom, but impact assessment stopped it.
— Safari testing was done only before release — needs to happen earlier.
Open items:
— Email integration assigned to Dmitry, deadline July 31.
— Pricing — on me, by August 1.
Agent response (after generation):
Generated project closure report for "ClientBoard" based on: charter, plan-fact report, risk register, lessons from chat.
Assumptions:
- Lessons source: PM input in chat.
- Realized risks identified based on risk-register.md and PM data.
Key outcomes:
- Delivered 4 of 5 deliverables (email integration deferred).
- Budget: $76,400 of $80,000 (4.5% savings).
- Timeline: +1 week (13 instead of 12).
Required: approve, provide comments, or reject.
[report text]
Changelog
| Date |
Version |
Change |
| 2026-03-26 |
1.0 |
Skill created. Aggregation from charter + plan-fact report + lessons. Conditional sections 4/6. 1 to 5 lessons |
1---2name: generate-closure-report3description: Generates a project closure report aggregating data from charter, plan-fact report, risk register, and lessons learned. Last artifact of the Closing phase. Summarizes project outcomes, deviations, realized risks, and lessons.4---56# generate-closure-report78## Triggers910**Russian:** «сформируй отчёт о закрытии», «закрой проект», «подготовь closure report», «отчёт о закрытии проекта»11**English:** "generate closure report", "close project", "project closure report", "prepare closure report"1213## Language Detection1415Determine the language of the user's request:16- If the request is in Russian → use templates with `-ru` suffix17- Otherwise → use templates with `-en` suffix1819All output (headings, labels, comments, instructions) must match the detected language.2021---2223## 1. Input Data2425| Data | Required | Source | Notes |26|------|:--------:|--------|-------|27| Project charter | yes | knowledge (`project-charter.md`) | Goal, deliverables, team, sponsor, budget, timeline |28| Plan-fact report | yes | knowledge (`plan-fact-report.md`) | Deviation summary, actual dates/budget/scope. If multiple files — use the latest by date |29| Lessons learned | yes | chat | User provides in any format: retrospective results, questionnaire answers, free text. Agent structures and assigns categories |30| Risk register | no | knowledge (`risk-register.md`) | For section 4. If unavailable — agent asks the user about realized risks |31| Open items | no | chat | Tasks/questions remaining after closure. If not provided — replace section with "All items closed" |32| Lessons source | no | chat | `team retrospective` / `questionnaire` / `PM input in chat`. Default: `PM input in chat` |3334If required data is missing — request it (system-prompt-draft.md §3.2):3536```37To generate the project closure report, the following is needed:381. Project charter (project-charter.md) — in knowledge or paste in chat.392. Plan-fact report (plan-fact-report.md) — in knowledge or paste in chat.403. Project lessons — in any format:41 — team retrospective results;42 — questionnaire answers;43 — free-form description: what went well, what went wrong, what to do differently.44Available data: [list what is present].45Missing: [specify].46```4748---4950## 2. Execution Algorithm51521. **Verify input data.** Check for minimum: charter, plan-fact report, lessons from user. Missing → request using the template from §1. Do NOT generate a stub report, template, or example — respond ONLY with a data request. Present → step 2.532. **Structure lessons.** If data is free-form — categorize into: Processes, Technologies, Communications, Resources, Risks. For each lesson — formulate a recommendation. Count: 1 to 5, only those supported by data. Do not pad artificially.543. **Check data for contradictions.** If charter data conflicts with plan-fact report (e.g., different planned dates or budget) — do NOT choose independently. List the discrepancies, ask which data is current. Exception: if the user explicitly corrects in chat — use the correction.554. **Read the template** `closure-report` from project knowledge. Select the file with the appropriate language suffix based on Language Detection.565. **Fill section 1** (general information): planned data from charter, actual data from plan-fact report (summary).576. **Fill section 2** (project results): list of deliverables from charter (section 2, "Project Result"). Actual status from plan-fact report (scope data) or from user. Split into "Delivered" / "Not delivered / deferred". For each incomplete deliverable — state the reason. If reason not provided — use `[clarify]`.587. **Fill section 3** (plan-fact deviations): copy the summary table from plan-fact-report.md (section 1). Data: plan, actual, deviation — without recalculation. Rephrase the "Comment" column in a closing tone (1 sentence per metric). At the bottom — reference: "Details — in `plan-fact-report.md`."598. **Fill section 4** (realized risks):60 - If `risk-register.md` is available → extract risks with status "realized" or mentioned in user data. Verify: each risk in section 4 must have an ID from the register.61 - If `risk-register.md` is unavailable → use data from user. If user did not specify realized risks — ask: "Which planned risks were realized? If none — I will note 'No realized risks'."62 - If no risks occurred → replace the table with: "No realized risks".639. **Fill section 5** (lessons learned): 1 to 5 lessons, structured in step 2. Category from the reference in §3.6410. **Fill section 6** (open items) and section 7 (closure approval):65 - Section 6: if user provided open items → fill in. If not → replace the table with: "All items closed".66 - Section 7: names from charter (Sponsor, PM). Dates — empty.6711. **Verify the result** against the checklist (section 5 of this spec). Present the result in chat. Format (system-prompt-draft.md §3.4):68 - What was done: "Generated project closure report based on [list sources]".69 - Assumptions: list all (if any).70 - Key outcomes: 1–3 lines — main results (delivered X of Y, budget, timeline).71 - Required: "Approve, provide comments, or reject".72 - Do not show system file paths. Use name only: "Report saved as closure-report.md".7312. **Wait for user response** (system-prompt-draft.md §3.5).74 - Approval → produce the final text.75 - Comments → revise, show updated version. After the 3rd iteration — ask: "Continue revising or finalize the current version?"76 - **After approval:**77 - Offer the user text to insert into log.md and project-state.md (system-prompt-draft.md §11).78 - State: "Closure report approved. Project completed." This is the final skill in the MVP chain — no subsequent tasks.7980---8182## 3. Section Fill Rules8384### Section 1. General Information8586- Project goal — from charter (section 1). Copy as-is, do not rephrase.87- Sponsor — from charter (section 5 or header).88- Start and end dates (planned) — from charter (section 3).89- End date (actual) — from plan-fact report (last actual date) or from user. If project closes early — state the actual date with a note.90- Budget (planned) — from charter (section 4). Budget (actual) — from plan-fact report (summary).9192### Section 2. Project Results9394- **Delivered:** each deliverable from charter (section 2, "Included") that is complete. Format: `deliverable — brief result description`.95- **Not delivered / deferred:** deliverables that are incomplete or deferred. Format: `deliverable — reason: [explanation]`. If reason not provided by user — `[clarify]`.96- Status source: plan-fact report (scope data) > user data in chat.97- If a deliverable is partially complete — list under "Delivered" with a "partial" note and description of what was excluded.9899### Section 3. Plan-Fact Deviations100101- **Direct transfer** of the summary table from plan-fact-report.md (section 1, 3 rows: timeline, budget, scope). Do not recalculate data.102- "Comment" column — rephrase from plan-fact report in a closing tone. One sentence per metric. Example: "Delay +1 week due to Safari hotfix" → "Project completed with a +1 week delay; root cause — Safari incident during launch phase".103- If budget was absent in plan-fact report — replace the budget row with "Budget — data unavailable".104- Below the table — in italics: *Details — in `plan-fact-report.md`.*105106### Section 4. Realized Risks107108**Conditional section.**109110- If risks were realized — table with columns: ID, Risk, Project Impact, Response Result.111- **ID** — from risk-register.md (if available). If register unavailable — leave empty or assign R1, R2, ...112- **Project Impact** — specific: what happened, what consequences (delay, overrun, scope change).113- **Response Result** — what was done: did the response plan work, what actions were taken.114- If no risks occurred → replace the table with: "No realized risks".115- Do not include risks that were in the register but did not materialize.116117### Section 5. Lessons Learned118119- 1 to 5 lessons. Count is determined by user data — do not pad artificially.120- Columns: #, Lesson, Category, Recommendation.121- **Category** — from reference: `Processes` / `Technologies` / `Communications` / `Resources` / `Risks`.122- **Lesson** — a fact or observation. Wording: what happened and why it matters.123- **Recommendation** — a concrete action for future projects. Not an abstraction.124- If user provided lessons without categories — agent assigns based on content.125126### Section 6. Open Items and Handover127128**Conditional section.**129130- If open items exist — table: #, Item/Task, Owner, Deadline.131- Owner — from user data. If not specified — `[clarify]`.132- Deadline — specific date (YYYY-MM-DD). If not specified — `[clarify]`.133- If no open items → replace the table with: "All items closed".134135### Section 7. Closure Approval136137- Sponsor and PM — from charter (section 5). Date — empty (filled upon approval).138139### Header Metadata140141- `Version`: 1.0142- `Date`: current generation date.143- `File`: `closure-report.md`144- `Document status`: `draft` (on generation). After approval — `approved`.145- `Project manager`: from charter.146- `Lessons source`: from input data. Default: `PM input in chat`.147148---149150## 4. Placeholder Table151152> Placeholders `{{}}` in the template are fill guides, not auto-substitution variables. Replace each with the corresponding value from input data.153154| Placeholder | Required | Source | Allowed Values |155|-------------|:--------:|--------|----------------|156| `{{project_name}}` | yes | charter | text |157| `{{date}}` | yes | system | YYYY-MM-DD |158| `{{pm_name}}` | yes | charter | name |159| `{{lessons_source}}` | yes | chat (default: `PM input in chat`) | `team retrospective` / `questionnaire` / `PM input in chat` |160| `{{project_goal}}` | yes | charter (section 1) | text |161| `{{sponsor_name}}` | yes | charter | name |162| `{{planned_start}}` | yes | charter (section 3) | YYYY-MM-DD |163| `{{planned_end}}` | yes | charter (section 3) | YYYY-MM-DD |164| `{{actual_end}}` | yes | plan-fact report / chat | YYYY-MM-DD |165| `{{planned_budget}}` | no | charter (section 4) | number + currency |166| `{{actual_budget}}` | no | plan-fact report | number + currency |167| `{{deliverable_N}}` | yes (≥1) | charter (section 2) | deliverable name |168| `{{status_N}}` | yes | plan-fact report / chat | brief result description |169| `{{excluded_N}}` | no | charter / plan-fact report | undelivered deliverable name |170| `{{reason_N}}` | no | chat / plan-fact report | reason or `[clarify]` |171| `{{planned_duration}}` | yes | plan-fact report (summary) | number + unit |172| `{{actual_duration}}` | yes | plan-fact report (summary) | number + unit |173| `{{delta_time}}` | yes | plan-fact report (summary) | text (e.g., "+1 week (+8%)") |174| `{{comment_time}}` | yes | agent (based on plan-fact report) | closing comment, 1 sentence |175| `{{delta_budget}}` | no | plan-fact report (summary) | text (e.g., "-$3,600 (-4.5%)") |176| `{{comment_budget}}` | no | agent (based on plan-fact report) | closing comment, 1 sentence |177| `{{planned_scope}}` | yes | plan-fact report (summary) | number + unit (deliverables) |178| `{{actual_scope}}` | yes | plan-fact report (summary) | number + unit |179| `{{delta_scope}}` | yes | plan-fact report (summary) | text (e.g., "-1 deliverable") |180| `{{comment_scope}}` | yes | agent (based on plan-fact report) | closing comment, 1 sentence |181| `{{risk_id}}` | no | risk-register / agent | ID (e.g., R001) or empty |182| `{{risk_description}}` | no | risk-register / chat | risk description |183| `{{impact}}` | no | chat / agent | specific project impact |184| `{{response_result}}` | no | chat / agent | response result |185| `{{lesson_N}}` | yes (≥1) | chat (structured by agent) | text — fact/observation |186| `{{category_N}}` | yes | agent | `Processes` / `Technologies` / `Communications` / `Resources` / `Risks` |187| `{{recommendation_N}}` | yes | agent | concrete action |188| `{{open_item_N}}` | no | chat | question or task |189| `{{owner_N}}` | no | chat | owner or `[clarify]` |190| `{{deadline_N}}` | no | chat | YYYY-MM-DD or `[clarify]` |191192---193194## 5. Validation Checklist195196Before presenting the result to the user — verify:197198- [ ] All required placeholders replaced with values199- [ ] No `{{}}` placeholders remain in text (except removed optional rows)200- [ ] Section 1: planned data matches charter, actual data matches plan-fact report201- [ ] Section 2: all deliverables from charter listed (delivered + undelivered)202- [ ] Section 2: each undelivered deliverable has a reason (or `[clarify]`)203- [ ] Section 3: data matches plan-fact report summary (no recalculation)204- [ ] Section 3: reference to `plan-fact-report.md` present205- [ ] Section 4: if conditional — correctly filled or replaced with "No realized risks"206- [ ] Section 5: 1 to 5 lessons, each with category and recommendation207- [ ] Section 6: if conditional — correctly filled or replaced with "All items closed"208- [ ] All agent assumptions listed when presenting result209- [ ] Document status = `draft`210- [ ] File: `closure-report.md` stated in header211212---213214## 6. Dependencies215216**Consumes (input):**217- `project-charter.md` — from skill `generate-charter` (goal, deliverables, team, budget, timeline)218- `plan-fact-report.md` — from skill `generate-plan-fact-report` (deviation summary, actual data)219- `risk-register.md` — from skill `generate-risk-register` (optional, for realized risks)220- Lessons and open items — from user (via chat)221222**Produces (output):** project closure report — the final artifact. Not consumed by other MVP skills.223224In Product 1: additionally consumes data from `generate-questionnaire` (team lessons via questionnaire).225226After report approval, user should upload `closure-report.md` to project knowledge for archival.227228---229230## 7. Example Invocation231232**User command:**233234> Generate the project closure report. Charter and plan-fact report are in knowledge. Risk register too.235> Lessons:236> — Underestimated DB filter complexity, lost a week. Need to budget buffer for unknown tasks.237> — Formalized change request saved us from scope creep — CEO wanted to add Intercom, but impact assessment stopped it.238> — Safari testing was done only before release — needs to happen earlier.239> Open items:240> — Email integration assigned to Dmitry, deadline July 31.241> — Pricing — on me, by August 1.242243**Agent response (after generation):**244245> Generated project closure report for "ClientBoard" based on: charter, plan-fact report, risk register, lessons from chat.246>247> Assumptions:248> - Lessons source: PM input in chat.249> - Realized risks identified based on risk-register.md and PM data.250>251> Key outcomes:252> - Delivered 4 of 5 deliverables (email integration deferred).253> - Budget: $76,400 of $80,000 (4.5% savings).254> - Timeline: +1 week (13 instead of 12).255>256> Required: approve, provide comments, or reject.257>258> [report text]259260---261262## Changelog263264| Date | Version | Change |265|------|---------|--------|266| 2026-03-26 | 1.0 | Skill created. Aggregation from charter + plan-fact report + lessons. Conditional sections 4/6. 1 to 5 lessons |