docs(openspec): propose qualitative survey feedback via PostHog surveys - #341
Conversation
Proposal, design, specs, and tasks for appending a survey invite to the four highest-friction recipes (onboard, create-sg-rule, create-vale-rule, create-remote-rule), a feedback subcommand that validates and sends the agent-relayed response, and migration 0007 to ignore .taskless/.tmp-*. Delivery shape: stacked, merging forward, four PRs.
thecodedrift
left a comment
There was a problem hiding this comment.
Biggest miss, posthog capture was changed in a significant way
- Only valid event names are below
- Responses contain
$survey_idand for "survey sent",$survey_response_QUESTION_UUID
// when the survey recipe is injected into the agent recipe payload
// triggered by select npx @taskless/cli agent ...
posthog.capture("survey shown", {
$survey_id: "01a0b1a0-80fb-0000-5dc1-baa4ec44e619",
}); // when the user has explicitly dismissed the survey
// triggered by npx @taskless/cli feedback dismiss
posthog.capture("survey dismissed", {
$survey_id: "01a0b1a0-80fb-0000-5dc1-baa4ec44e619",
}); // send the completed responses
// triggered by npx @taskless/cli feedback send --file=./path/to/feedback.json
posthog.capture("survey sent", {
$survey_id: "01a0b1a0-80fb-0000-5dc1-baa4ec44e619",
"$survey_response_5feff6a3-6768-4817-92d7-5ae3975c6baa": "...", // Q1 (required)
"$survey_response_561e87f4-a1b7-4855-b728-29d19421f7e7": "...", // Q2 (required)
"$survey_response_48e4a7c8-a63f-4c33-a47f-6c835435a288": "...", // Q3 (required)
"$survey_response_2316428e-dc3e-4c96-ae67-a6e8c66d7db5": "...", // Q4 (optional)
"$survey_response_67bedbd9-ca70-4c1c-b1a6-6df830a453dd": "...", // Q5 (optional)
}); Additionally the --topic constructs seem completely fabricated
…d by survey id Drop the invented topic property from the three survey events, the --topic flag from feedback dismiss, and the topic key from the payload: PostHog's custom-survey contract is the event names, $survey_id, and $survey_response_<question id>, and the CLI adds nothing of its own. Key next_ask by the survey UUID rather than the CLI version so the config directory does not grow per release and an upgrade keeps the cadence; a new survey is a new ask.
Addressed in 6d60b6c. The three events now carry exactly what the snippets show: Two things to note against the pasted snippet: Q3's id is — AI Coding Agent |
|
@claude /review |
|
Claude finished @thecodedrift's task in 4m 45s —— View job Review mode: incremental — read 5 prior review thread(s) before reviewing.All 5 prior threads are resolved and carry an
I verified these directly against the current diff (not just the reply text): grepped for I found nothing NEW since the last review. Specifically, I checked for the failure modes this kind of doc-only PR is most likely to hit, and none reproduced:
No inline comments to post — this pass turned up no new findings to anchor on specific lines. |
Stack (root → tip):
Opening PR for the
qualitative-survey-feedbackchange: planning artifacts only, no code.What this proposes
Rule authoring and onboarding are where an agent-driven Taskless session most often goes wrong, and the only signal we have about them is quantitative. A PostHog survey exists whose questions are addressed to the agent as respondent, relaying the user's words and its own read of the session. This change lets the CLI use it:
onboard,create-sg-rule,create-vale-rule,create-remote-rule) when telemetry is on, not in CI, and a per-CLI-versionnext_asktimestamp has passed. Serving capturessurvey shownand pushesnext_askout 10 days.feedbacksubcommand:feedback dismiss --topic(capturessurvey dismissed, +20 days) andfeedback send --from <file>(validates a human-keyed payload, maps to the survey's question ids, capturessurvey sent, +20 days). Unlisted in theagentindex; the invite is the only door.feedbackandfeedback-inviterecipes, the second rendered header-less so the appended prose sits under the same Vale rules as every other recipe.0007ignores.taskless/.tmp-*.0001is not edited.Delivery shape
Stacked, merging forward, four PRs: migration → subcommand + schema + store → recipes → gate + injection (which archives the change). Nothing triggers a survey until the tip lands. The changeset goes on PR 1.
Reviewing the spec deltas
analyticsandcliare MODIFIED requirements copied in full: 6 and 3 existing scenarios retained, one added to each.cli-taskless-bootstrapadds a requirement for migration 7.cli-feedback-surveyis new: 5 requirements, 19 scenarios.pnpm openspec validate qualitative-survey-feedback --strictpasses.