teleo-infrastructure/diagnostics
Teleo Agents 74bf0461e8
Some checks are pending
CI / lint-and-test (pull_request) Waiting to run
fix(attribution): canonicalize submitted_by at write time + historical normalizer
Companion / write-side fix to fix/activity-feed-canonical-handle.

The activity-feed canonicalization was a read-side guard. The bug at the
source is that extract.py and two backfill scripts write decorated
strings (Vida (self-directed), pipeline (reweave), @m3taversal) into
prs.submitted_by and sources.submitted_by. Downstream readers
(lib.contributor.insert_contribution_event, scripts/scoring_digest,
diagnostics/activity_feed_api) all strip the decorator on read — but
anything that reads the column verbatim (like /api/activity-feed before
the read-side fix) 404s on /contributors/{decorated-handle}.

Stop writing the decorator. The self-directed signal is already carried
by intake_tier == research-task plus the prs.agent column; the suffix
is redundant string noise that costs us correctness at every consumer
that forgets to strip.

Changes:

- lib/extract.py:690 — write canonical handle via attribution.normalize_handle.
  Direct elif for intake_tier == research-task now stores just agent_name.
  @m3taversal -> m3taversal.

- diagnostics/backfill_submitted_by.py — same fix in two branches plus
  the reweave branch (pipeline (reweave) -> pipeline).

- scripts/backfill-research-session-attribution.py — UPDATE prs sets
  agent handle alone, no suffix. Docstring + log line updated.

- scripts/normalize-submitted-by.py (new) — one-time backfill that
  canonicalizes existing prs.submitted_by and sources.submitted_by rows.
  Strips trailing parenthetical decorators, lowercases, drops @. Defaults
  to dry-run; --apply to commit. Skips rows that would normalize to
  invalid handles (no garbage falls through silently).

Dry-run against live pipeline.db:
  prs:     3008 rows need normalization (clean mappings, 0 invalid)
  sources: 730 rows need normalization (clean mappings, 0 invalid)
  Total:   3738 rows. All map to existing handle column values.

After this lands + auto-deploys, the operator should run
  python3 scripts/normalize-submitted-by.py --apply
once to clean historical rows. The read-side canonicalization in
diagnostics/activity_feed_api.py (fix/activity-feed-canonical-handle)
becomes redundant defense-in-depth instead of load-bearing.

No KB writes.
2026-05-13 02:56:50 +00:00
..
activity_endpoint.py feat(activity): Timeline data gaps — type filter + commit_type classifier + source_channel reshape 2026-04-23 19:51:58 +01:00
activity_feed_api.py feat(activity-feed): add pr_url field for GitHub PR clickthrough 2026-05-11 20:58:36 -04:00
alerting.py fix: sync all code from VPS — repo is now authoritative source of truth 2026-04-15 13:18:01 +01:00
alerting_routes.py fix: sync all code from VPS — repo is now authoritative source of truth 2026-04-15 13:18:01 +01:00
app.py fix(diagnostics): wire /api/leaderboard into app.py + fix rolling-window SQL 2026-04-27 13:30:26 +01:00
backfill_submitted_by.py fix(attribution): canonicalize submitted_by at write time + historical normalizer 2026-05-13 02:56:50 +00:00
claims_api.py fix(claims): unwrap ```markdown code fences + 404 for fragments 2026-05-11 12:02:54 +01:00
contributor_profile_api.py feat: filter system accounts from leaderboard, add primary_ci field 2026-04-21 11:33:47 +01:00
daily_digest.py Consolidate pipeline code from teleo-codex + VPS into single repo 2026-04-07 16:52:26 +01:00
daily_digest_routes.py Consolidate pipeline code from teleo-codex + VPS into single repo 2026-04-07 16:52:26 +01:00
dashboard-v2.html Consolidate pipeline code from teleo-codex + VPS into single repo 2026-04-07 16:52:26 +01:00
dashboard_agents.py Consolidate pipeline code from teleo-codex + VPS into single repo 2026-04-07 16:52:26 +01:00
dashboard_epistemic.py fix: sync all code from VPS — repo is now authoritative source of truth 2026-04-15 13:18:01 +01:00
dashboard_health.py Consolidate pipeline code from teleo-codex + VPS into single repo 2026-04-07 16:52:26 +01:00
dashboard_ops.py Consolidate pipeline code from teleo-codex + VPS into single repo 2026-04-07 16:52:26 +01:00
dashboard_portfolio.py fix: apply Ganymede review fixes to portfolio code 2026-04-20 17:00:02 +01:00
dashboard_prs.py fix: sync all code from VPS — repo is now authoritative source of truth 2026-04-15 13:18:01 +01:00
dashboard_routes.py sync: dashboard_routes.py from VPS — digest + contributor-graph endpoints 2026-04-21 11:01:15 +01:00
leaderboard_routes.py fix(diagnostics): wire /api/leaderboard into app.py + fix rolling-window SQL 2026-04-27 13:30:26 +01:00
research_routes.py fix: sync all code from VPS — repo is now authoritative source of truth 2026-04-15 13:18:01 +01:00
research_tracking.py fix: sync all code from VPS — repo is now authoritative source of truth 2026-04-15 13:18:01 +01:00
response_audit_routes.py Consolidate pipeline code from teleo-codex + VPS into single repo 2026-04-07 16:52:26 +01:00
review_queue.py fix: sync all code from VPS — repo is now authoritative source of truth 2026-04-15 13:18:01 +01:00
review_queue_routes.py Consolidate pipeline code from teleo-codex + VPS into single repo 2026-04-07 16:52:26 +01:00
shared_ui.py sync VPS state: portfolio dashboard + fetch_coins.py 2026-04-20 16:55:36 +01:00
teleo-diagnostics.service epimetheus: sync VPS-deployed code to repo — Mar 18-20 reliability + features 2026-03-20 20:17:27 +00:00
tier1_metrics.py Consolidate pipeline code from teleo-codex + VPS into single repo 2026-04-07 16:52:26 +01:00
tier1_routes.py Consolidate pipeline code from teleo-codex + VPS into single repo 2026-04-07 16:52:26 +01:00
vitality.py fix: sync all code from VPS — repo is now authoritative source of truth 2026-04-15 13:18:01 +01:00
vitality_routes.py fix: sync all code from VPS — repo is now authoritative source of truth 2026-04-15 13:18:01 +01:00