Skip to content

docs(spec): Telltale — user bug/crash to issue pipeline - #63

Closed
adbarc92 wants to merge 4 commits into
mainfrom
docs/telltale-feedback-pipeline-spec
Closed

docs(spec): Telltale — user bug/crash to issue pipeline#63
adbarc92 wants to merge 4 commits into
mainfrom
docs/telltale-feedback-pipeline-spec

Conversation

@adbarc92

Copy link
Copy Markdown
Owner

Design spec for Telltale, a project-generalizable pipeline that turns user-reported bugs and runtime crashes from any app or game into issues in that project's own tracker, and surfaces them as a new feedback source on the Project Dashboard.

Docs only — no code, no behaviour change.

The design shrank by half under critique

Three independent adversarial rounds ran against it (logged in full at the bottom of the spec). Two findings were structural rather than cosmetic:

The entire crash-side pipeline was deleted. The draft built a Durable Object, a threshold gate, and a dedup decision table to compute grouping and distinct-user counts — which Sentry already supplies, and whose native GitHub integration already opens and links one issue per group with zero code. The gate also could not have worked: the only server-observed identity on a Sentry webhook is Sentry, so distinct_identities >= 3 had cardinality 1 and could never fire. Crashes now go Sentry → GitHub with no Telltale code at all.

Fleet dispatch was cut. It would have widened the set of repos a credentialed containerized agent may push to from one sandbox to every repo in the registry — production apps included — for a pipeline whose input is internet-authored text. Round 3 then caught that the replacement justification ("the existing Phase 2 path dispatches it with zero changes") was itself false: Phase 2 has no UI and no POST path, and tenzy has no ROADMAP.md. Both claims are withdrawn in the spec rather than quietly dropped.

What remains

One Cloudflare Worker, a checked-in registry, four ~60-line senders, and one dashboard adapter.

Decisions recorded

  • Issues land in each project's own repo, including public ones. The PII exposure was raised and knowingly accepted; the spec scrubs both title and body and states plainly what that does not cover.
  • The ingest-abuse risk was accepted on the same footing — HMAC bounds and attributes abuse rather than preventing it, since a secret in a shipped binary is extractable.
  • T5 (the dashboard adapter) ships, promoted to a locked decision. Critique argued for cutting it in favour of a GitHub saved search; that argument is kept on record explicitly marked as considered and rejected, so it is not re-derived later.

Notable for reviewers

§6.1 retracts the dashboard spec's "one adapter, no board change" claim with a verified change-surface table, and §6.4 documents that family is written by three adapters and read by nothing.

A project-generalizable feedback pipeline for the apps and games, landing
as a new `feedback` source on the Project Dashboard.

Three rounds of adversarial critique cut it roughly in half:
- the entire crash-side pipeline is deleted in favour of Sentry's native
  GitHub integration (it was reimplementing grouping and user counts that
  Sentry supplies, on a gate that could never fire);
- fleet dispatch is out of scope — it would have widened a credentialed
  agent's push target from one sandbox to every registry repo, for a
  pipeline whose input is internet-authored text.

What remains: one Cloudflare Worker, a checked-in registry, four ~60-line
senders, and one dashboard adapter.
- §10.1 ingest-abuse risk: put to the operator and knowingly accepted,
  on the same footing as the PII decision.
- §6.7 T5: retained and closed. Command Center is the central hub, so
  the dashboard adapter is a deliverable; the saved-search fallback is
  kept on record as considered and rejected, not as a substitute.
  Promoted to locked decision #9.
Eleven TDD tasks building the standalone Worker — spec T1, T3, T4. Every
decision that can be a pure function is one (schema, scrub, fingerprint,
decide, registry), so the logic is unit-tested without network or KV.

Scoped to P1 only. The senders (P2, nine other repos, four languages) and
the dashboard adapter (P3, cockpit/ui) are separate subsystems and get
their own plans; P0 is Sentry console configuration.

Flags two deliberate deviations from the spec for review: a typed TS
registry module instead of registry.yml, and fine-grained PATs instead of
GitHub App installation tokens.
@adbarc92

Copy link
Copy Markdown
Owner Author

Closing — the spec moved with the code to https://github.com/adbarc92/telltale.

Telltale is now its own app in its own repo, so its design spec and implementation plan are its own design docs. Both moved there in https://github.com/adbarc92/telltale/pull/1:

New location Was
docs/design.md docs/superpowers/specs/2026-08-30-telltale-feedback-pipeline-design.md
docs/plan.md docs/superpowers/plans/2026-08-30-telltale-worker.md

The spec's §12 References still point at this repo's code — that is the change surface §6 integrates with — and are now labelled as such.

This repo will get its own adapter spec when P3 is actually built, covering §6 (the feedback source adapter) and linking out to the Telltale repo for the contract it consumes. Writing it now would mean maintaining a spec for unstarted work in two places; deferring it to P3 keeps one source of truth.

See #64 for the extraction itself.

@adbarc92 adbarc92 closed this Aug 31, 2026
adbarc92 added a commit that referenced this pull request Aug 31, 2026
Telltale now lives at adbarc92/telltale, extracted with git subtree split so
all 17 commits kept their TDD and review history. Verified before pushing:
82 passed / 1 skipped, tsc --noEmit exit 0.

Also records that the handoff's step 3 was a no-op. telltale/ never existed on
main or on this branch — only on PR #64's branch — so closing that PR rather
than merging it left nothing to strip, the vitest (telltale) CI job included.

#64 and #63 are both closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant