Repository navigation
docs: make exception list summary canonical - #103
Merged
Merged
Conversation
dustinbyrne
approved these changes
Oct 7, 2026
This was referenced Oct 7, 2026
ioannisj
added a commit
that referenced
this pull request
Oct 8, 2026
…canonical exception list (#103)
ioannisj
added a commit
that referenced
this pull request
Oct 8, 2026
…om posthog-ruby and posthog-go (#103)
ioannisj
added a commit
that referenced
this pull request
Oct 8, 2026
* docs(compliance): re-audit posthog-php and posthog-ruby against the expanded flag specs Weekly bounded SDK compliance audit for 2026-09-28. sdk-specs advanced 27 commits across 23 capability specs since the last run, dominated by server-side feature-flag semantics (local-feature-flag-evaluator +929 lines, evaluate-flags +209, the three get-feature-flag-* payload contracts, flag-definition-loader +73), plus a new client-only Session Replay Debug Properties capability. Selection followed priority rule 1 (affected by spec changes): posthog-php and posthog-ruby are the server SDKs with local-evaluation engines that this delta lands on most directly, and both were confirmed code-drifted and past the ~4-week window. Both files grow from 59 to 63 rows (Capture AI, Evaluate Flags, Exception Event Metadata, Session Replay Debug Properties audited for the first time). Two cross-cutting findings: - Experiment holdouts are unimplemented in both evaluators, a silent correctness divergence from the backend for any flag configured with a holdout. - The new malformed-payload rule is a real gap: php returns the correct sentinel but logs nothing; ruby returns the raw serialized string on three public paths. One row improved on a real code change (ruby's before-send hook now drops the event when a hook raises). Six rows were downgraded on new spec requirements rather than regressions. Scope: compliance/ documentation only. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Generated-By: PostHog Desktop Task-Id: e5d845ad-60cf-4b6d-a294-f997f51b0845 * docs(compliance): audit posthog-go, posthog-dotnet, and posthog-js against the MCP analytics spec Weekly bounded re-audit, 2026-10-05. sdk-specs main advanced 1d5fe42 -> 75c8f5d: a new MCP Analytics capability (#87), the Evaluate Flags runtime filter reshape (#77), the browser replay network body-scrubber replacement (#79), and the 1us log timestamp floor (#91). Contract count is now 64 per SDK. Selected posthog-go, posthog-dotnet, and posthog-js on priority rule 1 (all three are named or directly implicated by this cycle's spec changes) plus the oldest staleness cohort, using the full three-SDK cap for the first time. All five previously-missing contract rows were audited from scratch on each. Notable: experiment holdouts and Evaluate Flags negative-knowledge retention are now unimplemented in four for four of the server SDKs checked since those requirements landed; posthog-js has the most complete exception-metadata producer envelope in the matrix but misreports unknown MCP tools as failed tool calls; and one unguarded JsonDocument.Parse explains four posthog-dotnet rows at once. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Generated-By: PostHog Desktop Task-Id: a3ec4da7-040c-499d-9222-23e683e09387 * docs(compliance): re-score posthog-js replay debug properties against the merged #96 spec * docs(compliance): note that the root README table now lists bootstrap * docs(compliance): align the posthog-go flag definition loader gap row with note n8 * docs(compliance): score posthog-ruby reload feature flags as not applicable * docs(compliance): mark the posthog-js roll-up row as a targeted re-audit * docs(compliance): re-score posthog-php capture exception against the canonical exception list (#103) * docs(compliance): drop the legacy top-level exception property gap from posthog-ruby and posthog-go (#103) --------- Co-authored-by: posthog[bot] <206114724+posthog[bot]@users.noreply.github.com> Co-authored-by: Ioannis J <yiannis@posthog.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
capture-exceptionstill required$exception_type/$exception_messageas top-level event properties, but the standard posthog-jscaptureException()path uses$exception_list[0].type/$exception_list[0].valueas the canonical source.That made compliance work ask SDKs to add deprecated duplicate fields instead of matching the structured exception envelope. The immediate case is PostHog/posthog-php#253.
Changes
capture-exceptionacceptance scenario to assert the primary type/message through$exception_list.openspec/specs/capture-exception/spec.mdthat flat$exception_type/$exception_messagefields are legacy compatibility data, not required producer metadata.$exception_type/$exception_messageto theexception-event-metadataownership table as legacy, non-authoritative fields derived from the primary exception when needed.openspec/changes/archive/2026-10-07-remove-flat-exception-summary-fields/.Capture Exceptionis no longer marked partial for missing flat fields.Testing
openspec validate --specs --strictgit diff --check