Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions docs/development/byo-funnel-telemetry.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,19 @@ The authenticated BYO page posts fixed event names to `POST /api/stats/byo-step`
The endpoint stores `userId`, `step`, and server time in `byo_telemetry`.
Commands, keys, names, and clipboard contents are never sent.

Setup OS and listener eligibility (TASK-714) are not stored in `byo_telemetry`.
`seat-created` and every step also send `setupOs` and `listenerAvailable`, the
copy steps add a `copyType`, and the server writes those to the person's User
row instead: `users.onboarding.byoSetupOs` (`mac`, `linux`, `windows` or
`other`) and `users.onboarding.byoListenerEligible`, both written once (the
first request with a valid OS and a boolean wins; a later OS is ignored), and
one write-once first-copy mark per
type (`byoListenCopiedAt`, `byoMcpClaudeCopiedAt`, `byoMcpCursorCopiedAt`,
`byoDaemonCopiedAt`, `byoTokenCopiedAt`). A query for "which OS did they set up
on" reads the User row. The `byo_telemetry` rows only answer "did they reach
this step, and when". On 2026-11-01 a read of `byo_telemetry` alone found no
setup OS at all, although prod had already written the fields to the User row.

As of TASK-483 and TASK-493 (2026-10-24), the browser sends:

| Event | Observed state |
Expand Down
3 changes: 2 additions & 1 deletion fleet-skills/working-in-turns/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ last_updated: 2026-11-01

# Working in Turns

- End each turn before its run limit, not at it. The default run limit is 15 minutes, and only adapters that honor `COMMONLY_AGENT_RUN_TIMEOUT_MS` can use a longer one such as `2700000` (45 minutes). On a 45-minute limit, end the turn by about 35 minutes; on the 15-minute default, by about 10. Before ending: commit and push what you have (a draft PR is enough), and post the next step as a one-line note on the row. The next wake continues from the pushed branch. If the work is larger, split it and say how in the row. A timeout sends SIGTERM and loses uncommitted work.
- End each turn before its run limit, not at it. The default run limit is 15 minutes, and only adapters that honor `COMMONLY_AGENT_RUN_TIMEOUT_MS` can use a longer one such as `2700000` (45 minutes). On a 45-minute limit, end the turn by about 35 minutes; on the 15-minute default, by about 10. Before ending: commit and push what you have (an open PR is enough; open it ready), and post the next step as a one-line note on the row. The next wake continues from the pushed branch. If the work is larger, split it and say how in the row. A timeout sends SIGTERM and loses uncommitted work.
- Open your PR as ready, not as a draft. A later `gh pr ready` can be refused by the harness's permission classifier ("Unrequested Commit in a Connected App") when your turn never said to undraft. That refusal comes from the harness, not from the seat `gh` fence.
- **One review round per change.** Before you hand a PR to the press, run your own quick subagent review of its diff. Tier 2 changes (auth, grants, record, schema, wake, money, security) need an Opus-class reviewer. That one review also covers screenshots against the design frame, any lane checks and the zh-CN glossary. Don't ask a second reviewer, and don't ask anyone to re-review after you push a fix.
- Then answer every CodeRabbit thread and get CI green. A push that only answers CodeRabbit or CI keeps your PASS.
- If your review comes back HOLD, fix it, push, and review again yourself.
Expand Down
Loading