Skip to content

feat(signals): artefacts as report response log#61545

Open
oliverb123 wants to merge 39 commits into
masterfrom
posthog-code/signals-code-artefact-types
Open

feat(signals): artefacts as report response log#61545
oliverb123 wants to merge 39 commits into
masterfrom
posthog-code/signals-code-artefact-types

Conversation

@oliverb123

@oliverb123 oliverb123 commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

Overall idea: reports are a living object, the "core" around which work happens autonomously within posthog. To that end, we need a way to produce a "log" of that work that's happening - different agents will run, they'll push commits or create insights or flags, or suggest reviewers, or whatever, and when they do, they should add a small note to the report about what they found or did. The UI for this is rough right now (see PostHog/code#2557), but as a directional idea it looks like a log of artifacts:

image

We'll work on the naming - "artefact log" is obviously incorrect, "report log" is probably better, or (lord help me) "responder log".

Notable artefact types:
The existing assessment/judgement artefacts still exist, and are slightly unique, in so far as they (unlike some of the later ones) are closer to a "status" than a "log item" - as such, they've been changed slightly to act as a kind of "last write wins" class of objects, where the "status" of a report (it's assigned reviewers, it's priority, etc) is derived from whatever the most recently written artefact of that type is. For example, here are two items in the log:
image
image

The final set of assigned reviewers for the report is then:
image

Priority and actionability work similarly.

We also have a new task-run artefact, which replaces SignalReportTask entirely - a task_run artefact is the task↔report association now, and the task's purpose is derived from the artefact's (product, type) (I've included a management command to migrate the legacy rows to artefacts, and will run it once this is in place; dropping the now-dead table is a follow-up migration). This allows much more free-form association of tasks to reports, which I think will matter a lot as a given report results in a higher number of individual tasks (e.g. with Peters "workstream" concept, if a work stream is a report (and it should be), there can be a quite large number of tasks. Other products building autonomous features on top of reports/the inbox will also need more freeform association). A running agent can now also associate its own task with any report it decides its work relates to, then start producing artefacts. They look like this:
image

We also now have "code reference", "diff proposed" and "line reference" artefacts. The first and third will be useful, in my opinion, for helping an Human/LLM walk through a PR or set of PR's during review, letting responder agents highlight particular findings or suggest point changes without pushing a whole branch.
image

Then there is also the full on diff view - this started life as a "pushed branch" artefact diffed against a base branch, but I've since decided against that model: we now track individual commits instead. The agent harness records one commit artefact per pushed commit (automatically, from the signed-commit tool - see the Code PR), and the diff view renders that commit's diff inline (again, this needs to be quite a bit prettier really):
image

Since the first cut, the original to-do list has landed in this PR:

  • Wiring up artefact creation for custom agents, and for the agents run by the pipeline, so they emit these — done: a signals_report MCP preset gives the pipeline's research/implementation sandboxes the write tools, and commits are recorded automatically by the harness
  • Artefacts should, wherever possible, point back to the thing that created them — done: every new artefact is attributed to a user, a task, or (explicitly) the system, enforced as a required argument at the model helpers. Agent writes are attributed deterministically via an X-PostHog-Task-Id header baked into the sandbox MCP config — the LLM never handles its own task id
  • Almost certainly the existing auto-start logic doesn't handle this properly — done: auto-start idempotency now keys on the implementation task-run artefact, inside the existing report-row lock
  • it's uggo but I have full faith and confidence in the de-uggo-ifier (@ michael) here

Sharing mostly so people can pull it, play around with it, and so people know what I mean when I say "artefacts as log"

Update from the review pass: the research agent no longer holds the artefact write tools — its findings and judgments are extracted from the multi-turn session by the pipeline, which persists them deterministically and now only appends a new artefact version when something actually changed (on re-research the agent confirms a still-correct finding/judgment instead of regenerating it). Implementation agents do get write access — they now run with full MCP scopes so they can log notes, code references, and diffs while they work.

AI slop below (probably not useful):

Problem

A SignalReportArtefact was a write-once, replaced snapshot: the agentic pipeline deleted and re-created its artefact types on every run, and nothing else wrote them. We want artefacts to become an append-only log of the work done on a report — so a signal report reads as a living document: the evidence the research agent gathered, the commits it pushed, the task runs that executed, and free-form notes, all accumulating over time — with every entry validated against a per-type schema and attributed to whoever produced it.

Changes

Turns SignalReportArtefact into an attributed, schema-validated work-log with a typed write surface.

Model + migrations

  • Adds updated_at (nullable, auto_now) — log artefacts are editable in place.
  • Adds attribution columns: created_by (FK posthog.User, SET_NULL) and task (FK tasks.Task, SET_NULL), nullable for legacy rows. Every write helper takes a required ArtefactAttribution (user | task | system) so no write site can silently skip attribution.
  • Splits artefact types into two contracts, both append-only and both writable by anyone (nothing is pipeline-owned): status artefacts are latest-wins (judgments, repo selection, suggested reviewers — each (re)assessment appends a row, the current status is the newest); log artefacts accumulate and are addressable by UUID (code_reference, code_diff, line_reference, commit, task_run, note). Expressed as STATUS_ARTEFACT_TYPES / LOG_ARTEFACT_TYPES. signal_finding is keyed by (report, signal_id) and dismissal entries stack; both have dedicated appenders.
  • Business logic lives on the model: append_status, add_log, append_finding, append_dismissal, update_content — all funnelled through a single validated, attributed create.
  • SignalReportTask is fully deprecated — no longer read or written anywhere; a task_run artefact is the sole task↔report association (the table drop is a follow-up migration). Purpose is derived from the artefact's (product, type); implementation_pr_url is the newest PR from any artefact-associated task; auto-start idempotency keys on the implementation task_run artefact inside the existing select_for_update block.
  • Migrations: the additive updated_at + choices migration, a concurrent latest-wins index on (report, type, -created_at), and the attribution/constraint migration (all nullable ADD COLUMNs and metadata-only ALTERs).

Content schemasartefact_schemas.py, a dependency-light pydantic module, is now the canonical home of every artefact content shape, collected in an ARTEFACT_CONTENT_SCHEMAS registry (a test asserts exact coverage of the type enum). validate_artefact_content is the single write gate, called by the model helpers and the API serializers — validation is a gate, not a rewrite, and reads stay generic JSON for back-compat with legacy rows.

Write APISignalReportArtefactViewSet gains POST / PATCH / DELETE for artefacts of any type (writing a status type appends a new latest-wins row), plus schema-documented list/retrieve, reusing scope_object = "task" (no new scope), team-scoped via the existing queryset, with per-type schema validation. POSTing a task_run artefact is the "associate me" operation: content.task_id defaults from the task-id header (so content: {} suffices for an agent), product/type default to tasks/agent_run, the named task must belong to the team, and re-association is idempotent. Writes are attributed to the task named by an X-PostHog-Task-Id header (set automatically for sandbox agents and forwarded by the MCP server) or to the requesting user. The bespoke suggested_reviewers PUT path is untouched bar attribution. A diff action renders a commit artefact's unified diff via GitHubIntegration.get_commit_diff. The reports list accepts ?task_id=, resolved through task_run artefacts.

MCP toolsinbox-report-artefacts-create / -update / -delete (task:write) and -list / -retrieve (task:read), surfaced to the pipeline's sandboxes via a new signals_report scope preset (scope-identical to read_only, but read-only mode no longer strips the task:write tools). A new agent_note YAML field lets any tool append brief point-of-use guidance to its responses; inbox-reports-retrieve uses it to teach agents the artefact protocol (associate via a task_run artefact, then log work as artefacts) without bloating tool descriptions.

Backfillbackfill_task_run_artefacts converts legacy relationship-labelled SignalReportTask rows into task_run artefacts (idempotent, with --dry-run and --team-id); unlabelled rows get default tasks/agent_run artefacts, since artefacts are now the only association.

Pipeline — the agentic pipeline's findings/judgments/reviewers are attributed to the research sandbox task, repo selection to its selection task (when one ran), and the safety judge explicitly to the system.

Out of scope (follow-ups): dropping the SignalReportTask table once the backfill has run, commit artefacts for git_signed_rewrite, and a review of the full task:write tool surface the signals_report preset exposes.

How did you test this code?

I'm an agent. Automated checks run in a full dev environment:

  • pytest across the signals, tasks, integration-model, and oauth suites — 1,750+ passing (write API incl. attribution + per-type validation, model helpers, commit diff action, artefact-based association incl. idempotency and header defaulting, auto-start idempotency, backfill), plus the full MCP vitest suite.
  • ruff check + ruff format --check — clean; tach check — clean.
  • makemigrations --check --dry-run — no drift; sqlmigrate on 0037/0038/0039 — nullable ADD COLUMNs, a concurrent index, and metadata-only ALTERs.
  • hogli build:openapi — regenerated the OpenAPI spec, frontend types, and MCP tool definitions.

Automatic notifications

  • Publish to changelog?
  • Alert Sales and Marketing teams?

Docs update

ARTEFACT_LOG_PLAN.md documents the shipped design; products/signals/backend/management/AGENTS.md documents the backfill command.

🤖 Agent context

Autonomy: Human-driven (agent-assisted) — Oliver Browne.

Authored via the PostHog Code agent. The PR was reworked in place mid-flight: the original pushed_branch + branch-diff surface was replaced by per-commit artefacts before ever shipping, the relationship labelling on task links was removed in favour of artefact-derived purposes, and finally the SignalReportTask link table itself was retired — a task_run artefact is the association. Design notes: attribution is enforced at the model-helper signature (a required discriminated argument) rather than a DB constraint, because legacy rows and explicit system writes legitimately carry NULLs; the task-id header is attribution metadata, not an authorization boundary — the token is already team-scoped and the named task must belong to the same team; content validation is wired server-side through a single registry gate, but stored payloads keep forward-compatible extra keys and reads never re-validate legacy rows.


Created with PostHog Code

Copilot AI review requested due to automatic review settings June 4, 2026 09:10
@github-actions

github-actions Bot commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

Hey @oliverb123! 👋

It looks like your git author email on this PR isn't your @posthog.com address (oliverbrowne627@gmail.com). Since you're on the PostHog team, it's worth pointing your local git author email at your @posthog.com address. Why it matters:

  • Consistent work identity in git history — internal tooling that attributes commits to team members keys off your @posthog.com address.
  • Keeps team contributions easy to tell apart from external community ones when scanning history.

You can fix it for this repo with:

git config user.email "you@posthog.com"

Or set it globally with git config --global user.email "you@posthog.com". No need to redo this PR — just a nudge for next time. 🙂

@assign-reviewers-posthog assign-reviewers-posthog Bot requested a review from a team June 4, 2026 09:11
@greptile-apps

greptile-apps Bot commented Jun 4, 2026

Copy link
Copy Markdown
Contributor
Prompt To Fix All With AI
Fix the following 2 code review issues. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 2
products/signals/backend/report_generation/research.py:123-128
The multi-field validator always returns the same static message listing all three fields, even though it is called once per individual field. When only `contents` is empty, the error will say "file_path, contents, and relevance_note must not be empty", which is misleading. A single generic message (or a field-specific one) would be clearer for callers debugging validation failures.

```suggestion
    @field_validator("file_path", "contents", "relevance_note")
    @classmethod
    def fields_must_not_be_empty(cls, v: str) -> str:
        if not v.strip():
            raise ValueError("must not be empty or whitespace-only")
        return v
```

### Issue 2 of 2
products/signals/backend/report_generation/research.py:146-151
Same issue as in `CodeReference`: the error message always names all three fields even though the validator fires once per field. Changing to a generic message makes each failure unambiguous.

```suggestion
    @field_validator("file_path", "diff", "relevance_note")
    @classmethod
    def fields_must_not_be_empty(cls, v: str) -> str:
        if not v.strip():
            raise ValueError("must not be empty or whitespace-only")
        return v
```

Reviews (1): Last reviewed commit: "feat(signals): add code reference and co..." | Re-trigger Greptile

Comment thread products/signals/backend/report_generation/research.py Outdated
Comment thread products/signals/backend/report_generation/research.py Outdated

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR extends Signals’ SignalReportArtefact taxonomy to support attaching code-level evidence to reports by introducing two new artefact types (code_reference and code_diff) and documenting/validating their JSON shapes, without changing any producer or API write paths.

Changes:

  • Added CODE_REFERENCE and CODE_DIFF to SignalReportArtefact.ArtefactType, with a corresponding choices-only Django migration.
  • Introduced Pydantic content schemas CodeReference and CodeDiff (including basic non-empty validation and a end_line >= start_line validator).
  • Updated documentation and expanded the existing PUT rejection test matrix to include the new non-editable types.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated no comments.

Show a summary per file
File Description
products/signals/backend/test/test_signal_report_artefact_api.py Extends the parameterized PUT-rejection coverage to include code_reference and code_diff.
products/signals/backend/report_generation/research.py Adds Pydantic schemas for the new artefact content shapes, including validators.
products/signals/backend/models.py Adds the two new enum values to SignalReportArtefact.ArtefactType.
products/signals/backend/migrations/max_migration.txt Bumps the recorded max migration to 0028.
products/signals/backend/migrations/0028_alter_signalreportartefact_type.py Updates type field choices to include the new artefact types (metadata-only change).
products/signals/ARCHITECTURE.md Documents the new artefact types and their expected JSON payload shapes.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@github-actions

github-actions Bot commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

Migration SQL Changes

Hey 👋, we've detected some migrations on this PR. Here's the SQL output for each migration, make sure they make sense:

products/signals/backend/migrations/0038_signalreportartefact_updated_at_and_more.py

BEGIN;
--
-- Add field implementation_task to signalreport
--
ALTER TABLE "signals_signalreport" ADD COLUMN "implementation_task_id" uuid NULL CONSTRAINT "signals_signalreport_implementation_task__158a3753_fk_posthog_t" REFERENCES "posthog_task"("id") DEFERRABLE INITIALLY DEFERRED; SET CONSTRAINTS "signals_signalreport_implementation_task__158a3753_fk_posthog_t" IMMEDIATE;
--
-- Add field updated_at to signalreportartefact
--
ALTER TABLE "signals_signalreportartefact" ADD COLUMN "updated_at" timestamp with time zone DEFAULT '2026-06-12 14:13:47.990443+00:00'::timestamptz NULL;
ALTER TABLE "signals_signalreportartefact" ALTER COLUMN "updated_at" DROP DEFAULT;
--
-- Alter field type on signalreportartefact
--
-- (no-op)
--
-- Add field created_by to signalreportartefact
--
ALTER TABLE "signals_signalreportartefact" ADD COLUMN "created_by_id" integer NULL CONSTRAINT "signals_signalreport_created_by_id_ba6b4b2e_fk_posthog_u" REFERENCES "posthog_user"("id") DEFERRABLE INITIALLY DEFERRED; SET CONSTRAINTS "signals_signalreport_created_by_id_ba6b4b2e_fk_posthog_u" IMMEDIATE;
--
-- Add field task to signalreportartefact
--
ALTER TABLE "signals_signalreportartefact" ADD COLUMN "task_id" uuid NULL CONSTRAINT "signals_signalreport_task_id_8db0a6af_fk_posthog_t" REFERENCES "posthog_task"("id") DEFERRABLE INITIALLY DEFERRED; SET CONSTRAINTS "signals_signalreport_task_id_8db0a6af_fk_posthog_t" IMMEDIATE;
--
-- Alter field relationship on signalreporttask
--
ALTER TABLE "signals_signalreporttask" ALTER COLUMN "relationship" DROP NOT NULL;
--
-- Create constraint unique_signal_report_task on model signalreporttask
--
ALTER TABLE "signals_signalreporttask" ADD CONSTRAINT "unique_signal_report_task" UNIQUE ("report_id", "task_id");
CREATE INDEX "signals_signalreport_implementation_task_id_158a3753" ON "signals_signalreport" ("implementation_task_id");
CREATE INDEX "signals_signalreportartefact_created_by_id_ba6b4b2e" ON "signals_signalreportartefact" ("created_by_id");
CREATE INDEX "signals_signalreportartefact_task_id_8db0a6af" ON "signals_signalreportartefact" ("task_id");
COMMIT;

products/signals/backend/migrations/0039_signalreportartefact_latest_index.py

--
-- Custom state/database change combination
--
SET lock_timeout = 0;
SET statement_timeout = 0;
CREATE INDEX CONCURRENTLY IF NOT EXISTS "signals_sig_rpt_type_ct_idx" ON "signals_signalreportartefact" (report_id, type, created_at DESC);

Last updated: 2026-06-12 14:14 UTC (ea758d8)

@github-actions

github-actions Bot commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

🔍 Migration Risk Analysis

We've analyzed your migrations for potential risks.

Summary: 0 Safe | 2 Needs Review | 0 Blocked

⚠️ Needs Review

May have performance impact

signals.0038_signalreportartefact_updated_at_and_more
  └─ #1 ✅ AddField
     Adding nullable field requires brief lock
     model: signalreport, field: implementation_task
  └─ #2 ✅ AddField
     Adding nullable field requires brief lock
     model: signalreportartefact, field: updated_at
  └─ #3 ⚠️ AlterField
     Field alteration may cause table locks or data loss (check if changing type or constraints)
     model: signalreportartefact, field: type, field_type: CharField
  └─ #4 ✅ AddField
     Adding nullable field requires brief lock
     model: signalreportartefact, field: created_by
  └─ #5 ✅ AddField
     Adding nullable field requires brief lock
     model: signalreportartefact, field: task
  └─ #6 ⚠️ AlterField
     Field alteration may cause table locks or data loss (check if changing type or constraints)
     model: signalreporttask, field: relationship, field_type: CharField
  └─ #7 ⚠️ AddConstraint
     Adding constraint may lock table (use NOT VALID pattern)
     model: signalreporttask
signals.0039_signalreportartefact_latest_index
  └─ #1 ✅ SeparateDatabaseAndState
     Wrapper operation - see nested operations for risk: CreateIndexConcurrently
     database_operations: CreateIndexConcurrently
     └─ #2 ⚠️ CreateIndexConcurrently: Unknown operation type: CreateIndexConcurrently

📚 How to Deploy These Changes Safely

AddConstraint:

Add constraints in 2 phases without locking:

  1. Add constraint with NOT VALID (instant, validates new rows only)
  2. Validate constraint in separate migration (scans table with non-blocking lock)

See the migration safety guide

AddField:

This operation acquires a brief lock but doesn't rewrite the table.

Deployment uses lock timeouts with automatic retries, so lock contention will cause retries rather than connection pile-up.

Last updated: 2026-06-12 14:14 UTC (ea758d8)

@oliverb123 oliverb123 requested a review from a team as a code owner June 4, 2026 13:08
Comment thread products/signals/backend/scout_harness/views.py
@veria-ai

veria-ai Bot commented Jun 4, 2026

Copy link
Copy Markdown

PR overview

This PR adds report-response log artefacts for Signals, including backend endpoints and related task/GitHub integration for storing and acting on report artefact entries such as reviewers, repository selections, pushed branches, commits, and task associations.

The PR has made progress with 4 issues already addressed, but 7 security issues remain open. The most significant remaining risks are that writable report artefacts can alter canonical pipeline status and reviewer/task flow, and GitHub-related artefacts can be used to access repository data through installation-token-backed endpoints without sufficient binding or input validation. Other open issues involve overly broad write capability for signal-report agents, weak task/report association trust, and mutation paths that do not consistently enforce per-task boundaries. Overall, the current posture still has clear attacker-visible impact and needs more tightening before it is safe to merge.

Open issues (7)

Fixed/addressed: 4 · PR risk: 8/10

@oliverb123 oliverb123 force-pushed the posthog-code/signals-code-artefact-types branch from f1f9691 to 58f34c1 Compare June 9, 2026 12:45
@Gilbert09 Gilbert09 removed the request for review from a team June 9, 2026 14:53
@oliverb123 oliverb123 changed the title feat(signals): add code reference and code diff artefact types feat(signals): mutable append-only artefact log + write API Jun 9, 2026
@oliverb123 oliverb123 force-pushed the posthog-code/signals-code-artefact-types branch from 3dd3f58 to fdfd6c1 Compare June 9, 2026 15:22
@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

MCP UI Apps size report

App JS CSS
debug 586.6 KB 148.6 KB
action 355.0 KB 148.6 KB
action-list 520.2 KB 148.6 KB
cohort 354.0 KB 148.6 KB
cohort-list 519.1 KB 148.6 KB
email-template 353.9 KB 148.6 KB
error-details 375.4 KB 148.6 KB
error-issue 354.7 KB 148.6 KB
error-issue-list 520.1 KB 148.6 KB
experiment 517.0 KB 148.6 KB
experiment-list 520.9 KB 148.6 KB
experiment-results 518.8 KB 148.6 KB
feature-flag 552.8 KB 148.6 KB
feature-flag-list 556.9 KB 148.6 KB
feature-flag-testing 432.7 KB 148.6 KB
insight-actors 515.5 KB 148.6 KB
invite-email-preview 353.3 KB 148.6 KB
llm-costs 515.1 KB 148.6 KB
session-recording 355.8 KB 148.6 KB
session-summary 361.5 KB 148.6 KB
survey 355.5 KB 148.6 KB
survey-global-stats 517.8 KB 148.6 KB
survey-list 520.8 KB 148.6 KB
survey-stats 517.8 KB 148.6 KB
trace-span 354.4 KB 148.6 KB
trace-span-list 520.1 KB 148.6 KB
workflow 354.3 KB 148.6 KB
workflow-list 519.5 KB 148.6 KB
query-results 662.5 KB 148.6 KB
render-ui 622.6 KB 148.6 KB
visual-review-snapshots 359.0 KB 148.6 KB

@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Size Change: -38.1 kB (-0.06%)

Total Size: 62.2 MB

📦 View Changed
Filename Size Change
frontend/dist-report/exporter/src/exporter/scenes/ExporterNotebookScene 2.88 MB -17.4 kB (-0.6%)
frontend/dist-report/posthog-app/_chunks/chunk 2.57 MB -16.9 kB (-0.65%)
frontend/dist-report/render-query/src/render-query/render-query 24.6 MB -1.86 kB (-0.01%)
frontend/dist-report/toolbar/src/toolbar/toolbar 10.5 MB -1.86 kB (-0.02%)
ℹ️ View Unchanged
Filename Size Change
frontend/dist-report/decompression-worker/src/scenes/session-recordings/player/snapshot-processing/decompressionWorker 2.85 kB 0 B
frontend/dist-report/exporter/_chunks/chunk 2.62 MB 0 B
frontend/dist-report/exporter/_parent/products/actions/frontend/pages/Action 27.7 kB 0 B
frontend/dist-report/exporter/_parent/products/actions/frontend/pages/Actions 5.46 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilityScene 121 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilitySessionScene 21.3 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilityTraceScene 130 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilityUsers 3.58 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/clusters/AIObservabilityClusterScene 22 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/clusters/AIObservabilityClustersScene 54.7 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetScene 20.9 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetsScene 4.2 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluation 60 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluationsScene 31.9 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/evaluations/EvaluationTemplates 671 B 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/LLMASessionFeedbackDisplay 4.81 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/playground/AIObservabilityPlaygroundScene 38 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/prompts/LLMPromptScene 33.2 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/prompts/LLMPromptsScene 5.39 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/tags/AIObservabilityTag 31.8 kB 0 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/tags/AIObservabilityTagsScene 11.6 kB 0 B
frontend/dist-report/exporter/_parent/products/business_knowledge/frontend/scenes/BusinessKnowledgeScene 21.1 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/components/Assignee/CyclotronJobInputAssignee 1.38 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/components/SlaBusinessHours/CyclotronJobInputBusinessHours 2.69 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/components/TicketTags/CyclotronJobInputTicketTags 783 B 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/scenes/settings/SupportSettingsScene 5.64 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/scenes/ticket/SupportTicketScene 38.8 kB 0 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/scenes/tickets/SupportTicketsScene 2.02 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/CustomerAnalyticsScene 84 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerAnalyticsConfigurationScene/CustomerAnalyticsConfigurationScene 6.41 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyBuilderScene/CustomerJourneyBuilderScene 6.13 kB 0 B
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyTemplatesScene/CustomerJourneyTemplatesScene 9.71 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/DataWarehouseScene 49.8 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/NewSourceScene/NewSourceScene 2.84 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SchemaScene/SchemaScene 27.1 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SourceConnectScene/SourceConnectScene 7.4 kB +472 B (+6.81%) 🔍
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SourceScene/SourceScene 2.62 kB 0 B
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SourcesScene/SourcesScene 7.53 kB 0 B
frontend/dist-report/exporter/_parent/products/early_access_features/frontend/EarlyAccessFeature 5.27 kB 0 B
frontend/dist-report/exporter/_parent/products/early_access_features/frontend/EarlyAccessFeatures 3.83 kB 0 B
frontend/dist-report/exporter/_parent/products/endpoints/frontend/EndpointScene 47.2 kB 0 B
frontend/dist-report/exporter/_parent/products/endpoints/frontend/EndpointsScene 27.3 kB 0 B
frontend/dist-report/exporter/_parent/products/error_tracking/frontend/scenes/ErrorTrackingFingerprintsScene/ErrorTrackingIssueFingerprintsScene 7.76 kB 0 B
frontend/dist-report/exporter/_parent/products/error_tracking/frontend/scenes/ErrorTrackingIssueScene/ErrorTrackingIssueScene 102 kB 0 B
frontend/dist-report/exporter/_parent/products/error_tracking/frontend/scenes/ErrorTrackingScene/ErrorTrackingScene 42.2 kB 0 B
frontend/dist-report/exporter/_parent/products/feature_flags/frontend/FeatureFlagTemplatesScene 6.91 kB 0 B
frontend/dist-report/exporter/_parent/products/games/368Hedgehogs/368Hedgehogs 5.24 kB 0 B
frontend/dist-report/exporter/_parent/products/games/FlappyHog/FlappyHog 5.7 kB 0 B
frontend/dist-report/exporter/_parent/products/legal_documents/frontend/scenes/LegalDocumentNewScene 60.6 kB 0 B
frontend/dist-report/exporter/_parent/products/legal_documents/frontend/scenes/LegalDocumentsScene 6.78 kB 0 B
frontend/dist-report/exporter/_parent/products/links/frontend/LinkScene 25.5 kB 0 B
frontend/dist-report/exporter/_parent/products/links/frontend/LinksScene 5.25 kB 0 B
frontend/dist-report/exporter/_parent/products/live_debugger/frontend/LiveDebugger 19.7 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/LogsScene 22.8 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsAlertDetailScene/LogsAlertDetailScene 19 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsAlertNotificationDetailScene/LogsAlertNotificationDetailScene 9.1 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsSamplingDetailScene/LogsSamplingDetailScene 6.25 kB 0 B
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsSamplingNewScene/LogsSamplingNewScene 3.26 kB 0 B
frontend/dist-report/exporter/_parent/products/managed_migrations/frontend/ManagedMigration 15.4 kB 0 B
frontend/dist-report/exporter/_parent/products/mcp_analytics/frontend/MCPAnalyticsScene 81.8 kB 0 B
frontend/dist-report/exporter/_parent/products/mcp_analytics/frontend/MCPAnalyticsToolDetail 22.4 kB 0 B
frontend/dist-report/exporter/_parent/products/metrics/frontend/MetricsScene 18.4 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/stickiness/StickinessBarChart/StickinessBarChart 4.37 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/stickiness/StickinessLineChart/StickinessLineChart 4.25 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsBarChart/TrendsBarChart 10.1 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsLifecycleChart/TrendsLifecycleChart 6.21 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsLineChart/TrendsLineChart 5.92 kB 0 B
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsPieChart/TrendsPieChart 5.47 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/observations/ReplayObservation 18.1 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ReplayScanner 26.7 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ReplayScannersScene 21.9 kB 0 B
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ScannerEditorScene 25 kB 0 B
frontend/dist-report/exporter/_parent/products/revenue_analytics/frontend/revenueAnalyticsLogic 1.62 kB 0 B
frontend/dist-report/exporter/_parent/products/revenue_analytics/frontend/RevenueAnalyticsScene 29.5 kB 0 B
frontend/dist-report/exporter/_parent/products/session_summaries/frontend/SessionGroupSummariesTable 5.54 kB 0 B
frontend/dist-report/exporter/_parent/products/session_summaries/frontend/SessionGroupSummaryScene 23.1 kB 0 B
frontend/dist-report/exporter/_parent/products/skills/frontend/LLMSkillScene 1.67 kB 0 B
frontend/dist-report/exporter/_parent/products/skills/frontend/LLMSkillsScene 1.68 kB 0 B
frontend/dist-report/exporter/_parent/products/tasks/frontend/SlackTaskContextScene 9.4 kB 0 B
frontend/dist-report/exporter/_parent/products/tasks/frontend/TaskDetailScene 25.2 kB 0 B
frontend/dist-report/exporter/_parent/products/tasks/frontend/TaskTracker 14.9 kB 0 B
frontend/dist-report/exporter/_parent/products/tracing/frontend/TracingScene 79.9 kB 0 B
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterview 10.9 kB 0 B
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterviewResponse 8.43 kB 0 B
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterviews 6.56 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewIndexScene 3.11 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewRunScene 46 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewRunsScene 7.76 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewSettingsScene 11.7 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotHistoryScene 14.3 kB 0 B
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotOverviewScene 19.9 kB 0 B
frontend/dist-report/exporter/_parent/products/workflows/frontend/TemplateLibrary/MessageTemplate 17.1 kB 0 B
frontend/dist-report/exporter/_parent/products/workflows/frontend/Workflows/WorkflowScene 111 kB 0 B
frontend/dist-report/exporter/_parent/products/workflows/frontend/WorkflowsScene 61.5 kB 0 B
frontend/dist-report/exporter/src/exporter/exporter 43 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterDashboardScene 6.3 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterHeatmapScene 20.5 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterInsightScene 7.01 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterInterviewScene 310 kB 0 B
frontend/dist-report/exporter/src/exporter/scenes/ExporterRecordingScene 5.42 kB 0 B
frontend/dist-report/exporter/src/exporterSharedChunkAnchors 1.3 kB 0 B
frontend/dist-report/exporter/src/lib/components/Cards/TextCard/TextCardMarkdownEditor 10.6 kB 0 B
frontend/dist-report/exporter/src/lib/components/MonacoDiffEditor 533 B 0 B
frontend/dist-report/exporter/src/lib/lemon-ui/LemonMarkdown/MermaidDiagram 2 kB 0 B
frontend/dist-report/exporter/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown 790 B 0 B
frontend/dist-report/exporter/src/lib/lemon-ui/Link/Link 415 B 0 B
frontend/dist-report/exporter/src/lib/monaco/CodeEditor 448 B 0 B
frontend/dist-report/exporter/src/lib/monaco/CodeEditorImpl 26 kB 0 B
frontend/dist-report/exporter/src/lib/monaco/CodeEditorInline 649 B 0 B
frontend/dist-report/exporter/src/lib/monaco/vimMode 211 kB 0 B
frontend/dist-report/exporter/src/lib/ui/Button/ButtonPrimitives 479 B 0 B
frontend/dist-report/exporter/src/queries/nodes/WebVitals/WebVitals 11.3 kB 0 B
frontend/dist-report/exporter/src/queries/nodes/WebVitals/WebVitalsPathBreakdown 4.84 kB 0 B
frontend/dist-report/exporter/src/queries/Query/Query 4.88 kB 0 B
frontend/dist-report/exporter/src/queries/schema 900 kB 0 B
frontend/dist-report/exporter/src/scenes/approvals/changeRequestsLogic 622 B 0 B
frontend/dist-report/exporter/src/scenes/authentication/shared/passkeyLogic 602 B 0 B
frontend/dist-report/exporter/src/scenes/data-pipelines/event-filtering/EventFilterScene 22.7 kB 0 B
frontend/dist-report/exporter/src/scenes/data-pipelines/TransformationsScene 7.98 kB 0 B
frontend/dist-report/exporter/src/scenes/hog-functions/misc/Diff 1.35 kB 0 B
frontend/dist-report/exporter/src/scenes/insights/views/BoxPlot/BoxPlot 6.53 kB 0 B
frontend/dist-report/exporter/src/scenes/insights/views/CalendarHeatMap/CalendarHeatMap 8.92 kB 0 B
frontend/dist-report/exporter/src/scenes/insights/views/RegionMap/RegionMap 30.7 kB 0 B
frontend/dist-report/exporter/src/scenes/insights/views/WorldMap/WorldMap 1.04 MB 0 B
frontend/dist-report/exporter/src/scenes/models/ModelsScene 19.2 kB 0 B
frontend/dist-report/exporter/src/scenes/models/NodeDetailScene 19.6 kB 0 B
frontend/dist-report/monaco-editor-worker/src/lib/monaco/workers/monacoEditorWorker 288 kB 0 B
frontend/dist-report/monaco-json-worker/src/lib/monaco/workers/monacoJsonWorker 419 kB 0 B
frontend/dist-report/monaco-typescript-worker/src/lib/monaco/workers/monacoTsWorker 7.02 MB 0 B
frontend/dist-report/posthog-app/_parent/products/actions/frontend/pages/Action 29.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/actions/frontend/pages/Actions 6.78 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilityScene 123 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilitySessionScene 21.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilityTraceScene 131 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilityUsers 4.5 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/clusters/AIObservabilityClusterScene 22.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/clusters/AIObservabilityClustersScene 55.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetScene 21.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetsScene 4.68 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluation 60.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluationsScene 33.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/evaluations/EvaluationTemplates 671 B 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/LLMASessionFeedbackDisplay 4.82 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/playground/AIObservabilityPlaygroundScene 38.5 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/prompts/LLMPromptScene 34 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/prompts/LLMPromptsScene 5.87 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/tags/AIObservabilityTag 33.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/tags/AIObservabilityTagsScene 12.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/business_knowledge/frontend/scenes/BusinessKnowledgeScene 21.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/components/Assignee/CyclotronJobInputAssignee 1.38 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/components/SlaBusinessHours/CyclotronJobInputBusinessHours 2.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/components/TicketTags/CyclotronJobInputTicketTags 783 B 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/scenes/settings/SupportSettingsScene 7.54 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/scenes/ticket/SupportTicketScene 33.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/scenes/tickets/SupportTicketsScene 2.53 kB 0 B
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/CustomerAnalyticsScene 84.3 kB 0 B
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerAnalyticsConfigurationScene/CustomerAnalyticsConfigurationScene 8.32 kB 0 B
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyBuilderScene/CustomerJourneyBuilderScene 7.42 kB 0 B
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyTemplatesScene/CustomerJourneyTemplatesScene 10.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/DataWarehouseScene 7.58 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/NewSourceScene/NewSourceScene 3.56 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SchemaScene/SchemaScene 27.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SourceConnectScene/SourceConnectScene 8.05 kB +472 B (+6.23%) 🔍
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SourceScene/SourceScene 3.26 kB 0 B
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SourcesScene/SourcesScene 8.14 kB 0 B
frontend/dist-report/posthog-app/_parent/products/early_access_features/frontend/EarlyAccessFeature 6.76 kB 0 B
frontend/dist-report/posthog-app/_parent/products/early_access_features/frontend/EarlyAccessFeatures 4.31 kB 0 B
frontend/dist-report/posthog-app/_parent/products/endpoints/frontend/EndpointScene 48.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/endpoints/frontend/EndpointsScene 26.5 kB 0 B
frontend/dist-report/posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingFingerprintsScene/ErrorTrackingIssueFingerprintsScene 8.27 kB 0 B
frontend/dist-report/posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingIssueScene/ErrorTrackingIssueScene 103 kB 0 B
frontend/dist-report/posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingScene/ErrorTrackingScene 44.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/feature_flags/frontend/FeatureFlagTemplatesScene 6.91 kB 0 B
frontend/dist-report/posthog-app/_parent/products/games/368Hedgehogs/368Hedgehogs 5.24 kB 0 B
frontend/dist-report/posthog-app/_parent/products/games/FlappyHog/FlappyHog 5.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/legal_documents/frontend/scenes/LegalDocumentNewScene 61.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/legal_documents/frontend/scenes/LegalDocumentsScene 7.26 kB 0 B
frontend/dist-report/posthog-app/_parent/products/links/frontend/LinkScene 26 kB 0 B
frontend/dist-report/posthog-app/_parent/products/links/frontend/LinksScene 5.73 kB 0 B
frontend/dist-report/posthog-app/_parent/products/live_debugger/frontend/LiveDebugger 20.2 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/LogsScene 23.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsAlertDetailScene/LogsAlertDetailScene 19.5 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsAlertNotificationDetailScene/LogsAlertNotificationDetailScene 9.58 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsSamplingDetailScene/LogsSamplingDetailScene 6.73 kB 0 B
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsSamplingNewScene/LogsSamplingNewScene 3.73 kB 0 B
frontend/dist-report/posthog-app/_parent/products/managed_migrations/frontend/ManagedMigration 15.8 kB 0 B
frontend/dist-report/posthog-app/_parent/products/mcp_analytics/frontend/MCPAnalyticsScene 83.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/mcp_analytics/frontend/MCPAnalyticsToolDetail 23.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/metrics/frontend/MetricsScene 19.5 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/stickiness/StickinessBarChart/StickinessBarChart 4.85 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/stickiness/StickinessLineChart/StickinessLineChart 4.73 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsBarChart/TrendsBarChart 10.5 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsLifecycleChart/TrendsLifecycleChart 6.69 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsLineChart/TrendsLineChart 6.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsPieChart/TrendsPieChart 5.95 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/observations/ReplayObservation 20.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScanner 28 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScannersScene 23.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ScannerEditorScene 25.5 kB 0 B
frontend/dist-report/posthog-app/_parent/products/revenue_analytics/frontend/revenueAnalyticsLogic 1.96 kB 0 B
frontend/dist-report/posthog-app/_parent/products/revenue_analytics/frontend/RevenueAnalyticsScene 30.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/session_summaries/frontend/SessionGroupSummariesTable 6.02 kB 0 B
frontend/dist-report/posthog-app/_parent/products/session_summaries/frontend/SessionGroupSummaryScene 25.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/skills/frontend/LLMSkillScene 2.15 kB 0 B
frontend/dist-report/posthog-app/_parent/products/skills/frontend/LLMSkillsScene 2.16 kB 0 B
frontend/dist-report/posthog-app/_parent/products/tasks/frontend/SlackTaskContextScene 9.88 kB 0 B
frontend/dist-report/posthog-app/_parent/products/tasks/frontend/TaskDetailScene 25.7 kB 0 B
frontend/dist-report/posthog-app/_parent/products/tasks/frontend/TaskTracker 15.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/tracing/frontend/TracingScene 80.5 kB 0 B
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterview 10.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterviewResponse 8.9 kB 0 B
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterviews 7.04 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewIndexScene 3.58 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewRunScene 46.4 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewRunsScene 8.24 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewSettingsScene 12.1 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotHistoryScene 14.8 kB 0 B
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotOverviewScene 20.3 kB 0 B
frontend/dist-report/posthog-app/_parent/products/workflows/frontend/TemplateLibrary/MessageTemplate 17.6 kB 0 B
frontend/dist-report/posthog-app/_parent/products/workflows/frontend/Workflows/WorkflowScene 105 kB 0 B
frontend/dist-report/posthog-app/_parent/products/workflows/frontend/WorkflowsScene 62.6 kB 0 B
frontend/dist-report/posthog-app/src/index 61.6 kB 0 B
frontend/dist-report/posthog-app/src/layout/panel-layout/ai-first/tabs/NavTabChat 7.99 kB 0 B
frontend/dist-report/posthog-app/src/lib/components/AppShortcuts/utils/DebugCHQueriesImpl 19.2 kB 0 B
frontend/dist-report/posthog-app/src/lib/components/Cards/TextCard/TextCardMarkdownEditor 10.6 kB 0 B
frontend/dist-report/posthog-app/src/lib/components/MonacoDiffEditor 533 B 0 B
frontend/dist-report/posthog-app/src/lib/lemon-ui/LemonMarkdown/MermaidDiagram 2 kB 0 B
frontend/dist-report/posthog-app/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown 790 B 0 B
frontend/dist-report/posthog-app/src/lib/lemon-ui/Link/Link 415 B 0 B
frontend/dist-report/posthog-app/src/lib/monaco/CodeEditor 448 B 0 B
frontend/dist-report/posthog-app/src/lib/monaco/CodeEditorImpl 26 kB 0 B
frontend/dist-report/posthog-app/src/lib/monaco/CodeEditorInline 649 B 0 B
frontend/dist-report/posthog-app/src/lib/monaco/vimMode 211 kB 0 B
frontend/dist-report/posthog-app/src/lib/ui/Button/ButtonPrimitives 482 B 0 B
frontend/dist-report/posthog-app/src/queries/nodes/WebVitals/WebVitals 12.6 kB 0 B
frontend/dist-report/posthog-app/src/queries/nodes/WebVitals/WebVitalsPathBreakdown 5.25 kB 0 B
frontend/dist-report/posthog-app/src/queries/Query/Query 6.17 kB 0 B
frontend/dist-report/posthog-app/src/queries/schema 900 kB 0 B
frontend/dist-report/posthog-app/src/scenes/activity/explore/EventsScene 8.34 kB 0 B
frontend/dist-report/posthog-app/src/scenes/activity/explore/SessionsScene 9.68 kB 0 B
frontend/dist-report/posthog-app/src/scenes/activity/live/LiveEventsTable 6.98 kB 0 B
frontend/dist-report/posthog-app/src/scenes/agentic/AgenticAuthorize 5.51 kB 0 B
frontend/dist-report/posthog-app/src/scenes/approvals/ApprovalDetail 17.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/approvals/changeRequestsLogic 622 B 0 B
frontend/dist-report/posthog-app/src/scenes/audit-logs/AdvancedActivityLogsScene 44.9 kB 0 B
frontend/dist-report/posthog-app/src/scenes/AuthenticatedShell 216 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/account/AccountConnected 3.04 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/account/AgenticAccountMismatch 2.43 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/account/credential-review/CredentialReview 5.04 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/cli/CLIAuthorize 11.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/cli/CLILive 4.05 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/email-mfa-verify/EmailMFAVerify 3.04 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/invite-signup/InviteSignup 1.37 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/login-2fa/Login2FA 4.74 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/login/Login 1.38 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/password-reset/PasswordReset 4.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/password-reset/PasswordResetComplete 3.06 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/shared/passkeyLogic 602 B 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/signup/SignupContainer 1.35 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/two-factor-reset/TwoFactorReset 4.04 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/vercel/VercelConnect 5.03 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/vercel/VercelLinkError 2.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/authentication/verify-email/VerifyEmail 4.79 kB 0 B
frontend/dist-report/posthog-app/src/scenes/billing/AuthorizationStatus 768 B 0 B
frontend/dist-report/posthog-app/src/scenes/billing/Billing 717 B 0 B
frontend/dist-report/posthog-app/src/scenes/billing/BillingSection 21.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/cohorts/Cohort 33.9 kB 0 B
frontend/dist-report/posthog-app/src/scenes/cohorts/CohortCalculationHistory 7.63 kB 0 B
frontend/dist-report/posthog-app/src/scenes/cohorts/Cohorts 10.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/coupons/Coupons 895 B 0 B
frontend/dist-report/posthog-app/src/scenes/dashboard/Dashboard 7.49 kB 0 B
frontend/dist-report/posthog-app/src/scenes/dashboard/dashboards/Dashboards 21 kB 0 B
frontend/dist-report/posthog-app/src/scenes/dashboard/dashboards/templates/DashboardTemplateCopyScene 7.12 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/DataManagementScene 6.48 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/definition/DefinitionEdit 23.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/definition/DefinitionView 31.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/MaterializedColumns/MaterializedColumns 12.9 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-management/variables/SqlVariableEditScene 8.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/batch-exports/BatchExportScene 68.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/DataPipelinesNewScene 4.93 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/DestinationsScene 6.19 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/event-filtering/EventFilterScene 23.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/legacy-plugins/LegacyPluginScene 23.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/TransformationsScene 4.68 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-pipelines/WebScriptsScene 6.05 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-warehouse/DataWarehouseScene 7.56 kB 0 B
frontend/dist-report/posthog-app/src/scenes/data-warehouse/editor/EditorScene 5.77 kB 0 B
frontend/dist-report/posthog-app/src/scenes/debug/DebugScene 25.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/debug/hog/HogRepl 9.15 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/Experiment 216 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/Experiments 24.7 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/SharedMetrics/SharedMetric 12.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/experiments/SharedMetrics/SharedMetrics 1.81 kB 0 B
frontend/dist-report/posthog-app/src/scenes/exports/ExportsScene 5.41 kB 0 B
frontend/dist-report/posthog-app/src/scenes/feature-flags/FeatureFlag 115 kB 0 B
frontend/dist-report/posthog-app/src/scenes/feature-flags/FeatureFlags 4.58 kB 0 B
frontend/dist-report/posthog-app/src/scenes/groups/Group 22.8 kB 0 B
frontend/dist-report/posthog-app/src/scenes/groups/Groups 9.31 kB 0 B
frontend/dist-report/posthog-app/src/scenes/groups/GroupsNew 8.69 kB 0 B
frontend/dist-report/posthog-app/src/scenes/health-alerts/HealthAlertsScene 6.2 kB 0 B
frontend/dist-report/posthog-app/src/scenes/health/categoryDetail/HealthCategoryDetailScene 13 kB 0 B
frontend/dist-report/posthog-app/src/scenes/health/HealthScene 16.9 kB 0 B
frontend/dist-report/posthog-app/src/scenes/health/pipelineStatus/PipelineStatusScene 12.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapNewScene 6.45 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapRecordingScene 5.49 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapScene 8.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmaps/HeatmapsScene 5.3 kB 0 B
frontend/dist-report/posthog-app/src/scenes/hog-functions/HogFunctionScene 60.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/hog-functions/misc/Diff 1.39 kB 0 B
frontend/dist-report/posthog-app/src/scenes/inbox/InboxScene 70.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/InsightQuickStart/InsightQuickStart 8.7 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/InsightScene 39.9 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/views/BoxPlot/BoxPlot 7.01 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/views/CalendarHeatMap/CalendarHeatMap 9.26 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/views/RegionMap/RegionMap 31.2 kB 0 B
frontend/dist-report/posthog-app/src/scenes/insights/views/WorldMap/WorldMap 6.54 kB 0 B
frontend/dist-report/posthog-app/src/scenes/instance/AsyncMigrations/AsyncMigrations 14.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/instance/DeadLetterQueue/DeadLetterQueue 6.75 kB 0 B
frontend/dist-report/posthog-app/src/scenes/instance/QueryPerformance/QueryPerformance 9.98 kB 0 B
frontend/dist-report/posthog-app/src/scenes/instance/SystemStatus/SystemStatus 18.2 kB 0 B
frontend/dist-report/posthog-app/src/scenes/IntegrationsRedirect/IntegrationsRedirect 887 B 0 B
frontend/dist-report/posthog-app/src/scenes/marketing-analytics/MarketingAnalyticsScene 46.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/max/Max 19.7 kB 0 B
frontend/dist-report/posthog-app/src/scenes/models/ModelsScene 19.7 kB 0 B
frontend/dist-report/posthog-app/src/scenes/models/NodeDetailScene 20.7 kB 0 B
frontend/dist-report/posthog-app/src/scenes/moveToPostHogCloud/MoveToPostHogCloud 4.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/new-tab/NewTabScene 7.42 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookCanvasScene 11.7 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookPanel/NotebookPanel 13.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookScene 16.9 kB 0 B
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebooksScene 8.88 kB 0 B
frontend/dist-report/posthog-app/src/scenes/oauth/OAuthAuthorize 810 B 0 B
frontend/dist-report/posthog-app/src/scenes/onboarding/coupon/OnboardingCouponRedemption 1.34 kB 0 B
frontend/dist-report/posthog-app/src/scenes/onboarding/Onboarding 792 kB 0 B
frontend/dist-report/posthog-app/src/scenes/onboarding/sdks/SdkHealthScene 9.21 kB 0 B
frontend/dist-report/posthog-app/src/scenes/organization/ConfirmOrganization/ConfirmOrganization 4.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/organization/Create/Create 703 B 0 B
frontend/dist-report/posthog-app/src/scenes/organization/Deactivated 1.17 kB 0 B
frontend/dist-report/posthog-app/src/scenes/organization/PendingDeletion 2.23 kB 0 B
frontend/dist-report/posthog-app/src/scenes/persons/PersonScene 27.7 kB 0 B
frontend/dist-report/posthog-app/src/scenes/persons/PersonsScene 11 kB 0 B
frontend/dist-report/posthog-app/src/scenes/PreflightCheck/PreflightCheck 5.57 kB 0 B
frontend/dist-report/posthog-app/src/scenes/product-tours/ProductTour 273 kB 0 B
frontend/dist-report/posthog-app/src/scenes/product-tours/ProductTours 6.07 kB 0 B
frontend/dist-report/posthog-app/src/scenes/project-homepage/ProjectHomepage 26.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/project/Create/Create 895 B 0 B
frontend/dist-report/posthog-app/src/scenes/project/PendingDeletion 2.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/resource-transfer/ResourceTransfer 10.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/saved-insights/SavedInsights 4.01 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/detail/SessionRecordingDetail 8.27 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/file-playback/SessionRecordingFilePlaybackScene 10.9 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/kiosk/SessionRecordingsKiosk 16.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/player/snapshot-processing/DecompressionWorkerManager 323 B 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistScene 11.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/SessionRecordings 7.37 kB 0 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/settings/SessionRecordingsSettingsScene 8.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/sessions/SessionProfileScene 21.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/settings/SettingsScene 9.6 kB 0 B
frontend/dist-report/posthog-app/src/scenes/sites/Site 1.57 kB 0 B
frontend/dist-report/posthog-app/src/scenes/startups/StartupProgram 21.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/StripeConfirmInstall/StripeConfirmInstall 3.63 kB 0 B
frontend/dist-report/posthog-app/src/scenes/subscriptions/SubscriptionScene 17.7 kB 0 B
frontend/dist-report/posthog-app/src/scenes/subscriptions/SubscriptionsScene 7.06 kB 0 B
frontend/dist-report/posthog-app/src/scenes/surveys/forms/SurveyFormBuilder 3.12 kB 0 B
frontend/dist-report/posthog-app/src/scenes/surveys/Survey 7.24 kB 0 B
frontend/dist-report/posthog-app/src/scenes/surveys/Surveys 29.5 kB 0 B
frontend/dist-report/posthog-app/src/scenes/surveys/wizard/SurveyWizard 73.4 kB 0 B
frontend/dist-report/posthog-app/src/scenes/themes/CustomCssScene 5.01 kB 0 B
frontend/dist-report/posthog-app/src/scenes/toolbar-launch/ToolbarLaunch 3.96 kB 0 B
frontend/dist-report/posthog-app/src/scenes/Unsubscribe/Unsubscribe 1.71 kB 0 B
frontend/dist-report/posthog-app/src/scenes/web-analytics/SessionAttributionExplorer/SessionAttributionExplorerScene 12.1 kB 0 B
frontend/dist-report/posthog-app/src/scenes/web-analytics/WebAnalyticsScene 20.2 kB 0 B
frontend/dist-report/posthog-app/src/scenes/wizard/Wizard 4.45 kB 0 B
frontend/dist-report/posthog-app/src/sharedChunkAnchors 1.33 kB 0 B

compressed-size-action

@tests-posthog

tests-posthog Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

⏭️ Skipped snapshot commit because branch advanced to e9f2c6d while workflow was testing fdfd6c1.

The new commit will trigger its own snapshot update workflow.

If you expected this workflow to succeed: This can happen due to concurrent commits. To get a fresh workflow run, either:

  • Merge master into your branch, or
  • Push an empty commit: git commit --allow-empty -m 'trigger CI' && git push

operation_id="signals_report_artefacts_partial_update",
)
def partial_update(self, request: ValidatedRequest, *args, **kwargs) -> Response:
artefact = cast(SignalReportArtefact, self.get_object())

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Medium: Artefact update/delete bypasses per-task access boundaries

A user with object-level write access to one task may be able to PATCH or DELETE log artefacts on reports that are not tied to that task. The view is authorized as scope_object = "task", but get_object() loads a SignalReportArtefact; that model does not map to the task resource for object permissions, so the detail action may be allowed after the generic “has any specific task access” fallback. Add an explicit resource-level task write check for these artefact mutations, or protect artefacts with a resource that maps to the report/artefact being modified.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are team-scoped resources, not task-scoped: safely_get_queryset filters to the report_id from the URL plus self.team (and excludes deleted reports), so a token can only ever reach artefacts belonging to its own team's reports. The task:write scope is reused deliberately as the capability gate (see ARTEFACT_LOG_PLAN.md) — the same model the pre-existing suggested_reviewers PUT uses. Reports aren't task-scoped, so there's no per-task object mapping to enforce here. Leaving as-is by design.

@oliverb123 oliverb123 changed the title feat(signals): mutable append-only artefact log + write API feat(signals): artefacts as report response log Jun 9, 2026
@tests-posthog

tests-posthog Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Query snapshots: Backend query snapshots updated

Changes: 3 snapshots (0 modified, 3 added, 0 deleted)

What this means:

  • Query snapshots have been automatically updated to match current output
  • These changes reflect modifications to database queries or schema

Next steps:

  • Review the query changes to ensure they're intentional
  • If unexpected, investigate what caused the query to change

Review snapshot changes →

oliverb123 added a commit to PostHog/code that referenced this pull request Jun 9, 2026
The backend now appends a new suggested_reviewers status artefact on each edit
(latest-wins) rather than mutating in place (PostHog/posthog#61545). The detail
pane already derives current reviewers as the latest row, so update the optimistic
mutation to append a synthetic latest row — mirroring the server — instead of
patching the existing one, keeping the prior row in the work log as history.

Generated-By: PostHog Code
Task-Id: 3afae508-37cd-4bd9-9624-cffcd7c1a486
("code_diff", {"file_path": "a.py", "diff": "@@ -1 +1 @@", "relevance_note": "x"}),
("line_reference", {"file_path": "a.py", "line": 3, "note": "here"}),
("pushed_branch", {"repository": "PostHog/posthog", "branch": "fix/foo", "base_branch": "master"}),
("task_run", {"task_id": "abc", "relationship": "signals_research"}),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Invalid content schema for task_run artefact. The test passes {"task_id": "abc", "relationship": "signals_research"} but according to TaskRunArtefact schema in artefact_schemas.py (lines 112-131), the required fields are task_id, product, and type (not relationship). This will store malformed data that fails when parsed.

("task_run", {"task_id": "abc", "product": "signals", "type": "research"}),
Suggested change
("task_run", {"task_id": "abc", "relationship": "signals_research"}),
("task_run", {"task_id": "abc", "product": "signals", "type": "research"}),

Spotted by Graphite

Fix in Graphite


Is this helpful? React 👍 or 👎 to let us know.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch — fixed in 81dd23d. Updated to {"task_id": "abc", "product": "signals", "type": "research"} to match the current TaskRunArtefact schema (the relationship field was replaced by product/type earlier in this PR).

Comment thread posthog/models/integration.py Outdated
Comment thread products/signals/backend/views.py
# Append a new status row rather than mutating in place: a human reviewer edit becomes a
# point-in-time entry in the work log, and latest-wins keeps it current. Appending a
# reviewers status also re-evaluates auto-start (handled in `append_status`, on commit).
new_artefact = SignalReportArtefact.append_status(

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Medium: Reviewer edit can start a task as another user

A user who can PUT a suggested_reviewers artefact can add another org member, and append_status() then re-evaluates auto-start and may create an implementation task with that reviewer as user_id. Do not trigger auto-start from this generic reviewer-edit path unless the selected assignee explicitly initiated or approved the run.

@oliverb123 oliverb123 force-pushed the posthog-code/signals-code-artefact-types branch from 3291995 to 1fdb3bf Compare June 11, 2026 08:18
oliverb123 and others added 17 commits June 11, 2026 19:59
Auto-start only ran at report-creation time (agentic + custom-agent paths). With
suggested_reviewers now append-only and editable via the artefact API, a human
adding a reviewer whose autonomy threshold qualifies never re-triggered it.

The reviewer PUT now re-evaluates auto-start from the report's current artefacts
via a new `maybe_autostart_from_report_artefacts` helper (reconstructs the latest
actionability / priority / repo-selection / reviewers). It delegates to the
existing `maybe_autostart_implementation_task`, which is idempotent — no-ops if an
implementation task already exists. Best-effort and post-commit so it never fails
the edit or starts a task that gets rolled back.

Generated-By: PostHog Code
Task-Id: 3afae508-37cd-4bd9-9624-cffcd7c1a486
Move the reviewer-change auto-start re-evaluation out of the artefact viewset and
into SignalReportArtefact.append_status, so any path that appends a
suggested_reviewers status re-runs the (idempotent) auto-start check rather than
each caller having to remember to. Scheduled via transaction.on_commit (post-commit,
not inside the atomic block) with a lazily-imported helper to avoid a models <->
auto_start cycle; best-effort so it never breaks the write.

Generated-By: PostHog Code
Task-Id: 3afae508-37cd-4bd9-9624-cffcd7c1a486
Route the agentic pipeline and custom-agent persistence through the
SignalReportArtefact append helpers (append_status / append_finding) instead of
bulk_create, so the model is the single artefact write path. Adds append_finding
for the signal_finding type (neither status nor log).

Auto-start behaviour is unchanged: these paths orchestrate it explicitly on the
worker with full in-hand context, so their suggested_reviewers append passes
reevaluate_autostart=False to opt out of the model's on-commit auto-start hook
(which still serves the human reviewer-edit path and any future caller).

Generated-By: PostHog Code
Task-Id: 3afae508-37cd-4bd9-9624-cffcd7c1a486
The custom agent's report is fully persisted (artefacts + title/summary) before
auto-start runs, so it can use the same reconstruct-from-artefacts entry point
(`maybe_autostart_from_report_artefacts`) the in-app reviewer edit uses, instead
of passing in-hand objects to `maybe_autostart_implementation_task`. Behaviour is
unchanged. The agentic pipeline keeps passing inputs in hand, since its
research-refined title/summary aren't written to the report row until later.

Generated-By: PostHog Code
Task-Id: 3afae508-37cd-4bd9-9624-cffcd7c1a486
Serialize implementation-task auto-start under a report row lock so the
several trigger paths (reviewer-edit on-commit hook, agentic pipeline,
custom agents) can't race into duplicate tasks. Make the agentic research
reload legacy-tolerant for priority/finding artefacts, cap the branch diff
size, and validate the diff endpoint's repo/branch before any GitHub call.

Generated-By: PostHog Code
Task-Id: 3afae508-37cd-4bd9-9624-cffcd7c1a486
Master took 0035/0036 for the signal team config auto-start default, so the
artefact updated_at + latest-index migrations move to 0037/0038.

Generated-By: PostHog Code
Task-Id: 3afae508-37cd-4bd9-9624-cffcd7c1a486
…ts per task

Reworks the report artefact log around three properties:

- Unified content model: every artefact type has a pydantic schema in
  artefact_schemas.py, collected in a registry and enforced on the write
  path (model helpers + API serializers). Reads stay legacy-tolerant.
- Attribution: every write declares a producer — a user, a task, or
  explicitly the system — via a required ArtefactAttribution argument,
  persisted as nullable created_by/task FKs. Agent writes are attributed
  deterministically through a sandbox-set X-PostHog-Task-Id header
  forwarded by the MCP server; the LLM never handles its own task id.
- Commits, not branches: the pushed_branch type and branch-diff endpoint
  are replaced by per-commit artefacts with an on-demand single-commit
  diff (GitHubIntegration.get_commit_diff).

Task↔report associations lose their relationship label: tasks simply
associate (unique per pair, free-form via POST reports/{id}/tasks/ or
the agent's own header task), and purpose is derived from task_run
artefacts — which now also drive auto-start idempotency, inside the
existing report-row lock. Sandbox agents get the write tool surface via
a signals_report MCP scope preset (read scopes, read-only mode off).

Generated-By: PostHog Code
Task-Id: 3afae508-37cd-4bd9-9624-cffcd7c1a486
Generated-By: PostHog Code
Task-Id: 3afae508-37cd-4bd9-9624-cffcd7c1a486
…port

Adds register_artefact (typed on the artefact_schemas content models, so
validation fails at the call site) plus register_note / register_code_reference /
register_code_diff / register_line_reference conveniences to CustomSignalAgent.
Queued entries are persisted via add_log in the same transaction as the report,
attributed like every other component (the sandbox task when one exists, else
system), and cleared by report_and_continue. commit and task_run stay excluded —
they're owned by the signed-commit hook and report persistence respectively.

Generated-By: PostHog Code
Task-Id: 03657aa4-20d8-4dea-aeef-e8c1ab4bbce2
Adds an `agent_note` field to the MCP tool YAML: a brief work-protocol note
the generated handler appends to the tool *response* as `_agentNote`, so the
agent sees it when it actually fetches the resource instead of growing the
always-loaded tool description.

inbox-reports-retrieve uses it to outline the work-log protocol — associate
your task once, then log notes / code references / diffs / out-of-band
commits as artefacts — deferring content shapes to each tool's description.

Also refreshes the stale tool-schema snapshots from the pushed_branch era
(the create tool's type list now includes `commit`).

Generated-By: PostHog Code
Task-Id: 03657aa4-20d8-4dea-aeef-e8c1ab4bbce2
Status vs log classifies semantics, not ownership — nothing is pipeline-owned.
POST now appends any artefact type via SignalReportArtefact.append, which
routes to the type's semantics: status types are latest-wins (a new version
supersedes the previous as the report's canonical status, with auto-start
re-evaluation on reviewers), signal_finding stays keyed by signal_id,
dismissals stack, log types accumulate. PATCH edits any artefact (validated
against the row's type; editing the latest reviewers row re-evaluates
auto-start), and DELETE works on any artefact — deleting the latest status
row reverts the canonical status to the previous version.

Generated-By: PostHog Code
Task-Id: 03657aa4-20d8-4dea-aeef-e8c1ab4bbce2
…ontract

The artefact list/retrieve endpoints were excluded from the OpenAPI schema,
so agents genuinely couldn't read judgments or findings through MCP — and the
retrieve tool's description wrongly implied that was by design. Un-excludes
them (the bespoke reviewers PUT stays app-only) and ships
inbox-report-artefacts-list / -retrieve as read tools.

Tool copy now answers what test agents kept asking: report lifecycle is
pipeline-managed (act on `ready`; `pending_input` is waiting on a human —
surface it, don't act on it), and status judgments are consequential, not
advisory — canonical priority/actionability steer what humans, agents, and
PostHog's automation pick up next.

Generated-By: PostHog Code
Task-Id: 03657aa4-20d8-4dea-aeef-e8c1ab4bbce2
A free-form task↔report association only created the link row, so the Runs
section showed the task while the activity log stayed empty — the two read
different sources (link rows vs artefacts). Associating now also appends a
task_run artefact (skipped on idempotent re-association; pipeline-created
links already write their own), labelled by optional product/type body
fields following the custom-agent identifier convention (defaults
tasks/agent_run). Invalid identifiers 400 and roll the link back.

Generated-By: PostHog Code
Task-Id: 03657aa4-20d8-4dea-aeef-e8c1ab4bbce2
…tion

Removes the /signals/reports/{id}/tasks/ surface (viewset, serializers,
routes, MCP tool) and all SignalReportTask reads and writes — the link table
was redundant with task_run artefacts, which carry the same association on
their task attribution FK plus the run's identity.

Associating is now appending a task_run artefact: content.task_id defaults
to the X-PostHog-Task-Id header ("associate me"), product/type default to
tasks/agent_run, attribution is always the recorded task, and re-associating
is idempotent (returns the existing entry). The reports ?task_id= filter,
implementation_pr_url, and the merged-PR webhook resolution all derive from
artefacts. The deprecated SignalReportTask model survives only so existing
rows can be converted (backfill now also covers unlabelled rows); the table
drop is a follow-up migration.

Generated-By: PostHog Code
Task-Id: 03657aa4-20d8-4dea-aeef-e8c1ab4bbce2
… edit

The tasks-create removal span accidentally swallowed the adjacent
inbox-reports-list entry; restore it and regenerate.

Generated-By: PostHog Code
Task-Id: 03657aa4-20d8-4dea-aeef-e8c1ab4bbce2
…er master rebase

Master took 0037 for signalscoutemission tags; the artefact migrations
shift to 0038-0040. Regeneration picks up the scout-config-create tool
and the priority dollar_value field alongside the artefact changes.

Generated-By: PostHog Code
Task-Id: 03657aa4-20d8-4dea-aeef-e8c1ab4bbce2
@oliverb123 oliverb123 force-pushed the posthog-code/signals-code-artefact-types branch from f196aed to 797a037 Compare June 11, 2026 17:33
tests-posthog Bot and others added 4 commits June 11, 2026 17:38
…er pipeline

Review-pass simplifications over the artefact-log feature:

- Artefact content is strongly typed end to end: parse_artefact_content is
  the single boundary parser (API writes, reads of stored rows), the model
  helpers take pydantic content models and derive the row's type from the
  model class, and validate_artefact_content's string-in/string-out gate is
  gone. Stored content is the normalized model dump.
- Auto-start idempotency moves off the freeform artefact log onto a real
  SignalReport.implementation_task gate column, compare-and-set via the
  shared record_implementation_task helper (auto-start + manual start path).
- The research agent is read-only: its findings/judgments are extracted from
  the multi-turn session and persisted by the pipeline, which now appends a
  new artefact version only when something changed (the agent can confirm a
  still-correct finding/judgment via the *Update wrapper schemas). A research
  task_run association is recorded on every run. Implementation agents run
  with full scopes so they can log their work; the signals_report preset is
  removed.
- register_artefact collapses to one generic, typed method (no registerable
  subset, no typed convenience wrappers); persistence routes any type through
  append's latest-wins/status semantics.
- The inbox notification gate is simply PR presence from any associated task,
  polled until timeout behind a new workflow patch — no task-shape heuristics.
- code_diff artefact type removed; code/line references get line-length and
  line-count bounds; commit SHA shape and GitHub ref "safety" validation
  removed (GitHub's to reject).
- Migrations collapsed to two: one atomic schema migration and one
  non-atomic concurrent index using the idempotent CreateIndexConcurrently
  helper instead of bare AddIndexConcurrently.

Generated-By: PostHog Code
Task-Id: f65424ca-a7fe-49f5-9f75-7a3cf004b417

try:
response = self._github_api_get(
f"https://api.github.com/repos/{repo_path}/commits/{sha}",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

High: GitHub API path injection

repository and sha come from a writable commit artefact and are interpolated directly into the GitHub API path. A caller can set repository to a path like owner/repo/contents/path?ref=main#; the access check uses the same raw string, and this request then returns the contents API response through the installation token instead of a commit diff. Validate repository as exactly owner/repo, validate sha as a commit SHA, and URL-encode path segments before making the request.

mypy: annotate the schema unions at multi-turn send_followup call sites so the
generic return type resolves to the union instead of BaseModel; guard against
anonymous-user attribution; drop a stale type: ignore and an over-narrow test
helper annotation.

semgrep: add team filters to the SignalReport lookups in auto-start, the
implementation-task gate write, and the reviewers PUT lock (idor-lookup-without-team).

Generated-By: PostHog Code
Task-Id: f65424ca-a7fe-49f5-9f75-7a3cf004b417
@github-actions

github-actions Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

🕸️ Eager graph

How much code each root forces the browser to download and decode through static imports — the regression class total bundle size can't see.

Root Eager closure Δ vs base Budget
entry (logged-out pages, app bootstrap)
src/index.tsx
14.61 MiB · 751 files no change █████████░ 90.1% of 16.21 MiB
authenticated shell (every logged-in page)
src/scenes/AuthenticatedShell.tsx
41.37 MiB · 6,436 files 🟢 -11.3 KiB (-0.0%) ███████░░░ 67.8% of 61.04 MiB

node_modules/monaco-editor/ stays out of src/index.tsx

Largest files eagerly reachable from src/index.tsx
Size File
878.2 KiB src/styles/global.scss
609.0 KiB public/hedgehog/burning-money-hog.png
541.9 KiB public/hedgehog/waving-hog.png
448.2 KiB public/hedgehog/stop-sign-hog.png
362.0 KiB public/hedgehog/phone-pair-hogs.png
354.8 KiB ../node_modules/.pnpm/@posthog+icons@0.36.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js
335.6 KiB public/hedgehog/desk-hog.png
323.2 KiB public/hedgehog/3-bears-hogs.png
297.4 KiB src/taxonomy/core-filter-definitions-by-group.json
287.5 KiB src/lib/api.ts
Largest files eagerly reachable from src/scenes/AuthenticatedShell.tsx
Size File
878.2 KiB src/styles/global.scss
760.0 KiB src/queries/validators.js
609.0 KiB public/hedgehog/burning-money-hog.png
541.9 KiB public/hedgehog/waving-hog.png
448.2 KiB public/hedgehog/stop-sign-hog.png
398.7 KiB ../node_modules/.pnpm/chart.js@4.5.1/node_modules/chart.js/dist/chart.js
362.0 KiB public/hedgehog/phone-pair-hogs.png
354.8 KiB ../node_modules/.pnpm/@posthog+icons@0.36.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js
335.6 KiB public/hedgehog/desk-hog.png
323.2 KiB public/hedgehog/3-bears-hogs.png

Posted automatically by check-eager-graph · sizes are input-source bytes from the esbuild metafile · part of #32479

oliverb123 and others added 4 commits June 12, 2026 14:00
…tools

Agents reading a report via inbox-reports-list never saw the association
instruction (it lived only on the retrieve tool's note), and the task_run
artefact's role as THE association was buried mid-list in the create tool
description. Point both report read tools at the artefact log and state
plainly: any work prompted by a report — research included — starts by
appending a task_run artefact, or commits never link back to the report.

Generated-By: PostHog Code
Task-Id: f65424ca-a7fe-49f5-9f75-7a3cf004b417
Conflict resolutions: research.py judgment schemas live in artefact_schemas.py
(master's priority-explanation wording ported there); business-knowledge prompt
wiring combined with the typed schema-union call sites; generate-tools.ts keeps
master's enrich-url suffix inside the agent_note wrapper, and master's new
confirmed_action return path gains the agent_note fields its result type requires.

Generated-By: PostHog Code
Task-Id: f65424ca-a7fe-49f5-9f75-7a3cf004b417
Generated-By: PostHog Code
Task-Id: f65424ca-a7fe-49f5-9f75-7a3cf004b417
reports = (
SignalReport.objects.filter(report_tasks__task_id=task_id)
SignalReport.objects.filter(
id__in=SignalReportArtefact.objects.filter(

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Medium: User-mutable task associations resolve reports

task_run artefacts are appendable through the report artefact API, and that path only checks that the task belongs to the same project. A caller with task:write can associate an unrelated report with a task they control; when that task's PR is merged, this webhook will mark the report resolved. Use a trusted server-written link for resolution, such as SignalReport.implementation_task_id, or otherwise require the association to be a server-created implementation task rather than any task_run artefact.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants