---
name: Pre-task checklist (mechanical pre-flight, non-negotiable)
description: 5 yes/no checks that gate any non-trivial response. If any answer is "no", the response cannot proceed — execute the missing lookup first, or surface the gap to the user explicitly. Hardwired 2026-04-30 PM after 6 same-shape regressions in a single session despite individual patches.
type: feedback
last_updated: 2026-04-30
trigger: every non-trivial task — anything beyond a 1-tool-call lookup or a single-sentence answer
originSessionId: 6250c599-625a-4c16-9ba6-368c0a7715ed
---
## Why this exists

In a single session on 2026-04-30 the agent shipped 6 regressions of the SAME ROOT-CAUSE SHAPE despite each being patched individually:

1. "Sunday" walkthrough (was Monday) — defaulted to memory, didn't run `date`
2. Fabricated Gmail message IDs — defaulted to plausible values, didn't query Gmail
3. "Email sent" (was drafted) — defaulted to optimistic status, didn't check labelIds
4. Tim Beegle (was Whitney) — defaulted to working-memory salience, didn't `list_drafts`
5. `qualifiedtobuy` deal stage (was `appointmentscheduled`) — defaulted to generic HubSpot knowledge, didn't query the pipeline
6. Punted on KeyData/Track sourcing — defaulted to asking the user, didn't execute the skill the agent has invoked many times

Joseph's call-out: *"Stop regressing. Make sure you are not able to regress in any way, ever."*

Per-instance patches kept failing because they're all aspirational ("I should verify before…"). The DEFAULT didn't change. This file changes the default by making the verifications a mechanical pre-flight — 5 yes/no questions that gate response composition.

## The 5 checks (mechanical, falsifiable)

Run these in order BEFORE composing any non-trivial response. If any answer is "no", do not proceed — execute the missing lookup, or surface the gap explicitly.

### 1. SKILL DISCOVERY — does an available skill automate this?

**Question**: Is the work I'm about to do covered by any skill in the available-skills list?

If yes → invoke the skill instead of recreating its logic manually.
If unclear → list candidate skills and pick the closest match.

Examples of skills that have been forgotten mid-session today:
- `lead-enrichment` — would have done the 6-source GC enrichment in one command
- `hubspot-lead-push` — handles HS contact creation with the right CSRF + property mappings
- `skyrun-builder` — handles the full PPTX/PDF/XLSX build
- `daily-data-quality-check` — handles SoT ↔ HS reconciliation
- `daily-beenverified-enrichment` — handles BV pulls with budget tracking

**No-skill-found** is allowed but must be explicit. "I'm doing this manually because no skill matches" is a written decision, not a default.

### 2. ARTIFACT REFERENCES — any "the X" in the user's message that's tool-accessible?

**Question**: Did the user reference a specific tool-accessible artifact ("the draft", "the lead", "the meeting", "the file", "the deal stage", "the heartbeat", "the cron", etc.)?

If yes → the FIRST action is the corresponding lookup (Gmail `list_drafts`, HS contact search, `list_events`, file Glob, pipeline query, etc.). The lookup runs BEFORE any plan / opinion / response is composed.

The full trigger-phrase → lookup mapping lives in `feedback_no_fabrication_personal.md`. If a phrase isn't in the table but feels like a referential premise, treat it as one. Cost of one extra lookup: ~1 second. Cost of being wrong: trust.

### 3. FACTUAL CLAIMS — what fact-classes will I emit, and is each one source-verified this turn?

**Question**: List every factual claim I'm about to write — date, day-of-week, dollar figure, message ID, person name, quote, status, file path, system field value, stage ID, lifecycle stage, cron expression, heartbeat, deal stage. For each one, name the authoritative source AND confirm I queried it THIS turn.

Sources by claim class are in `feedback_no_fabrication_personal.md`. If I can't name the source for a claim, I don't write the claim — I either query or hedge ("haven't verified this turn — recommend re-check").

**System-tenant-specific values** (HS pipelines, stages, custom properties, Gmail labels, SmartLead campaign IDs, Track field names, KeyData report URLs) MUST come from a live query of that system this turn — generic knowledge of how similar systems usually work is *not* a source.

### 4. EXECUTE-DON'T-PUNT — am I about to ask the user something I could resolve myself?

**Question**: Am I about to write a question to the user that begins with "should I…", "can you…", "do you want me to…", or "I need you to…"?

If yes → before writing the question, check:
- Is the answer already in my reach via tool call / file read / skill invocation?
- Is there a sensible default I can just execute (transparent about the default + offer to override)?
- Is there a real user-only decision being made (preference, scope, irreversible action)?

Default is **execute**. Ask only when there's a real user decision OR an irreversible/sensitive action that the safety rules require permission for.

Asking when I could just do it is the *same fabrication-shape pattern* as inventing a value — both choose the lower-effort path.

### 5. VERIFICATION TRACE — can I open my response with a 1-line list of what I looked up this turn?

**Question**: Can I write "Verified this turn: [tool call 1, tool call 2, …]" honestly?

If the trace would be empty for a non-trivial response, my response is wrong-shape. Either I missed checks 1-4, or I'm about to write something that shouldn't be written.

For non-trivial substantive responses, OPEN with the verification trace as the first line. This makes the discipline auditable — Joseph can call out an empty or thin trace immediately without having to go check the work.

Trivial responses (single tool call, one-line answer, simple confirmations) don't need a trace.

## Mechanical phrasing — "cannot" replaces "should"

Old (aspirational, slipped today): "I should verify dates before claiming day-of-week."
New (mechanical, gates the action): "I cannot write a day-of-week without first running `date` or reading a memory file with the explicit date."

Old: "I should look up the right HS stage."
New: "I cannot write a `dealstage` value without first querying `/api/crm-pipelines/v1/pipelines/deals` this turn."

Old: "I should always pull live KeyData/Track."
New: "I cannot ship a projection deliverable without a live query trace from KeyData and Track in the Methodology tab."

Apply this phrasing pattern to all the rules in `feedback_no_fabrication_personal.md` going forward. Aspirational language is the slip surface.

## When this checklist activates

- Any task that involves writing a value into a system (HS, SmartLead, Track, Gmail, Calendar, SoT, memory file)
- Any task that emits a factual claim that could end up in front of a human
- Any task that proposes a plan, recommendation, or scope decision
- Any task referenced by a user message containing "the X" where X is tool-accessible

It does NOT activate for:
- Single-step lookups requested by the user
- Trivial conversational acknowledgements
- Pure I/O operations (Read / Write a file the user already named)

## Cross-references

- `feedback_no_fabrication_personal.md` — source-verification rule (output fact-classes + referential premises + system-tenant values)
- `feedback_email_status_verification.md` — verified-sent gate
- `feedback_freshness_before_surface.md` — freshness re-validation
- `feedback_drafting_standard.md` — read sent history + threads BEFORE drafting
- `project_skill_maintenance_flags.md` — audit trail of regressions + fixes (items 31-63)
