diff --git a/archdev/SKILL.md b/archdev/SKILL.md
index c813954..4fc0b73 100644
--- a/archdev/SKILL.md
+++ b/archdev/SKILL.md
@@ -135,7 +135,9 @@ subagents and agents you spawn.
- Claude Code's SubagentStart hook supplies the ArchDev contract in Git
checkouts. Other harnesses may not supply a subagent contract.
- Tell every helper: "Load the `archdev` skill and follow it. Do not post to
- the organization stream; report back instead." The parent owns stream posts.
+ the organization stream; report back instead. Return reusable discoveries,
+ failed approaches, and unresolved questions with evidence as they arise,
+ not only in your final summary." The parent owns stream posts.
- PR reporting requires no local grading, annotations, or stop hold, including
Factory and daemon sessions. Follow the host's publication ownership.
@@ -235,7 +237,8 @@ Three beats, one command
instructions.
2. **As it happens:** post lifecycle moments immediately with
`log post --kind` — `start` once scope is clear, `lesson` on a reusable
- root cause or fix, `abandoned` for a failed approach, `done` (with
+ discovery (not just a fix), `abandoned` for a failed approach, `question`
+ for missing team knowledge or an unresolved decision, `done` (with
the PR URL) or an `@name` `handoff` at the end. Before the first
post, find the project for this work. For an epic, search active projects
for its exact name and matching scope; reuse that match or create it with
@@ -249,6 +252,20 @@ Three beats, one command
retain their sealed `risk.plan` / `risk.task` assessments; PR events carry
no assessment. See monitor.md for the separate reporting flows.
+### Share what the work teaches
+
+Before a final reply or handoff, and at reporting boundaries, ask: what surprised
+me, corrected an assumption, or ruled out an approach? Post a concrete `lesson`
+or `abandoned` while it can save someone work; do not bury it in a PR summary.
+A verified discovery is worth sharing before a fix or PR exists. Search first
+and add new evidence rather than repeating a lesson.
+
+After a bounded local investigation, ask for missing team knowledge with
+`question`: evidence, what you tried, and a specific ask. Mention a real known
+teammate; use a plain note to ask the room if the owner is unknown. Do not wait
+until blocked, and continue independent work while waiting. These knowledge
+posts need no extraction or assessment. Nothing worth sharing is a valid
+outcome: no quotas, invented lessons, or routine progress posts.
For work with an epic, search active projects for that exact epic name and
confirm the scope. Reuse the matching project, or create one named for the epic
diff --git a/archdev/references/monitor.md b/archdev/references/monitor.md
index 9681ca1..1ca2061 100644
--- a/archdev/references/monitor.md
+++ b/archdev/references/monitor.md
@@ -194,10 +194,12 @@ out), ask:
server grade. Missing server results do not block reporting. Separately, for
each PR opened or pushed this session, follow [Pull Requests](../SKILL.md#pull-requests)
before declaring verification complete, or state the blocker.
-6. Did substantial work start, finish, fail, or teach something reusable?
- → it should already be posted; if not, post it now with `--kind`
- (see below). When the same moment is also an event, put both on one
- `archdev log post` call.
+6. What surprised me, corrected an assumption, or ruled out an approach?
+ Did local investigation leave a question that team knowledge could answer?
+ → post a concrete `lesson`, `abandoned`, or `question` while useful (see
+ below), not buried in a PR summary. Also catch up any missed start/done.
+ When the same moment is also an event, put both on one `archdev log post`
+ call. Nothing worth sharing is valid; never manufacture a post.
7. Otherwise, is this worth a free-text note? → `agent.message`. When in
doubt, log the note — ambiguous observations beat silent ones, but
never invent a structured event.
@@ -208,6 +210,26 @@ out), ask:
routines count it, and stream search returns it as the team's lessons. It
works on its own or on top of any `--event`.
+### Notice knowledge-sharing moments
+
+- A test contradicts your assumption, an API has surprising semantics, or a
+ configuration change does not take effect: share what the evidence proves.
+- A setup trap, useful technique, or non-obvious tradeoff could save a teammate
+ work: post a lesson now. A fix, commit or PR is not required. Distinguish
+ observations from hypotheses; do not invent a root cause to fill a template.
+- An approach is ruled out: post `abandoned` with why, instead of repeating the
+ same finding as both an abandoned approach and a lesson.
+- After a bounded check of code, tests, docs and room history, team context is
+ still missing: ask a specific question with evidence and what you tried.
+ Questions need not be product decisions or blockers. Continue independent
+ work while waiting; asking does not pause the task or authorize a risky action.
+
+Before a final reply or handoff, and at reporting boundaries, revisit these
+triggers. Search before a lesson; add new evidence rather than duplicating one.
+Nothing worth sharing is a valid outcome: no quotas, invented lessons, or routine
+progress posts. These knowledge posts need no extraction or assessment.
+Subagents return findings to the parent as they arise; only the parent posts.
+
### Tag every post with its project
Before the first lifecycle post, find the project this work belongs to:
@@ -235,18 +257,18 @@ files posts by project lists it under Unfiled.
| Kind | Post when | Must include |
|---|---|---|
| `start` | scope of substantial work is understood (not on every session) | what and why in one sentence; `-r` task ID or plan path |
-| `lesson` | right away, on a reusable root cause, failure, or fix | symptom, cause, fix; the exact command, error, or file |
+| `lesson` | right away, on a reusable discovery, root cause, technique, or tradeoff | observation, evidence, and what to do differently; the exact command, error, or file |
| `abandoned` | an approach failed and should not be repeated | what was tried, why it failed |
| `done` | a meaningful outcome is finished | intent, externally visible result, actual verification; `-r` PR URL. Anything reusable the work taught goes in its own `lesson`, not inside the done |
| `handoff` | someone else owns the next action | headline starts `@firstname`; current state |
-| `question` | a decision only a teammate can make | headline starts `@firstname`; evidence and options |
+| `question` | missing team knowledge or an unresolved decision after local investigation | headline starts with a real known `@firstname`; evidence, what you tried, and a specific ask |
```sh
"$archdev" log post --project prj_0123456789abcdef01234567 --kind start "Porting lifecycle posts into archdev log" -b "Rooms skill was deprecated, so agents stopped posting lessons" -r tsk_abc123
"$archdev" log post --project prj_0123456789abcdef01234567 --kind lesson "Claude Code exports CLAUDE_CODE_SESSION_ID, not CLAUDE_SESSION_ID" -b "Symptom: posts labeled harness archdev with no session; cause: wrong env name in room-exhaust.ts; fix: read CLAUDE_CODE_SESSION_ID first" -r src/ts/archdev/src/room-exhaust.ts --risk medium --basis room_history
"$archdev" log post --project prj_0123456789abcdef01234567 --kind abandoned "Dropped the env shim for session ids" -b "Wrappers do not propagate it into hook subprocesses"
"$archdev" log post --project prj_0123456789abcdef01234567 --kind done "archdev log carries checkout context again" -b "Rooms UI worktree and my-areas filters show log posts; focused tests pass" -r https://github.com/org/repo/pull/123
-"$archdev" log post --project prj_0123456789abcdef01234567 --kind question "@sam should lifecycle posts also go to team rooms?" -b "Today they go to the org room only"
+"$archdev" log post --project prj_0123456789abcdef01234567 --kind question "@sam why does the partner still require retry compatibility?" -b "Code, tests and room history do not explain ACME_RETRY_COMPAT. Is it preserving a partner constraint? I can continue independent test work while waiting." -r src/retry/compat.rs
"$archdev" log post --project prj_0123456789abcdef01234567 --kind handoff "@sam owns the Rooms UI facet follow-up" -b "CLI side merged; UI still reads only post_type" -r https://github.com/org/repo/pull/123
```
@@ -268,6 +290,9 @@ Rules:
--payload-file
/event.json`.
It counts as a `done` for teammates and carries the validated event
for activity readers.
+- `question` requires an addressee. If the owner is unknown, ask the room with
+ a plain `log post` note instead of inventing an @mention. Use real observations,
+ paths and teammate identities; the commands above illustrate the format.
- `--answers ` links a post to the teammate `question` it
answers.
- Review each post before sending. Never post raw transcripts; state
diff --git a/plugins/antigravity/skills/archdev/SKILL.md b/plugins/antigravity/skills/archdev/SKILL.md
index c813954..4fc0b73 100644
--- a/plugins/antigravity/skills/archdev/SKILL.md
+++ b/plugins/antigravity/skills/archdev/SKILL.md
@@ -135,7 +135,9 @@ subagents and agents you spawn.
- Claude Code's SubagentStart hook supplies the ArchDev contract in Git
checkouts. Other harnesses may not supply a subagent contract.
- Tell every helper: "Load the `archdev` skill and follow it. Do not post to
- the organization stream; report back instead." The parent owns stream posts.
+ the organization stream; report back instead. Return reusable discoveries,
+ failed approaches, and unresolved questions with evidence as they arise,
+ not only in your final summary." The parent owns stream posts.
- PR reporting requires no local grading, annotations, or stop hold, including
Factory and daemon sessions. Follow the host's publication ownership.
@@ -235,7 +237,8 @@ Three beats, one command
instructions.
2. **As it happens:** post lifecycle moments immediately with
`log post --kind` — `start` once scope is clear, `lesson` on a reusable
- root cause or fix, `abandoned` for a failed approach, `done` (with
+ discovery (not just a fix), `abandoned` for a failed approach, `question`
+ for missing team knowledge or an unresolved decision, `done` (with
the PR URL) or an `@name` `handoff` at the end. Before the first
post, find the project for this work. For an epic, search active projects
for its exact name and matching scope; reuse that match or create it with
@@ -249,6 +252,20 @@ Three beats, one command
retain their sealed `risk.plan` / `risk.task` assessments; PR events carry
no assessment. See monitor.md for the separate reporting flows.
+### Share what the work teaches
+
+Before a final reply or handoff, and at reporting boundaries, ask: what surprised
+me, corrected an assumption, or ruled out an approach? Post a concrete `lesson`
+or `abandoned` while it can save someone work; do not bury it in a PR summary.
+A verified discovery is worth sharing before a fix or PR exists. Search first
+and add new evidence rather than repeating a lesson.
+
+After a bounded local investigation, ask for missing team knowledge with
+`question`: evidence, what you tried, and a specific ask. Mention a real known
+teammate; use a plain note to ask the room if the owner is unknown. Do not wait
+until blocked, and continue independent work while waiting. These knowledge
+posts need no extraction or assessment. Nothing worth sharing is a valid
+outcome: no quotas, invented lessons, or routine progress posts.
For work with an epic, search active projects for that exact epic name and
confirm the scope. Reuse the matching project, or create one named for the epic
diff --git a/plugins/antigravity/skills/archdev/references/monitor.md b/plugins/antigravity/skills/archdev/references/monitor.md
index 9681ca1..1ca2061 100644
--- a/plugins/antigravity/skills/archdev/references/monitor.md
+++ b/plugins/antigravity/skills/archdev/references/monitor.md
@@ -194,10 +194,12 @@ out), ask:
server grade. Missing server results do not block reporting. Separately, for
each PR opened or pushed this session, follow [Pull Requests](../SKILL.md#pull-requests)
before declaring verification complete, or state the blocker.
-6. Did substantial work start, finish, fail, or teach something reusable?
- → it should already be posted; if not, post it now with `--kind`
- (see below). When the same moment is also an event, put both on one
- `archdev log post` call.
+6. What surprised me, corrected an assumption, or ruled out an approach?
+ Did local investigation leave a question that team knowledge could answer?
+ → post a concrete `lesson`, `abandoned`, or `question` while useful (see
+ below), not buried in a PR summary. Also catch up any missed start/done.
+ When the same moment is also an event, put both on one `archdev log post`
+ call. Nothing worth sharing is valid; never manufacture a post.
7. Otherwise, is this worth a free-text note? → `agent.message`. When in
doubt, log the note — ambiguous observations beat silent ones, but
never invent a structured event.
@@ -208,6 +210,26 @@ out), ask:
routines count it, and stream search returns it as the team's lessons. It
works on its own or on top of any `--event`.
+### Notice knowledge-sharing moments
+
+- A test contradicts your assumption, an API has surprising semantics, or a
+ configuration change does not take effect: share what the evidence proves.
+- A setup trap, useful technique, or non-obvious tradeoff could save a teammate
+ work: post a lesson now. A fix, commit or PR is not required. Distinguish
+ observations from hypotheses; do not invent a root cause to fill a template.
+- An approach is ruled out: post `abandoned` with why, instead of repeating the
+ same finding as both an abandoned approach and a lesson.
+- After a bounded check of code, tests, docs and room history, team context is
+ still missing: ask a specific question with evidence and what you tried.
+ Questions need not be product decisions or blockers. Continue independent
+ work while waiting; asking does not pause the task or authorize a risky action.
+
+Before a final reply or handoff, and at reporting boundaries, revisit these
+triggers. Search before a lesson; add new evidence rather than duplicating one.
+Nothing worth sharing is a valid outcome: no quotas, invented lessons, or routine
+progress posts. These knowledge posts need no extraction or assessment.
+Subagents return findings to the parent as they arise; only the parent posts.
+
### Tag every post with its project
Before the first lifecycle post, find the project this work belongs to:
@@ -235,18 +257,18 @@ files posts by project lists it under Unfiled.
| Kind | Post when | Must include |
|---|---|---|
| `start` | scope of substantial work is understood (not on every session) | what and why in one sentence; `-r` task ID or plan path |
-| `lesson` | right away, on a reusable root cause, failure, or fix | symptom, cause, fix; the exact command, error, or file |
+| `lesson` | right away, on a reusable discovery, root cause, technique, or tradeoff | observation, evidence, and what to do differently; the exact command, error, or file |
| `abandoned` | an approach failed and should not be repeated | what was tried, why it failed |
| `done` | a meaningful outcome is finished | intent, externally visible result, actual verification; `-r` PR URL. Anything reusable the work taught goes in its own `lesson`, not inside the done |
| `handoff` | someone else owns the next action | headline starts `@firstname`; current state |
-| `question` | a decision only a teammate can make | headline starts `@firstname`; evidence and options |
+| `question` | missing team knowledge or an unresolved decision after local investigation | headline starts with a real known `@firstname`; evidence, what you tried, and a specific ask |
```sh
"$archdev" log post --project prj_0123456789abcdef01234567 --kind start "Porting lifecycle posts into archdev log" -b "Rooms skill was deprecated, so agents stopped posting lessons" -r tsk_abc123
"$archdev" log post --project prj_0123456789abcdef01234567 --kind lesson "Claude Code exports CLAUDE_CODE_SESSION_ID, not CLAUDE_SESSION_ID" -b "Symptom: posts labeled harness archdev with no session; cause: wrong env name in room-exhaust.ts; fix: read CLAUDE_CODE_SESSION_ID first" -r src/ts/archdev/src/room-exhaust.ts --risk medium --basis room_history
"$archdev" log post --project prj_0123456789abcdef01234567 --kind abandoned "Dropped the env shim for session ids" -b "Wrappers do not propagate it into hook subprocesses"
"$archdev" log post --project prj_0123456789abcdef01234567 --kind done "archdev log carries checkout context again" -b "Rooms UI worktree and my-areas filters show log posts; focused tests pass" -r https://github.com/org/repo/pull/123
-"$archdev" log post --project prj_0123456789abcdef01234567 --kind question "@sam should lifecycle posts also go to team rooms?" -b "Today they go to the org room only"
+"$archdev" log post --project prj_0123456789abcdef01234567 --kind question "@sam why does the partner still require retry compatibility?" -b "Code, tests and room history do not explain ACME_RETRY_COMPAT. Is it preserving a partner constraint? I can continue independent test work while waiting." -r src/retry/compat.rs
"$archdev" log post --project prj_0123456789abcdef01234567 --kind handoff "@sam owns the Rooms UI facet follow-up" -b "CLI side merged; UI still reads only post_type" -r https://github.com/org/repo/pull/123
```
@@ -268,6 +290,9 @@ Rules:
--payload-file /event.json`.
It counts as a `done` for teammates and carries the validated event
for activity readers.
+- `question` requires an addressee. If the owner is unknown, ask the room with
+ a plain `log post` note instead of inventing an @mention. Use real observations,
+ paths and teammate identities; the commands above illustrate the format.
- `--answers ` links a post to the teammate `question` it
answers.
- Review each post before sending. Never post raw transcripts; state
diff --git a/plugins/claude/skills/archdev/SKILL.md b/plugins/claude/skills/archdev/SKILL.md
index c813954..4fc0b73 100644
--- a/plugins/claude/skills/archdev/SKILL.md
+++ b/plugins/claude/skills/archdev/SKILL.md
@@ -135,7 +135,9 @@ subagents and agents you spawn.
- Claude Code's SubagentStart hook supplies the ArchDev contract in Git
checkouts. Other harnesses may not supply a subagent contract.
- Tell every helper: "Load the `archdev` skill and follow it. Do not post to
- the organization stream; report back instead." The parent owns stream posts.
+ the organization stream; report back instead. Return reusable discoveries,
+ failed approaches, and unresolved questions with evidence as they arise,
+ not only in your final summary." The parent owns stream posts.
- PR reporting requires no local grading, annotations, or stop hold, including
Factory and daemon sessions. Follow the host's publication ownership.
@@ -235,7 +237,8 @@ Three beats, one command
instructions.
2. **As it happens:** post lifecycle moments immediately with
`log post --kind` — `start` once scope is clear, `lesson` on a reusable
- root cause or fix, `abandoned` for a failed approach, `done` (with
+ discovery (not just a fix), `abandoned` for a failed approach, `question`
+ for missing team knowledge or an unresolved decision, `done` (with
the PR URL) or an `@name` `handoff` at the end. Before the first
post, find the project for this work. For an epic, search active projects
for its exact name and matching scope; reuse that match or create it with
@@ -249,6 +252,20 @@ Three beats, one command
retain their sealed `risk.plan` / `risk.task` assessments; PR events carry
no assessment. See monitor.md for the separate reporting flows.
+### Share what the work teaches
+
+Before a final reply or handoff, and at reporting boundaries, ask: what surprised
+me, corrected an assumption, or ruled out an approach? Post a concrete `lesson`
+or `abandoned` while it can save someone work; do not bury it in a PR summary.
+A verified discovery is worth sharing before a fix or PR exists. Search first
+and add new evidence rather than repeating a lesson.
+
+After a bounded local investigation, ask for missing team knowledge with
+`question`: evidence, what you tried, and a specific ask. Mention a real known
+teammate; use a plain note to ask the room if the owner is unknown. Do not wait
+until blocked, and continue independent work while waiting. These knowledge
+posts need no extraction or assessment. Nothing worth sharing is a valid
+outcome: no quotas, invented lessons, or routine progress posts.
For work with an epic, search active projects for that exact epic name and
confirm the scope. Reuse the matching project, or create one named for the epic
diff --git a/plugins/claude/skills/archdev/references/monitor.md b/plugins/claude/skills/archdev/references/monitor.md
index 9681ca1..1ca2061 100644
--- a/plugins/claude/skills/archdev/references/monitor.md
+++ b/plugins/claude/skills/archdev/references/monitor.md
@@ -194,10 +194,12 @@ out), ask:
server grade. Missing server results do not block reporting. Separately, for
each PR opened or pushed this session, follow [Pull Requests](../SKILL.md#pull-requests)
before declaring verification complete, or state the blocker.
-6. Did substantial work start, finish, fail, or teach something reusable?
- → it should already be posted; if not, post it now with `--kind`
- (see below). When the same moment is also an event, put both on one
- `archdev log post` call.
+6. What surprised me, corrected an assumption, or ruled out an approach?
+ Did local investigation leave a question that team knowledge could answer?
+ → post a concrete `lesson`, `abandoned`, or `question` while useful (see
+ below), not buried in a PR summary. Also catch up any missed start/done.
+ When the same moment is also an event, put both on one `archdev log post`
+ call. Nothing worth sharing is valid; never manufacture a post.
7. Otherwise, is this worth a free-text note? → `agent.message`. When in
doubt, log the note — ambiguous observations beat silent ones, but
never invent a structured event.
@@ -208,6 +210,26 @@ out), ask:
routines count it, and stream search returns it as the team's lessons. It
works on its own or on top of any `--event`.
+### Notice knowledge-sharing moments
+
+- A test contradicts your assumption, an API has surprising semantics, or a
+ configuration change does not take effect: share what the evidence proves.
+- A setup trap, useful technique, or non-obvious tradeoff could save a teammate
+ work: post a lesson now. A fix, commit or PR is not required. Distinguish
+ observations from hypotheses; do not invent a root cause to fill a template.
+- An approach is ruled out: post `abandoned` with why, instead of repeating the
+ same finding as both an abandoned approach and a lesson.
+- After a bounded check of code, tests, docs and room history, team context is
+ still missing: ask a specific question with evidence and what you tried.
+ Questions need not be product decisions or blockers. Continue independent
+ work while waiting; asking does not pause the task or authorize a risky action.
+
+Before a final reply or handoff, and at reporting boundaries, revisit these
+triggers. Search before a lesson; add new evidence rather than duplicating one.
+Nothing worth sharing is a valid outcome: no quotas, invented lessons, or routine
+progress posts. These knowledge posts need no extraction or assessment.
+Subagents return findings to the parent as they arise; only the parent posts.
+
### Tag every post with its project
Before the first lifecycle post, find the project this work belongs to:
@@ -235,18 +257,18 @@ files posts by project lists it under Unfiled.
| Kind | Post when | Must include |
|---|---|---|
| `start` | scope of substantial work is understood (not on every session) | what and why in one sentence; `-r` task ID or plan path |
-| `lesson` | right away, on a reusable root cause, failure, or fix | symptom, cause, fix; the exact command, error, or file |
+| `lesson` | right away, on a reusable discovery, root cause, technique, or tradeoff | observation, evidence, and what to do differently; the exact command, error, or file |
| `abandoned` | an approach failed and should not be repeated | what was tried, why it failed |
| `done` | a meaningful outcome is finished | intent, externally visible result, actual verification; `-r` PR URL. Anything reusable the work taught goes in its own `lesson`, not inside the done |
| `handoff` | someone else owns the next action | headline starts `@firstname`; current state |
-| `question` | a decision only a teammate can make | headline starts `@firstname`; evidence and options |
+| `question` | missing team knowledge or an unresolved decision after local investigation | headline starts with a real known `@firstname`; evidence, what you tried, and a specific ask |
```sh
"$archdev" log post --project prj_0123456789abcdef01234567 --kind start "Porting lifecycle posts into archdev log" -b "Rooms skill was deprecated, so agents stopped posting lessons" -r tsk_abc123
"$archdev" log post --project prj_0123456789abcdef01234567 --kind lesson "Claude Code exports CLAUDE_CODE_SESSION_ID, not CLAUDE_SESSION_ID" -b "Symptom: posts labeled harness archdev with no session; cause: wrong env name in room-exhaust.ts; fix: read CLAUDE_CODE_SESSION_ID first" -r src/ts/archdev/src/room-exhaust.ts --risk medium --basis room_history
"$archdev" log post --project prj_0123456789abcdef01234567 --kind abandoned "Dropped the env shim for session ids" -b "Wrappers do not propagate it into hook subprocesses"
"$archdev" log post --project prj_0123456789abcdef01234567 --kind done "archdev log carries checkout context again" -b "Rooms UI worktree and my-areas filters show log posts; focused tests pass" -r https://github.com/org/repo/pull/123
-"$archdev" log post --project prj_0123456789abcdef01234567 --kind question "@sam should lifecycle posts also go to team rooms?" -b "Today they go to the org room only"
+"$archdev" log post --project prj_0123456789abcdef01234567 --kind question "@sam why does the partner still require retry compatibility?" -b "Code, tests and room history do not explain ACME_RETRY_COMPAT. Is it preserving a partner constraint? I can continue independent test work while waiting." -r src/retry/compat.rs
"$archdev" log post --project prj_0123456789abcdef01234567 --kind handoff "@sam owns the Rooms UI facet follow-up" -b "CLI side merged; UI still reads only post_type" -r https://github.com/org/repo/pull/123
```
@@ -268,6 +290,9 @@ Rules:
--payload-file /event.json`.
It counts as a `done` for teammates and carries the validated event
for activity readers.
+- `question` requires an addressee. If the owner is unknown, ask the room with
+ a plain `log post` note instead of inventing an @mention. Use real observations,
+ paths and teammate identities; the commands above illustrate the format.
- `--answers ` links a post to the teammate `question` it
answers.
- Review each post before sending. Never post raw transcripts; state
diff --git a/plugins/codex/skills/archdev/SKILL.md b/plugins/codex/skills/archdev/SKILL.md
index c813954..4fc0b73 100644
--- a/plugins/codex/skills/archdev/SKILL.md
+++ b/plugins/codex/skills/archdev/SKILL.md
@@ -135,7 +135,9 @@ subagents and agents you spawn.
- Claude Code's SubagentStart hook supplies the ArchDev contract in Git
checkouts. Other harnesses may not supply a subagent contract.
- Tell every helper: "Load the `archdev` skill and follow it. Do not post to
- the organization stream; report back instead." The parent owns stream posts.
+ the organization stream; report back instead. Return reusable discoveries,
+ failed approaches, and unresolved questions with evidence as they arise,
+ not only in your final summary." The parent owns stream posts.
- PR reporting requires no local grading, annotations, or stop hold, including
Factory and daemon sessions. Follow the host's publication ownership.
@@ -235,7 +237,8 @@ Three beats, one command
instructions.
2. **As it happens:** post lifecycle moments immediately with
`log post --kind` — `start` once scope is clear, `lesson` on a reusable
- root cause or fix, `abandoned` for a failed approach, `done` (with
+ discovery (not just a fix), `abandoned` for a failed approach, `question`
+ for missing team knowledge or an unresolved decision, `done` (with
the PR URL) or an `@name` `handoff` at the end. Before the first
post, find the project for this work. For an epic, search active projects
for its exact name and matching scope; reuse that match or create it with
@@ -249,6 +252,20 @@ Three beats, one command
retain their sealed `risk.plan` / `risk.task` assessments; PR events carry
no assessment. See monitor.md for the separate reporting flows.
+### Share what the work teaches
+
+Before a final reply or handoff, and at reporting boundaries, ask: what surprised
+me, corrected an assumption, or ruled out an approach? Post a concrete `lesson`
+or `abandoned` while it can save someone work; do not bury it in a PR summary.
+A verified discovery is worth sharing before a fix or PR exists. Search first
+and add new evidence rather than repeating a lesson.
+
+After a bounded local investigation, ask for missing team knowledge with
+`question`: evidence, what you tried, and a specific ask. Mention a real known
+teammate; use a plain note to ask the room if the owner is unknown. Do not wait
+until blocked, and continue independent work while waiting. These knowledge
+posts need no extraction or assessment. Nothing worth sharing is a valid
+outcome: no quotas, invented lessons, or routine progress posts.
For work with an epic, search active projects for that exact epic name and
confirm the scope. Reuse the matching project, or create one named for the epic
diff --git a/plugins/codex/skills/archdev/references/monitor.md b/plugins/codex/skills/archdev/references/monitor.md
index 9681ca1..1ca2061 100644
--- a/plugins/codex/skills/archdev/references/monitor.md
+++ b/plugins/codex/skills/archdev/references/monitor.md
@@ -194,10 +194,12 @@ out), ask:
server grade. Missing server results do not block reporting. Separately, for
each PR opened or pushed this session, follow [Pull Requests](../SKILL.md#pull-requests)
before declaring verification complete, or state the blocker.
-6. Did substantial work start, finish, fail, or teach something reusable?
- → it should already be posted; if not, post it now with `--kind`
- (see below). When the same moment is also an event, put both on one
- `archdev log post` call.
+6. What surprised me, corrected an assumption, or ruled out an approach?
+ Did local investigation leave a question that team knowledge could answer?
+ → post a concrete `lesson`, `abandoned`, or `question` while useful (see
+ below), not buried in a PR summary. Also catch up any missed start/done.
+ When the same moment is also an event, put both on one `archdev log post`
+ call. Nothing worth sharing is valid; never manufacture a post.
7. Otherwise, is this worth a free-text note? → `agent.message`. When in
doubt, log the note — ambiguous observations beat silent ones, but
never invent a structured event.
@@ -208,6 +210,26 @@ out), ask:
routines count it, and stream search returns it as the team's lessons. It
works on its own or on top of any `--event`.
+### Notice knowledge-sharing moments
+
+- A test contradicts your assumption, an API has surprising semantics, or a
+ configuration change does not take effect: share what the evidence proves.
+- A setup trap, useful technique, or non-obvious tradeoff could save a teammate
+ work: post a lesson now. A fix, commit or PR is not required. Distinguish
+ observations from hypotheses; do not invent a root cause to fill a template.
+- An approach is ruled out: post `abandoned` with why, instead of repeating the
+ same finding as both an abandoned approach and a lesson.
+- After a bounded check of code, tests, docs and room history, team context is
+ still missing: ask a specific question with evidence and what you tried.
+ Questions need not be product decisions or blockers. Continue independent
+ work while waiting; asking does not pause the task or authorize a risky action.
+
+Before a final reply or handoff, and at reporting boundaries, revisit these
+triggers. Search before a lesson; add new evidence rather than duplicating one.
+Nothing worth sharing is a valid outcome: no quotas, invented lessons, or routine
+progress posts. These knowledge posts need no extraction or assessment.
+Subagents return findings to the parent as they arise; only the parent posts.
+
### Tag every post with its project
Before the first lifecycle post, find the project this work belongs to:
@@ -235,18 +257,18 @@ files posts by project lists it under Unfiled.
| Kind | Post when | Must include |
|---|---|---|
| `start` | scope of substantial work is understood (not on every session) | what and why in one sentence; `-r` task ID or plan path |
-| `lesson` | right away, on a reusable root cause, failure, or fix | symptom, cause, fix; the exact command, error, or file |
+| `lesson` | right away, on a reusable discovery, root cause, technique, or tradeoff | observation, evidence, and what to do differently; the exact command, error, or file |
| `abandoned` | an approach failed and should not be repeated | what was tried, why it failed |
| `done` | a meaningful outcome is finished | intent, externally visible result, actual verification; `-r` PR URL. Anything reusable the work taught goes in its own `lesson`, not inside the done |
| `handoff` | someone else owns the next action | headline starts `@firstname`; current state |
-| `question` | a decision only a teammate can make | headline starts `@firstname`; evidence and options |
+| `question` | missing team knowledge or an unresolved decision after local investigation | headline starts with a real known `@firstname`; evidence, what you tried, and a specific ask |
```sh
"$archdev" log post --project prj_0123456789abcdef01234567 --kind start "Porting lifecycle posts into archdev log" -b "Rooms skill was deprecated, so agents stopped posting lessons" -r tsk_abc123
"$archdev" log post --project prj_0123456789abcdef01234567 --kind lesson "Claude Code exports CLAUDE_CODE_SESSION_ID, not CLAUDE_SESSION_ID" -b "Symptom: posts labeled harness archdev with no session; cause: wrong env name in room-exhaust.ts; fix: read CLAUDE_CODE_SESSION_ID first" -r src/ts/archdev/src/room-exhaust.ts --risk medium --basis room_history
"$archdev" log post --project prj_0123456789abcdef01234567 --kind abandoned "Dropped the env shim for session ids" -b "Wrappers do not propagate it into hook subprocesses"
"$archdev" log post --project prj_0123456789abcdef01234567 --kind done "archdev log carries checkout context again" -b "Rooms UI worktree and my-areas filters show log posts; focused tests pass" -r https://github.com/org/repo/pull/123
-"$archdev" log post --project prj_0123456789abcdef01234567 --kind question "@sam should lifecycle posts also go to team rooms?" -b "Today they go to the org room only"
+"$archdev" log post --project prj_0123456789abcdef01234567 --kind question "@sam why does the partner still require retry compatibility?" -b "Code, tests and room history do not explain ACME_RETRY_COMPAT. Is it preserving a partner constraint? I can continue independent test work while waiting." -r src/retry/compat.rs
"$archdev" log post --project prj_0123456789abcdef01234567 --kind handoff "@sam owns the Rooms UI facet follow-up" -b "CLI side merged; UI still reads only post_type" -r https://github.com/org/repo/pull/123
```
@@ -268,6 +290,9 @@ Rules:
--payload-file /event.json`.
It counts as a `done` for teammates and carries the validated event
for activity readers.
+- `question` requires an addressee. If the owner is unknown, ask the room with
+ a plain `log post` note instead of inventing an @mention. Use real observations,
+ paths and teammate identities; the commands above illustrate the format.
- `--answers ` links a post to the teammate `question` it
answers.
- Review each post before sending. Never post raw transcripts; state
diff --git a/plugins/copilot/skills/archdev/SKILL.md b/plugins/copilot/skills/archdev/SKILL.md
index c813954..4fc0b73 100644
--- a/plugins/copilot/skills/archdev/SKILL.md
+++ b/plugins/copilot/skills/archdev/SKILL.md
@@ -135,7 +135,9 @@ subagents and agents you spawn.
- Claude Code's SubagentStart hook supplies the ArchDev contract in Git
checkouts. Other harnesses may not supply a subagent contract.
- Tell every helper: "Load the `archdev` skill and follow it. Do not post to
- the organization stream; report back instead." The parent owns stream posts.
+ the organization stream; report back instead. Return reusable discoveries,
+ failed approaches, and unresolved questions with evidence as they arise,
+ not only in your final summary." The parent owns stream posts.
- PR reporting requires no local grading, annotations, or stop hold, including
Factory and daemon sessions. Follow the host's publication ownership.
@@ -235,7 +237,8 @@ Three beats, one command
instructions.
2. **As it happens:** post lifecycle moments immediately with
`log post --kind` — `start` once scope is clear, `lesson` on a reusable
- root cause or fix, `abandoned` for a failed approach, `done` (with
+ discovery (not just a fix), `abandoned` for a failed approach, `question`
+ for missing team knowledge or an unresolved decision, `done` (with
the PR URL) or an `@name` `handoff` at the end. Before the first
post, find the project for this work. For an epic, search active projects
for its exact name and matching scope; reuse that match or create it with
@@ -249,6 +252,20 @@ Three beats, one command
retain their sealed `risk.plan` / `risk.task` assessments; PR events carry
no assessment. See monitor.md for the separate reporting flows.
+### Share what the work teaches
+
+Before a final reply or handoff, and at reporting boundaries, ask: what surprised
+me, corrected an assumption, or ruled out an approach? Post a concrete `lesson`
+or `abandoned` while it can save someone work; do not bury it in a PR summary.
+A verified discovery is worth sharing before a fix or PR exists. Search first
+and add new evidence rather than repeating a lesson.
+
+After a bounded local investigation, ask for missing team knowledge with
+`question`: evidence, what you tried, and a specific ask. Mention a real known
+teammate; use a plain note to ask the room if the owner is unknown. Do not wait
+until blocked, and continue independent work while waiting. These knowledge
+posts need no extraction or assessment. Nothing worth sharing is a valid
+outcome: no quotas, invented lessons, or routine progress posts.
For work with an epic, search active projects for that exact epic name and
confirm the scope. Reuse the matching project, or create one named for the epic
diff --git a/plugins/copilot/skills/archdev/references/monitor.md b/plugins/copilot/skills/archdev/references/monitor.md
index 9681ca1..1ca2061 100644
--- a/plugins/copilot/skills/archdev/references/monitor.md
+++ b/plugins/copilot/skills/archdev/references/monitor.md
@@ -194,10 +194,12 @@ out), ask:
server grade. Missing server results do not block reporting. Separately, for
each PR opened or pushed this session, follow [Pull Requests](../SKILL.md#pull-requests)
before declaring verification complete, or state the blocker.
-6. Did substantial work start, finish, fail, or teach something reusable?
- → it should already be posted; if not, post it now with `--kind`
- (see below). When the same moment is also an event, put both on one
- `archdev log post` call.
+6. What surprised me, corrected an assumption, or ruled out an approach?
+ Did local investigation leave a question that team knowledge could answer?
+ → post a concrete `lesson`, `abandoned`, or `question` while useful (see
+ below), not buried in a PR summary. Also catch up any missed start/done.
+ When the same moment is also an event, put both on one `archdev log post`
+ call. Nothing worth sharing is valid; never manufacture a post.
7. Otherwise, is this worth a free-text note? → `agent.message`. When in
doubt, log the note — ambiguous observations beat silent ones, but
never invent a structured event.
@@ -208,6 +210,26 @@ out), ask:
routines count it, and stream search returns it as the team's lessons. It
works on its own or on top of any `--event`.
+### Notice knowledge-sharing moments
+
+- A test contradicts your assumption, an API has surprising semantics, or a
+ configuration change does not take effect: share what the evidence proves.
+- A setup trap, useful technique, or non-obvious tradeoff could save a teammate
+ work: post a lesson now. A fix, commit or PR is not required. Distinguish
+ observations from hypotheses; do not invent a root cause to fill a template.
+- An approach is ruled out: post `abandoned` with why, instead of repeating the
+ same finding as both an abandoned approach and a lesson.
+- After a bounded check of code, tests, docs and room history, team context is
+ still missing: ask a specific question with evidence and what you tried.
+ Questions need not be product decisions or blockers. Continue independent
+ work while waiting; asking does not pause the task or authorize a risky action.
+
+Before a final reply or handoff, and at reporting boundaries, revisit these
+triggers. Search before a lesson; add new evidence rather than duplicating one.
+Nothing worth sharing is a valid outcome: no quotas, invented lessons, or routine
+progress posts. These knowledge posts need no extraction or assessment.
+Subagents return findings to the parent as they arise; only the parent posts.
+
### Tag every post with its project
Before the first lifecycle post, find the project this work belongs to:
@@ -235,18 +257,18 @@ files posts by project lists it under Unfiled.
| Kind | Post when | Must include |
|---|---|---|
| `start` | scope of substantial work is understood (not on every session) | what and why in one sentence; `-r` task ID or plan path |
-| `lesson` | right away, on a reusable root cause, failure, or fix | symptom, cause, fix; the exact command, error, or file |
+| `lesson` | right away, on a reusable discovery, root cause, technique, or tradeoff | observation, evidence, and what to do differently; the exact command, error, or file |
| `abandoned` | an approach failed and should not be repeated | what was tried, why it failed |
| `done` | a meaningful outcome is finished | intent, externally visible result, actual verification; `-r` PR URL. Anything reusable the work taught goes in its own `lesson`, not inside the done |
| `handoff` | someone else owns the next action | headline starts `@firstname`; current state |
-| `question` | a decision only a teammate can make | headline starts `@firstname`; evidence and options |
+| `question` | missing team knowledge or an unresolved decision after local investigation | headline starts with a real known `@firstname`; evidence, what you tried, and a specific ask |
```sh
"$archdev" log post --project prj_0123456789abcdef01234567 --kind start "Porting lifecycle posts into archdev log" -b "Rooms skill was deprecated, so agents stopped posting lessons" -r tsk_abc123
"$archdev" log post --project prj_0123456789abcdef01234567 --kind lesson "Claude Code exports CLAUDE_CODE_SESSION_ID, not CLAUDE_SESSION_ID" -b "Symptom: posts labeled harness archdev with no session; cause: wrong env name in room-exhaust.ts; fix: read CLAUDE_CODE_SESSION_ID first" -r src/ts/archdev/src/room-exhaust.ts --risk medium --basis room_history
"$archdev" log post --project prj_0123456789abcdef01234567 --kind abandoned "Dropped the env shim for session ids" -b "Wrappers do not propagate it into hook subprocesses"
"$archdev" log post --project prj_0123456789abcdef01234567 --kind done "archdev log carries checkout context again" -b "Rooms UI worktree and my-areas filters show log posts; focused tests pass" -r https://github.com/org/repo/pull/123
-"$archdev" log post --project prj_0123456789abcdef01234567 --kind question "@sam should lifecycle posts also go to team rooms?" -b "Today they go to the org room only"
+"$archdev" log post --project prj_0123456789abcdef01234567 --kind question "@sam why does the partner still require retry compatibility?" -b "Code, tests and room history do not explain ACME_RETRY_COMPAT. Is it preserving a partner constraint? I can continue independent test work while waiting." -r src/retry/compat.rs
"$archdev" log post --project prj_0123456789abcdef01234567 --kind handoff "@sam owns the Rooms UI facet follow-up" -b "CLI side merged; UI still reads only post_type" -r https://github.com/org/repo/pull/123
```
@@ -268,6 +290,9 @@ Rules:
--payload-file /event.json`.
It counts as a `done` for teammates and carries the validated event
for activity readers.
+- `question` requires an addressee. If the owner is unknown, ask the room with
+ a plain `log post` note instead of inventing an @mention. Use real observations,
+ paths and teammate identities; the commands above illustrate the format.
- `--answers ` links a post to the teammate `question` it
answers.
- Review each post before sending. Never post raw transcripts; state
diff --git a/plugins/cursor/skills/archdev/SKILL.md b/plugins/cursor/skills/archdev/SKILL.md
index c813954..4fc0b73 100644
--- a/plugins/cursor/skills/archdev/SKILL.md
+++ b/plugins/cursor/skills/archdev/SKILL.md
@@ -135,7 +135,9 @@ subagents and agents you spawn.
- Claude Code's SubagentStart hook supplies the ArchDev contract in Git
checkouts. Other harnesses may not supply a subagent contract.
- Tell every helper: "Load the `archdev` skill and follow it. Do not post to
- the organization stream; report back instead." The parent owns stream posts.
+ the organization stream; report back instead. Return reusable discoveries,
+ failed approaches, and unresolved questions with evidence as they arise,
+ not only in your final summary." The parent owns stream posts.
- PR reporting requires no local grading, annotations, or stop hold, including
Factory and daemon sessions. Follow the host's publication ownership.
@@ -235,7 +237,8 @@ Three beats, one command
instructions.
2. **As it happens:** post lifecycle moments immediately with
`log post --kind` — `start` once scope is clear, `lesson` on a reusable
- root cause or fix, `abandoned` for a failed approach, `done` (with
+ discovery (not just a fix), `abandoned` for a failed approach, `question`
+ for missing team knowledge or an unresolved decision, `done` (with
the PR URL) or an `@name` `handoff` at the end. Before the first
post, find the project for this work. For an epic, search active projects
for its exact name and matching scope; reuse that match or create it with
@@ -249,6 +252,20 @@ Three beats, one command
retain their sealed `risk.plan` / `risk.task` assessments; PR events carry
no assessment. See monitor.md for the separate reporting flows.
+### Share what the work teaches
+
+Before a final reply or handoff, and at reporting boundaries, ask: what surprised
+me, corrected an assumption, or ruled out an approach? Post a concrete `lesson`
+or `abandoned` while it can save someone work; do not bury it in a PR summary.
+A verified discovery is worth sharing before a fix or PR exists. Search first
+and add new evidence rather than repeating a lesson.
+
+After a bounded local investigation, ask for missing team knowledge with
+`question`: evidence, what you tried, and a specific ask. Mention a real known
+teammate; use a plain note to ask the room if the owner is unknown. Do not wait
+until blocked, and continue independent work while waiting. These knowledge
+posts need no extraction or assessment. Nothing worth sharing is a valid
+outcome: no quotas, invented lessons, or routine progress posts.
For work with an epic, search active projects for that exact epic name and
confirm the scope. Reuse the matching project, or create one named for the epic
diff --git a/plugins/cursor/skills/archdev/references/monitor.md b/plugins/cursor/skills/archdev/references/monitor.md
index 9681ca1..1ca2061 100644
--- a/plugins/cursor/skills/archdev/references/monitor.md
+++ b/plugins/cursor/skills/archdev/references/monitor.md
@@ -194,10 +194,12 @@ out), ask:
server grade. Missing server results do not block reporting. Separately, for
each PR opened or pushed this session, follow [Pull Requests](../SKILL.md#pull-requests)
before declaring verification complete, or state the blocker.
-6. Did substantial work start, finish, fail, or teach something reusable?
- → it should already be posted; if not, post it now with `--kind`
- (see below). When the same moment is also an event, put both on one
- `archdev log post` call.
+6. What surprised me, corrected an assumption, or ruled out an approach?
+ Did local investigation leave a question that team knowledge could answer?
+ → post a concrete `lesson`, `abandoned`, or `question` while useful (see
+ below), not buried in a PR summary. Also catch up any missed start/done.
+ When the same moment is also an event, put both on one `archdev log post`
+ call. Nothing worth sharing is valid; never manufacture a post.
7. Otherwise, is this worth a free-text note? → `agent.message`. When in
doubt, log the note — ambiguous observations beat silent ones, but
never invent a structured event.
@@ -208,6 +210,26 @@ out), ask:
routines count it, and stream search returns it as the team's lessons. It
works on its own or on top of any `--event`.
+### Notice knowledge-sharing moments
+
+- A test contradicts your assumption, an API has surprising semantics, or a
+ configuration change does not take effect: share what the evidence proves.
+- A setup trap, useful technique, or non-obvious tradeoff could save a teammate
+ work: post a lesson now. A fix, commit or PR is not required. Distinguish
+ observations from hypotheses; do not invent a root cause to fill a template.
+- An approach is ruled out: post `abandoned` with why, instead of repeating the
+ same finding as both an abandoned approach and a lesson.
+- After a bounded check of code, tests, docs and room history, team context is
+ still missing: ask a specific question with evidence and what you tried.
+ Questions need not be product decisions or blockers. Continue independent
+ work while waiting; asking does not pause the task or authorize a risky action.
+
+Before a final reply or handoff, and at reporting boundaries, revisit these
+triggers. Search before a lesson; add new evidence rather than duplicating one.
+Nothing worth sharing is a valid outcome: no quotas, invented lessons, or routine
+progress posts. These knowledge posts need no extraction or assessment.
+Subagents return findings to the parent as they arise; only the parent posts.
+
### Tag every post with its project
Before the first lifecycle post, find the project this work belongs to:
@@ -235,18 +257,18 @@ files posts by project lists it under Unfiled.
| Kind | Post when | Must include |
|---|---|---|
| `start` | scope of substantial work is understood (not on every session) | what and why in one sentence; `-r` task ID or plan path |
-| `lesson` | right away, on a reusable root cause, failure, or fix | symptom, cause, fix; the exact command, error, or file |
+| `lesson` | right away, on a reusable discovery, root cause, technique, or tradeoff | observation, evidence, and what to do differently; the exact command, error, or file |
| `abandoned` | an approach failed and should not be repeated | what was tried, why it failed |
| `done` | a meaningful outcome is finished | intent, externally visible result, actual verification; `-r` PR URL. Anything reusable the work taught goes in its own `lesson`, not inside the done |
| `handoff` | someone else owns the next action | headline starts `@firstname`; current state |
-| `question` | a decision only a teammate can make | headline starts `@firstname`; evidence and options |
+| `question` | missing team knowledge or an unresolved decision after local investigation | headline starts with a real known `@firstname`; evidence, what you tried, and a specific ask |
```sh
"$archdev" log post --project prj_0123456789abcdef01234567 --kind start "Porting lifecycle posts into archdev log" -b "Rooms skill was deprecated, so agents stopped posting lessons" -r tsk_abc123
"$archdev" log post --project prj_0123456789abcdef01234567 --kind lesson "Claude Code exports CLAUDE_CODE_SESSION_ID, not CLAUDE_SESSION_ID" -b "Symptom: posts labeled harness archdev with no session; cause: wrong env name in room-exhaust.ts; fix: read CLAUDE_CODE_SESSION_ID first" -r src/ts/archdev/src/room-exhaust.ts --risk medium --basis room_history
"$archdev" log post --project prj_0123456789abcdef01234567 --kind abandoned "Dropped the env shim for session ids" -b "Wrappers do not propagate it into hook subprocesses"
"$archdev" log post --project prj_0123456789abcdef01234567 --kind done "archdev log carries checkout context again" -b "Rooms UI worktree and my-areas filters show log posts; focused tests pass" -r https://github.com/org/repo/pull/123
-"$archdev" log post --project prj_0123456789abcdef01234567 --kind question "@sam should lifecycle posts also go to team rooms?" -b "Today they go to the org room only"
+"$archdev" log post --project prj_0123456789abcdef01234567 --kind question "@sam why does the partner still require retry compatibility?" -b "Code, tests and room history do not explain ACME_RETRY_COMPAT. Is it preserving a partner constraint? I can continue independent test work while waiting." -r src/retry/compat.rs
"$archdev" log post --project prj_0123456789abcdef01234567 --kind handoff "@sam owns the Rooms UI facet follow-up" -b "CLI side merged; UI still reads only post_type" -r https://github.com/org/repo/pull/123
```
@@ -268,6 +290,9 @@ Rules:
--payload-file /event.json`.
It counts as a `done` for teammates and carries the validated event
for activity readers.
+- `question` requires an addressee. If the owner is unknown, ask the room with
+ a plain `log post` note instead of inventing an @mention. Use real observations,
+ paths and teammate identities; the commands above illustrate the format.
- `--answers ` links a post to the teammate `question` it
answers.
- Review each post before sending. Never post raw transcripts; state
diff --git a/plugins/grok/skills/archdev/SKILL.md b/plugins/grok/skills/archdev/SKILL.md
index c813954..4fc0b73 100644
--- a/plugins/grok/skills/archdev/SKILL.md
+++ b/plugins/grok/skills/archdev/SKILL.md
@@ -135,7 +135,9 @@ subagents and agents you spawn.
- Claude Code's SubagentStart hook supplies the ArchDev contract in Git
checkouts. Other harnesses may not supply a subagent contract.
- Tell every helper: "Load the `archdev` skill and follow it. Do not post to
- the organization stream; report back instead." The parent owns stream posts.
+ the organization stream; report back instead. Return reusable discoveries,
+ failed approaches, and unresolved questions with evidence as they arise,
+ not only in your final summary." The parent owns stream posts.
- PR reporting requires no local grading, annotations, or stop hold, including
Factory and daemon sessions. Follow the host's publication ownership.
@@ -235,7 +237,8 @@ Three beats, one command
instructions.
2. **As it happens:** post lifecycle moments immediately with
`log post --kind` — `start` once scope is clear, `lesson` on a reusable
- root cause or fix, `abandoned` for a failed approach, `done` (with
+ discovery (not just a fix), `abandoned` for a failed approach, `question`
+ for missing team knowledge or an unresolved decision, `done` (with
the PR URL) or an `@name` `handoff` at the end. Before the first
post, find the project for this work. For an epic, search active projects
for its exact name and matching scope; reuse that match or create it with
@@ -249,6 +252,20 @@ Three beats, one command
retain their sealed `risk.plan` / `risk.task` assessments; PR events carry
no assessment. See monitor.md for the separate reporting flows.
+### Share what the work teaches
+
+Before a final reply or handoff, and at reporting boundaries, ask: what surprised
+me, corrected an assumption, or ruled out an approach? Post a concrete `lesson`
+or `abandoned` while it can save someone work; do not bury it in a PR summary.
+A verified discovery is worth sharing before a fix or PR exists. Search first
+and add new evidence rather than repeating a lesson.
+
+After a bounded local investigation, ask for missing team knowledge with
+`question`: evidence, what you tried, and a specific ask. Mention a real known
+teammate; use a plain note to ask the room if the owner is unknown. Do not wait
+until blocked, and continue independent work while waiting. These knowledge
+posts need no extraction or assessment. Nothing worth sharing is a valid
+outcome: no quotas, invented lessons, or routine progress posts.
For work with an epic, search active projects for that exact epic name and
confirm the scope. Reuse the matching project, or create one named for the epic
diff --git a/plugins/grok/skills/archdev/references/monitor.md b/plugins/grok/skills/archdev/references/monitor.md
index 9681ca1..1ca2061 100644
--- a/plugins/grok/skills/archdev/references/monitor.md
+++ b/plugins/grok/skills/archdev/references/monitor.md
@@ -194,10 +194,12 @@ out), ask:
server grade. Missing server results do not block reporting. Separately, for
each PR opened or pushed this session, follow [Pull Requests](../SKILL.md#pull-requests)
before declaring verification complete, or state the blocker.
-6. Did substantial work start, finish, fail, or teach something reusable?
- → it should already be posted; if not, post it now with `--kind`
- (see below). When the same moment is also an event, put both on one
- `archdev log post` call.
+6. What surprised me, corrected an assumption, or ruled out an approach?
+ Did local investigation leave a question that team knowledge could answer?
+ → post a concrete `lesson`, `abandoned`, or `question` while useful (see
+ below), not buried in a PR summary. Also catch up any missed start/done.
+ When the same moment is also an event, put both on one `archdev log post`
+ call. Nothing worth sharing is valid; never manufacture a post.
7. Otherwise, is this worth a free-text note? → `agent.message`. When in
doubt, log the note — ambiguous observations beat silent ones, but
never invent a structured event.
@@ -208,6 +210,26 @@ out), ask:
routines count it, and stream search returns it as the team's lessons. It
works on its own or on top of any `--event`.
+### Notice knowledge-sharing moments
+
+- A test contradicts your assumption, an API has surprising semantics, or a
+ configuration change does not take effect: share what the evidence proves.
+- A setup trap, useful technique, or non-obvious tradeoff could save a teammate
+ work: post a lesson now. A fix, commit or PR is not required. Distinguish
+ observations from hypotheses; do not invent a root cause to fill a template.
+- An approach is ruled out: post `abandoned` with why, instead of repeating the
+ same finding as both an abandoned approach and a lesson.
+- After a bounded check of code, tests, docs and room history, team context is
+ still missing: ask a specific question with evidence and what you tried.
+ Questions need not be product decisions or blockers. Continue independent
+ work while waiting; asking does not pause the task or authorize a risky action.
+
+Before a final reply or handoff, and at reporting boundaries, revisit these
+triggers. Search before a lesson; add new evidence rather than duplicating one.
+Nothing worth sharing is a valid outcome: no quotas, invented lessons, or routine
+progress posts. These knowledge posts need no extraction or assessment.
+Subagents return findings to the parent as they arise; only the parent posts.
+
### Tag every post with its project
Before the first lifecycle post, find the project this work belongs to:
@@ -235,18 +257,18 @@ files posts by project lists it under Unfiled.
| Kind | Post when | Must include |
|---|---|---|
| `start` | scope of substantial work is understood (not on every session) | what and why in one sentence; `-r` task ID or plan path |
-| `lesson` | right away, on a reusable root cause, failure, or fix | symptom, cause, fix; the exact command, error, or file |
+| `lesson` | right away, on a reusable discovery, root cause, technique, or tradeoff | observation, evidence, and what to do differently; the exact command, error, or file |
| `abandoned` | an approach failed and should not be repeated | what was tried, why it failed |
| `done` | a meaningful outcome is finished | intent, externally visible result, actual verification; `-r` PR URL. Anything reusable the work taught goes in its own `lesson`, not inside the done |
| `handoff` | someone else owns the next action | headline starts `@firstname`; current state |
-| `question` | a decision only a teammate can make | headline starts `@firstname`; evidence and options |
+| `question` | missing team knowledge or an unresolved decision after local investigation | headline starts with a real known `@firstname`; evidence, what you tried, and a specific ask |
```sh
"$archdev" log post --project prj_0123456789abcdef01234567 --kind start "Porting lifecycle posts into archdev log" -b "Rooms skill was deprecated, so agents stopped posting lessons" -r tsk_abc123
"$archdev" log post --project prj_0123456789abcdef01234567 --kind lesson "Claude Code exports CLAUDE_CODE_SESSION_ID, not CLAUDE_SESSION_ID" -b "Symptom: posts labeled harness archdev with no session; cause: wrong env name in room-exhaust.ts; fix: read CLAUDE_CODE_SESSION_ID first" -r src/ts/archdev/src/room-exhaust.ts --risk medium --basis room_history
"$archdev" log post --project prj_0123456789abcdef01234567 --kind abandoned "Dropped the env shim for session ids" -b "Wrappers do not propagate it into hook subprocesses"
"$archdev" log post --project prj_0123456789abcdef01234567 --kind done "archdev log carries checkout context again" -b "Rooms UI worktree and my-areas filters show log posts; focused tests pass" -r https://github.com/org/repo/pull/123
-"$archdev" log post --project prj_0123456789abcdef01234567 --kind question "@sam should lifecycle posts also go to team rooms?" -b "Today they go to the org room only"
+"$archdev" log post --project prj_0123456789abcdef01234567 --kind question "@sam why does the partner still require retry compatibility?" -b "Code, tests and room history do not explain ACME_RETRY_COMPAT. Is it preserving a partner constraint? I can continue independent test work while waiting." -r src/retry/compat.rs
"$archdev" log post --project prj_0123456789abcdef01234567 --kind handoff "@sam owns the Rooms UI facet follow-up" -b "CLI side merged; UI still reads only post_type" -r https://github.com/org/repo/pull/123
```
@@ -268,6 +290,9 @@ Rules:
--payload-file /event.json`.
It counts as a `done` for teammates and carries the validated event
for activity readers.
+- `question` requires an addressee. If the owner is unknown, ask the room with
+ a plain `log post` note instead of inventing an @mention. Use real observations,
+ paths and teammate identities; the commands above illustrate the format.
- `--answers ` links a post to the teammate `question` it
answers.
- Review each post before sending. Never post raw transcripts; state
diff --git a/plugins/opencode/skills/archdev/SKILL.md b/plugins/opencode/skills/archdev/SKILL.md
index c813954..4fc0b73 100644
--- a/plugins/opencode/skills/archdev/SKILL.md
+++ b/plugins/opencode/skills/archdev/SKILL.md
@@ -135,7 +135,9 @@ subagents and agents you spawn.
- Claude Code's SubagentStart hook supplies the ArchDev contract in Git
checkouts. Other harnesses may not supply a subagent contract.
- Tell every helper: "Load the `archdev` skill and follow it. Do not post to
- the organization stream; report back instead." The parent owns stream posts.
+ the organization stream; report back instead. Return reusable discoveries,
+ failed approaches, and unresolved questions with evidence as they arise,
+ not only in your final summary." The parent owns stream posts.
- PR reporting requires no local grading, annotations, or stop hold, including
Factory and daemon sessions. Follow the host's publication ownership.
@@ -235,7 +237,8 @@ Three beats, one command
instructions.
2. **As it happens:** post lifecycle moments immediately with
`log post --kind` — `start` once scope is clear, `lesson` on a reusable
- root cause or fix, `abandoned` for a failed approach, `done` (with
+ discovery (not just a fix), `abandoned` for a failed approach, `question`
+ for missing team knowledge or an unresolved decision, `done` (with
the PR URL) or an `@name` `handoff` at the end. Before the first
post, find the project for this work. For an epic, search active projects
for its exact name and matching scope; reuse that match or create it with
@@ -249,6 +252,20 @@ Three beats, one command
retain their sealed `risk.plan` / `risk.task` assessments; PR events carry
no assessment. See monitor.md for the separate reporting flows.
+### Share what the work teaches
+
+Before a final reply or handoff, and at reporting boundaries, ask: what surprised
+me, corrected an assumption, or ruled out an approach? Post a concrete `lesson`
+or `abandoned` while it can save someone work; do not bury it in a PR summary.
+A verified discovery is worth sharing before a fix or PR exists. Search first
+and add new evidence rather than repeating a lesson.
+
+After a bounded local investigation, ask for missing team knowledge with
+`question`: evidence, what you tried, and a specific ask. Mention a real known
+teammate; use a plain note to ask the room if the owner is unknown. Do not wait
+until blocked, and continue independent work while waiting. These knowledge
+posts need no extraction or assessment. Nothing worth sharing is a valid
+outcome: no quotas, invented lessons, or routine progress posts.
For work with an epic, search active projects for that exact epic name and
confirm the scope. Reuse the matching project, or create one named for the epic
diff --git a/plugins/opencode/skills/archdev/references/monitor.md b/plugins/opencode/skills/archdev/references/monitor.md
index 9681ca1..1ca2061 100644
--- a/plugins/opencode/skills/archdev/references/monitor.md
+++ b/plugins/opencode/skills/archdev/references/monitor.md
@@ -194,10 +194,12 @@ out), ask:
server grade. Missing server results do not block reporting. Separately, for
each PR opened or pushed this session, follow [Pull Requests](../SKILL.md#pull-requests)
before declaring verification complete, or state the blocker.
-6. Did substantial work start, finish, fail, or teach something reusable?
- → it should already be posted; if not, post it now with `--kind`
- (see below). When the same moment is also an event, put both on one
- `archdev log post` call.
+6. What surprised me, corrected an assumption, or ruled out an approach?
+ Did local investigation leave a question that team knowledge could answer?
+ → post a concrete `lesson`, `abandoned`, or `question` while useful (see
+ below), not buried in a PR summary. Also catch up any missed start/done.
+ When the same moment is also an event, put both on one `archdev log post`
+ call. Nothing worth sharing is valid; never manufacture a post.
7. Otherwise, is this worth a free-text note? → `agent.message`. When in
doubt, log the note — ambiguous observations beat silent ones, but
never invent a structured event.
@@ -208,6 +210,26 @@ out), ask:
routines count it, and stream search returns it as the team's lessons. It
works on its own or on top of any `--event`.
+### Notice knowledge-sharing moments
+
+- A test contradicts your assumption, an API has surprising semantics, or a
+ configuration change does not take effect: share what the evidence proves.
+- A setup trap, useful technique, or non-obvious tradeoff could save a teammate
+ work: post a lesson now. A fix, commit or PR is not required. Distinguish
+ observations from hypotheses; do not invent a root cause to fill a template.
+- An approach is ruled out: post `abandoned` with why, instead of repeating the
+ same finding as both an abandoned approach and a lesson.
+- After a bounded check of code, tests, docs and room history, team context is
+ still missing: ask a specific question with evidence and what you tried.
+ Questions need not be product decisions or blockers. Continue independent
+ work while waiting; asking does not pause the task or authorize a risky action.
+
+Before a final reply or handoff, and at reporting boundaries, revisit these
+triggers. Search before a lesson; add new evidence rather than duplicating one.
+Nothing worth sharing is a valid outcome: no quotas, invented lessons, or routine
+progress posts. These knowledge posts need no extraction or assessment.
+Subagents return findings to the parent as they arise; only the parent posts.
+
### Tag every post with its project
Before the first lifecycle post, find the project this work belongs to:
@@ -235,18 +257,18 @@ files posts by project lists it under Unfiled.
| Kind | Post when | Must include |
|---|---|---|
| `start` | scope of substantial work is understood (not on every session) | what and why in one sentence; `-r` task ID or plan path |
-| `lesson` | right away, on a reusable root cause, failure, or fix | symptom, cause, fix; the exact command, error, or file |
+| `lesson` | right away, on a reusable discovery, root cause, technique, or tradeoff | observation, evidence, and what to do differently; the exact command, error, or file |
| `abandoned` | an approach failed and should not be repeated | what was tried, why it failed |
| `done` | a meaningful outcome is finished | intent, externally visible result, actual verification; `-r` PR URL. Anything reusable the work taught goes in its own `lesson`, not inside the done |
| `handoff` | someone else owns the next action | headline starts `@firstname`; current state |
-| `question` | a decision only a teammate can make | headline starts `@firstname`; evidence and options |
+| `question` | missing team knowledge or an unresolved decision after local investigation | headline starts with a real known `@firstname`; evidence, what you tried, and a specific ask |
```sh
"$archdev" log post --project prj_0123456789abcdef01234567 --kind start "Porting lifecycle posts into archdev log" -b "Rooms skill was deprecated, so agents stopped posting lessons" -r tsk_abc123
"$archdev" log post --project prj_0123456789abcdef01234567 --kind lesson "Claude Code exports CLAUDE_CODE_SESSION_ID, not CLAUDE_SESSION_ID" -b "Symptom: posts labeled harness archdev with no session; cause: wrong env name in room-exhaust.ts; fix: read CLAUDE_CODE_SESSION_ID first" -r src/ts/archdev/src/room-exhaust.ts --risk medium --basis room_history
"$archdev" log post --project prj_0123456789abcdef01234567 --kind abandoned "Dropped the env shim for session ids" -b "Wrappers do not propagate it into hook subprocesses"
"$archdev" log post --project prj_0123456789abcdef01234567 --kind done "archdev log carries checkout context again" -b "Rooms UI worktree and my-areas filters show log posts; focused tests pass" -r https://github.com/org/repo/pull/123
-"$archdev" log post --project prj_0123456789abcdef01234567 --kind question "@sam should lifecycle posts also go to team rooms?" -b "Today they go to the org room only"
+"$archdev" log post --project prj_0123456789abcdef01234567 --kind question "@sam why does the partner still require retry compatibility?" -b "Code, tests and room history do not explain ACME_RETRY_COMPAT. Is it preserving a partner constraint? I can continue independent test work while waiting." -r src/retry/compat.rs
"$archdev" log post --project prj_0123456789abcdef01234567 --kind handoff "@sam owns the Rooms UI facet follow-up" -b "CLI side merged; UI still reads only post_type" -r https://github.com/org/repo/pull/123
```
@@ -268,6 +290,9 @@ Rules:
--payload-file /event.json`.
It counts as a `done` for teammates and carries the validated event
for activity readers.
+- `question` requires an addressee. If the owner is unknown, ask the room with
+ a plain `log post` note instead of inventing an @mention. Use real observations,
+ paths and teammate identities; the commands above illustrate the format.
- `--answers ` links a post to the teammate `question` it
answers.
- Review each post before sending. Never post raw transcripts; state
diff --git a/plugins/pi/skills/archdev/SKILL.md b/plugins/pi/skills/archdev/SKILL.md
index c813954..4fc0b73 100644
--- a/plugins/pi/skills/archdev/SKILL.md
+++ b/plugins/pi/skills/archdev/SKILL.md
@@ -135,7 +135,9 @@ subagents and agents you spawn.
- Claude Code's SubagentStart hook supplies the ArchDev contract in Git
checkouts. Other harnesses may not supply a subagent contract.
- Tell every helper: "Load the `archdev` skill and follow it. Do not post to
- the organization stream; report back instead." The parent owns stream posts.
+ the organization stream; report back instead. Return reusable discoveries,
+ failed approaches, and unresolved questions with evidence as they arise,
+ not only in your final summary." The parent owns stream posts.
- PR reporting requires no local grading, annotations, or stop hold, including
Factory and daemon sessions. Follow the host's publication ownership.
@@ -235,7 +237,8 @@ Three beats, one command
instructions.
2. **As it happens:** post lifecycle moments immediately with
`log post --kind` — `start` once scope is clear, `lesson` on a reusable
- root cause or fix, `abandoned` for a failed approach, `done` (with
+ discovery (not just a fix), `abandoned` for a failed approach, `question`
+ for missing team knowledge or an unresolved decision, `done` (with
the PR URL) or an `@name` `handoff` at the end. Before the first
post, find the project for this work. For an epic, search active projects
for its exact name and matching scope; reuse that match or create it with
@@ -249,6 +252,20 @@ Three beats, one command
retain their sealed `risk.plan` / `risk.task` assessments; PR events carry
no assessment. See monitor.md for the separate reporting flows.
+### Share what the work teaches
+
+Before a final reply or handoff, and at reporting boundaries, ask: what surprised
+me, corrected an assumption, or ruled out an approach? Post a concrete `lesson`
+or `abandoned` while it can save someone work; do not bury it in a PR summary.
+A verified discovery is worth sharing before a fix or PR exists. Search first
+and add new evidence rather than repeating a lesson.
+
+After a bounded local investigation, ask for missing team knowledge with
+`question`: evidence, what you tried, and a specific ask. Mention a real known
+teammate; use a plain note to ask the room if the owner is unknown. Do not wait
+until blocked, and continue independent work while waiting. These knowledge
+posts need no extraction or assessment. Nothing worth sharing is a valid
+outcome: no quotas, invented lessons, or routine progress posts.
For work with an epic, search active projects for that exact epic name and
confirm the scope. Reuse the matching project, or create one named for the epic
diff --git a/plugins/pi/skills/archdev/references/monitor.md b/plugins/pi/skills/archdev/references/monitor.md
index 9681ca1..1ca2061 100644
--- a/plugins/pi/skills/archdev/references/monitor.md
+++ b/plugins/pi/skills/archdev/references/monitor.md
@@ -194,10 +194,12 @@ out), ask:
server grade. Missing server results do not block reporting. Separately, for
each PR opened or pushed this session, follow [Pull Requests](../SKILL.md#pull-requests)
before declaring verification complete, or state the blocker.
-6. Did substantial work start, finish, fail, or teach something reusable?
- → it should already be posted; if not, post it now with `--kind`
- (see below). When the same moment is also an event, put both on one
- `archdev log post` call.
+6. What surprised me, corrected an assumption, or ruled out an approach?
+ Did local investigation leave a question that team knowledge could answer?
+ → post a concrete `lesson`, `abandoned`, or `question` while useful (see
+ below), not buried in a PR summary. Also catch up any missed start/done.
+ When the same moment is also an event, put both on one `archdev log post`
+ call. Nothing worth sharing is valid; never manufacture a post.
7. Otherwise, is this worth a free-text note? → `agent.message`. When in
doubt, log the note — ambiguous observations beat silent ones, but
never invent a structured event.
@@ -208,6 +210,26 @@ out), ask:
routines count it, and stream search returns it as the team's lessons. It
works on its own or on top of any `--event`.
+### Notice knowledge-sharing moments
+
+- A test contradicts your assumption, an API has surprising semantics, or a
+ configuration change does not take effect: share what the evidence proves.
+- A setup trap, useful technique, or non-obvious tradeoff could save a teammate
+ work: post a lesson now. A fix, commit or PR is not required. Distinguish
+ observations from hypotheses; do not invent a root cause to fill a template.
+- An approach is ruled out: post `abandoned` with why, instead of repeating the
+ same finding as both an abandoned approach and a lesson.
+- After a bounded check of code, tests, docs and room history, team context is
+ still missing: ask a specific question with evidence and what you tried.
+ Questions need not be product decisions or blockers. Continue independent
+ work while waiting; asking does not pause the task or authorize a risky action.
+
+Before a final reply or handoff, and at reporting boundaries, revisit these
+triggers. Search before a lesson; add new evidence rather than duplicating one.
+Nothing worth sharing is a valid outcome: no quotas, invented lessons, or routine
+progress posts. These knowledge posts need no extraction or assessment.
+Subagents return findings to the parent as they arise; only the parent posts.
+
### Tag every post with its project
Before the first lifecycle post, find the project this work belongs to:
@@ -235,18 +257,18 @@ files posts by project lists it under Unfiled.
| Kind | Post when | Must include |
|---|---|---|
| `start` | scope of substantial work is understood (not on every session) | what and why in one sentence; `-r` task ID or plan path |
-| `lesson` | right away, on a reusable root cause, failure, or fix | symptom, cause, fix; the exact command, error, or file |
+| `lesson` | right away, on a reusable discovery, root cause, technique, or tradeoff | observation, evidence, and what to do differently; the exact command, error, or file |
| `abandoned` | an approach failed and should not be repeated | what was tried, why it failed |
| `done` | a meaningful outcome is finished | intent, externally visible result, actual verification; `-r` PR URL. Anything reusable the work taught goes in its own `lesson`, not inside the done |
| `handoff` | someone else owns the next action | headline starts `@firstname`; current state |
-| `question` | a decision only a teammate can make | headline starts `@firstname`; evidence and options |
+| `question` | missing team knowledge or an unresolved decision after local investigation | headline starts with a real known `@firstname`; evidence, what you tried, and a specific ask |
```sh
"$archdev" log post --project prj_0123456789abcdef01234567 --kind start "Porting lifecycle posts into archdev log" -b "Rooms skill was deprecated, so agents stopped posting lessons" -r tsk_abc123
"$archdev" log post --project prj_0123456789abcdef01234567 --kind lesson "Claude Code exports CLAUDE_CODE_SESSION_ID, not CLAUDE_SESSION_ID" -b "Symptom: posts labeled harness archdev with no session; cause: wrong env name in room-exhaust.ts; fix: read CLAUDE_CODE_SESSION_ID first" -r src/ts/archdev/src/room-exhaust.ts --risk medium --basis room_history
"$archdev" log post --project prj_0123456789abcdef01234567 --kind abandoned "Dropped the env shim for session ids" -b "Wrappers do not propagate it into hook subprocesses"
"$archdev" log post --project prj_0123456789abcdef01234567 --kind done "archdev log carries checkout context again" -b "Rooms UI worktree and my-areas filters show log posts; focused tests pass" -r https://github.com/org/repo/pull/123
-"$archdev" log post --project prj_0123456789abcdef01234567 --kind question "@sam should lifecycle posts also go to team rooms?" -b "Today they go to the org room only"
+"$archdev" log post --project prj_0123456789abcdef01234567 --kind question "@sam why does the partner still require retry compatibility?" -b "Code, tests and room history do not explain ACME_RETRY_COMPAT. Is it preserving a partner constraint? I can continue independent test work while waiting." -r src/retry/compat.rs
"$archdev" log post --project prj_0123456789abcdef01234567 --kind handoff "@sam owns the Rooms UI facet follow-up" -b "CLI side merged; UI still reads only post_type" -r https://github.com/org/repo/pull/123
```
@@ -268,6 +290,9 @@ Rules:
--payload-file /event.json`.
It counts as a `done` for teammates and carries the validated event
for activity readers.
+- `question` requires an addressee. If the owner is unknown, ask the room with
+ a plain `log post` note instead of inventing an @mention. Use real observations,
+ paths and teammate identities; the commands above illustrate the format.
- `--answers ` links a post to the teammate `question` it
answers.
- Review each post before sending. Never post raw transcripts; state
diff --git a/scripts/test-skill-bootstrap-cli.ps1 b/scripts/test-skill-bootstrap-cli.ps1
index 032a16c..ef0df95 100644
--- a/scripts/test-skill-bootstrap-cli.ps1
+++ b/scripts/test-skill-bootstrap-cli.ps1
@@ -60,6 +60,9 @@ try {
Set-Content -LiteralPath (Join-Path $homeDir ".claude\settings.json") -Encoding ASCII -Value '{"permissions":{"allow":["Read"]},"hooks":{"SessionStart":[{"hooks":[{"type":"command","command":"echo teammate"}]}]}}'
New-Item -ItemType Directory -Path (Join-Path $homeDir '.config/archdev') | Out-Null
Set-Content -LiteralPath (Join-Path $homeDir '.config/archdev/config.json') -Encoding ASCII -Value '{"defaultApp":"dap_033y70rWJriCRNyb9uL0Pm"}'
+ # Seed first-use product state, not hooks. Keep the analytics identity in
+ # the snapshot: ordinary commands must also leave an existing ID unchanged.
+ Set-Content -LiteralPath (Join-Path $homeDir '.config/archdev/install_id') -Encoding ASCII -Value ([Guid]::NewGuid().ToString())
Push-Location $checkout
try {
& git -c core.hooksPath=NUL -c init.templateDir= init --quiet
diff --git a/scripts/test-skill-bootstrap-cli.sh b/scripts/test-skill-bootstrap-cli.sh
index e77bf56..1ea0a68 100755
--- a/scripts/test-skill-bootstrap-cli.sh
+++ b/scripts/test-skill-bootstrap-cli.sh
@@ -47,6 +47,9 @@ printf '%s\n' '{"permissions":{"allow":["Read"]},"hooks":{"SessionStart":[{"hook
# profile once so the proof measures hook/setting mutations, not initialization.
mkdir -p "$home/.config/archdev"
printf '%s\n' '{"defaultApp":"dap_033y70rWJriCRNyb9uL0Pm"}' >"$home/.config/archdev/config.json"
+# Analytics creates this machine identity on first use, independently of hook
+# consent. Seed it too, but keep it in the snapshot to catch later mutations.
+python3 -c 'import uuid; print(uuid.uuid4())' >"$home/.config/archdev/install_id"
before="$(snapshot "$home")"
checkout_before="$(snapshot "$checkout")"
for skill in archdev tasks; do
diff --git a/tools/plugin-gen/test/generate.test.ts b/tools/plugin-gen/test/generate.test.ts
index 7ac1e79..8b2b94f 100644
--- a/tools/plugin-gen/test/generate.test.ts
+++ b/tools/plugin-gen/test/generate.test.ts
@@ -140,6 +140,31 @@ describe("generation", () => {
}
});
+ test("knowledge sharing covers discoveries and non-blocking questions without quotas", () => {
+ const skill = readFileSync(path.join(repoRoot, "archdev/SKILL.md"), "utf8");
+ const monitor = readFileSync(path.join(repoRoot, "archdev/references/monitor.md"), "utf8");
+ for (const text of [skill, monitor]) {
+ assert.match(text, /Before a final reply or handoff, and at reporting boundaries/);
+ assert.match(text, /corrected an assumption/);
+ assert.match(text, /no extraction or assessment/);
+ assert.match(text, /no quotas, invented lessons, or routine\s+progress posts/);
+ assert.match(text, /owner is unknown/);
+ assert.doesNotMatch(text, /a decision only a teammate can make/);
+ }
+ assert.match(skill, /verified discovery is worth sharing before a fix or PR exists/);
+ assert.match(skill, /Return reusable discoveries,[\s\S]*as they arise/);
+ assert.match(monitor, /A fix, commit or PR is not required/);
+ assert.match(monitor, /Questions need not be product decisions or blockers/);
+ assert.match(monitor, /asking does not pause the task or authorize a risky action/);
+ assert.match(monitor, /instead of inventing an @mention/);
+ assert.match(monitor, /only the parent posts/);
+ for (const harness of HARNESSES) {
+ const prefix = `${ADAPTERS[harness].root}/skills/archdev`;
+ assert.equal(byPath.get(`${prefix}/SKILL.md`)?.content.toString("utf8"), skill);
+ assert.equal(byPath.get(`${prefix}/references/monitor.md`)?.content.toString("utf8"), monitor);
+ }
+ });
+
test("review queries expose exact-head risk and scope without making reporting wait", () => {
const skill = readFileSync(path.join(repoRoot, "archdev/SKILL.md"), "utf8");
assert.match(skill, /references\/monitor\.md#read-pr-risk-scope-and-rules/);