Core Connector Progress Audit

add-polyfill-connector-systemProject noteAudits & reviews
Created openspec/changes/add-polyfill-connector-system/design-notes/core-connector-progress-audit-2026-04-24.mdView on GitHub →

Status: captured Owner: connector worker Created: 2026-04-24 Updated: 2026-04-24 Related: openspec/changes/add-polyfill-connector-system

Question

Which core polyfill connectors can emit honest PROGRESS.count and PROGRESS.total without changing protocol contracts or doing extra source reads solely for progress?

Context

The reference runtime already accepts optional non-negative PROGRESS.count and PROGRESS.total; this pass is connector-side only. Totals are useful only when the connector already has a bounded unit in hand, such as an API response array, an in-memory metadata list, or an enumerated account/document list.

Stakes

Dashboard progress should distinguish a live but long connector from a stuck connector. Faked totals are worse than no percent because they make operator confidence look better than the source can justify.

Current Leaning

ConnectorExisting PROGRESSHonest count/total opportunityAction
ynabPhase-only per stream/budgetAPI arrays returned for budgets, accounts, categories, payees, transactions, scheduled transactions, months, active month-category monthsPatched bounded completion/progress counters
gmailHeader/body batch progressHeader list count after metadata pass; body pass knows metas.lengthPatched body batch total and final header total
githubPhase-only per streamSearch API exposes total_count for pull request search; REST list streams do not cheaply expose total with current helperPatched PR page counters; current code no longer emits undeclared commits progress
slackPhase and incremental filtering messagesFull-run totals come from slackdump archive and SQLite rows after expensive subprocess/import work; incremental row count is already knownDeferred beyond existing incremental count-in-message
chaseAccount and statement lists are enumerated before per-item workFiltered account count and statement row countPatched per-account and per-statement counters
usaaBrowser extraction and PDF hydration progressStatement hydration summary has attempts/successesPatched hydration counters
chatgptConversation listing and detail batchesDetail phase has a bounded conversation listPatched found/synced conversation counters
claude_codeVery noisy per-file/per-line parse progress in two passesTotal files would require a pre-walk; duplicate per-line build/emit progress can be compactedPatched line-progress to emit phase only and labeled build vs emit file progress
codexFile/line progress and coarse phase messagesTotal rollouts can be known only while walking the filesystem already done by the connector, but current progress is not the highest live painDeferred

Promotion Trigger

Promote to a protocol/OpenSpec change only if the runtime needs a new progress state model, estimated totals, nested phases, or streamless connector-level progress fields. This pass did not require any protocol change.

Decision Log

  • 2026-04-24: Use optional count/total only where the bounded unit is already known. Do not add network calls, pre-walks, or second reads just to compute percentages.