# H selector instrumentation harness

Before: [96fc7b9](https://github.com/pingdotgg/t3code/commit/96fc7b955196637605cbf3b415152ce4dd0e2294); after: [4859c3a](https://github.com/pingdotgg/t3code/commit/4859c3a7d372dba06a50adee68d157643a305a10)

Each snapshot is immutable and schema-validated. Unchanged decoded rows retain identity. The registry scheduler is drained synchronously after every read. Metric: actual subscription callbacks and identity comparisons, not React frames.

| Sequence | Events | Before notifications / list / A / idle replacements | After notifications / list / A / idle replacements | Live shell notifications (before / after) |
|---|---:|---|---|---|
| A01 pure updatedAt | 100 | 100 / 100 / 100 / 0 | 0 / 0 / 0 / 0 | 100 / 100 |
| A01 pure itemCount | 100 | 100 / 100 / 100 / 0 | 0 / 0 / 0 / 0 | 100 / 100 |
| A01 pure visibleItemCount | 100 | 100 / 100 / 100 / 0 | 0 / 0 / 0 / 0 | 100 / 100 |
| A01 pure message | 100 | 100 / 100 / 100 / 0 | 0 / 0 / 0 / 0 | 100 / 100 |
| A01 pure all | 100 | 100 / 100 / 100 / 0 | 0 / 0 / 0 / 0 | 100 / 100 |
| A05 rename | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A05 branch | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A06 status preparing | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A06 status queued | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A06 status starting | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A06 status waiting | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A06 activity override | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A06 blocked on thread wait | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A07/A08 command set | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A07/A08 command clear | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A07/A08 user_input set | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A07/A08 user_input clear | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A07/A08 auth_refresh set | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A07/A08 auth_refresh clear | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A09 child command set | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A09 child command clear | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A09 child user_input set | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A09 child user_input clear | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A10 pin | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A10 active order | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A10 snooze | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A10 settle | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A10 visit | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A11 title search source | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A14 insert preceding | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A14 remove preceding | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A14 reorder preceding | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A14 archive | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A14 same ID, two environments | 1 | 1 / — / — / — | 1 / — / — / — | — / — |
| A15 counts 0,0 -> 1,0 | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A15 counts 1,0 -> 1,1 | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A15 counts 1,1 -> 0,1 | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A15 counts 1,1 -> 1,0 | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A15 counts 0,1 -> 1,1 | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A15 counts 1,0 -> 1,1 | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A06 background holding | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A06 active goal | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A16 stop completed | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A16 completed post-stop timestamp | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A16 completed post-stop count | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A16 completed post-stop message | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A16 stop interrupted | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A16 interrupted post-stop timestamp | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A16 interrupted post-stop count | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A16 interrupted post-stop message | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A16 stop failed | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A16 failed post-stop timestamp | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A16 failed post-stop count | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A16 failed post-stop message | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A16 stop rolled_back | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A16 rolled_back post-stop timestamp | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A16 rolled_back post-stop count | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A16 rolled_back post-stop message | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A16 stop idle | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A16 idle post-stop timestamp | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A16 idle post-stop count | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |
| A16 idle post-stop message | 1 | 1 / 1 / — / — | 1 / 1 / — / — | — / — |

All semantic sequences asserted the expected field or membership and exactly one notification on both revisions. Pure latest-message sequence ends at Chunk 100; positive item-count sequences end at 101.

Scope limits: this shared selector harness does not instantiate usePullRequestStack or exercise new-task destination navigation. No synthetic PR payload was built. Pin/snooze/goal tests assert shell fields; they do not exercise UI mutations, expiry clocks, or PR data fetching.
