Compare commits

..

1 commit

Author SHA1 Message Date
Teleo Agents
3323bbd261 fix(activity-feed): hide pipeline-attributed events from public timeline
After canonicalizing submitted_by (PRs #9, #10, #11), reweave/* and
ingestion/* PRs now correctly carry submitted_by=pipeline. They show up
in the activity feed as a contributor row that has no /contributors/
profile page (pipeline does not meet the min_claims floor), so clicks
404.

Reweave/ingestion are pipeline housekeeping — graph re-knitting and
external source ingestion run by the daemon, not contributions. The
feed already filters commit_type=pipeline via _FEED_COMMIT_TYPES; this
extends the same intent along the contributor axis.

Internal diagnostics, CI math, and contribution_events are unaffected
— only the public timeline drops these rows.

Verified locally against 1972 events: 0 pipeline rows remain in
output, contributors are leo/vida/clay/rio/theseus/astra/m3taversal.
2026-05-13 04:22:55 +00:00

View file

@ -123,21 +123,10 @@ def _claim_target_url(claim_slug):
return f"/claims/{claim_slug}"
# Canonical clickthrough URL for an activity-feed event.
#
# Every merged PR in the pipeline.db `prs` table lives on Forgejo at
# git.livingip.xyz/teleo/teleo-codex/pulls/{number}. A small subset (3 of
# 4094 as of 2026-05-13) was additionally mirrored to GitHub and has
# prs.github_pr populated. Prefer GitHub when available (more public-facing
# surface), fall back to Forgejo so every row has a real destination
# instead of None (which makes the frontend whole-row overlay no-op and
# leaves pipeline-attributed events looking dead-on-click).
def _pr_url(pr_number, github_pr):
if github_pr:
return f"https://github.com/living-ip/teleo-codex/pull/{github_pr}"
if pr_number:
return f"https://git.livingip.xyz/teleo/teleo-codex/pulls/{pr_number}"
return None
def _github_pr_url(github_pr):
if not github_pr:
return None
return f"https://github.com/living-ip/teleo-codex/pull/{github_pr}"
# Canonicalize contributor labels so frontend links resolve to real
@ -275,7 +264,7 @@ def _build_events():
"ci_earned": round(ci_earned, 2),
"summary": summary_text,
"pr_number": row["number"],
"pr_url": _pr_url(row["number"], row["github_pr"]),
"pr_url": _github_pr_url(row["github_pr"]),
"source_channel": row["source_channel"] or "unknown",
})
continue
@ -296,7 +285,7 @@ def _build_events():
"ci_earned": round(ci_earned, 2),
"summary": summary_text,
"pr_number": row["number"],
"pr_url": _pr_url(row["number"], row["github_pr"]),
"pr_url": _github_pr_url(row["github_pr"]),
"source_channel": row["source_channel"] or "unknown",
})
continue
@ -335,7 +324,7 @@ def _build_events():
"ci_earned": round(ci_earned, 2),
"summary": summary_text,
"pr_number": row["number"],
"pr_url": _pr_url(row["number"], row["github_pr"]),
"pr_url": _github_pr_url(row["github_pr"]),
"source_channel": row["source_channel"] or "unknown",
})