Repository navigation
Conversation
PR reader API performanceResult: INCONCLUSIVE 3 inconclusive · 5 within threshold. Zero request failures across all six runs. Base Three independent runs per revision, each on a fresh GitHub-hosted ARM64 runner. 16 users, 60 seconds/run, 1,000 synthetic articles, cache off, five PgBouncer slots. Latency comparisonAll latency values are in milliseconds; lower is better. Values are medians of three runs.
Additional latency and throughput metricsEach cell shows base → PR. Latencies are in milliseconds.
Individual runs
How to interpret this reportRegressed / Improved: a p95 regression needs >20% and >20 ms increase in the medians and at least two head samples versus the base median. Improvements use the inverse threshold. Within threshold means the change did not meet both thresholds. Inconclusive: a within-revision p95 range >35% of its median and >20 ms is too noisy for a confident latency verdict. Inconclusive latency comparisons are non-blocking: the check passes without claiming an improvement. Confirmed regressions and test/report errors fail the PR gate. Throughput is descriptive: paced users do not measure maximum capacity. This uncached public API test does not establish production health, browser performance or worker capacity. Separate runners can differ in hardware or host load; repetitions and noise checks reduce but cannot eliminate that uncertainty. Full HTML/CSV reports and logs · attempt 1 |
06cf2fc to
87a7cda
Compare
49711fe to
f4a1043
Compare
Backend unit coverageFAIL · minimum combined coverage 67.60%. Tests: 3971 passed, 1 failed, 0 skipped. Source files: 316.
Unit coverage includes every backend workspace. PostgreSQL/Redis integration tests run separately. Commit: 904e920 · HTML, JSON, XML reports and job logs · attempt 1 |
Lighthouse · ⏸️ Not measuredTests did not pass for this commit. |
4c3a6c6 to
8c04612
Compare
Preserve public profile freshness and anonymous partner tracking in the extension transport, and retain both reader parity suites. Move unpublished partner migrations to 0024–0027 after the published source-logo migration. Align partner packages and regenerated admin contracts with workspace version 0.0.52. Validated affected-project checks directly: Python lint, formatting, types, versions and 3711 unit tests (68.41% coverage); populated master-schema upgrade and 74 partner integration tests; admin, reader and partner lint, tests and production builds; extension types, tests and builds; web, Chrome and Edge browser journeys and history checks. Chrome sign-in passed an isolated rerun after the initial concurrent run timed out.
|
| const section = url.searchParams.get("section"); | ||
| return { | ||
| query: url.searchParams.get("q") ?? "", | ||
| sections: section ? { [section]: sections[section] } : sections, |



What changes and why?
Add the partner portal, private product catalog pipeline, and automatic contextual promotions. Products now inherit their partner account's settings through import connections, including future approved imports. Operators can configure a partner once instead of manually classifying each product as a placement or ad.
Validation
0028, affected services are healthy, the running matching code is current, and a real dev topic query returns an organic product with a signed receipt andCache-Control: no-store.UI screenshots remain untracked under
reports/partner/andreports/partner-placements/. Native GitHub attachment upload is unavailable in this environment, so this PR has no newly uploaded screenshots.Rollout notes
Apply partnership migrations
0024–0028after master's published source-logo migration0023. Migration0028preserves catalog/accounts/memberships/metrics and introduces inherited defaults, campaigns, exclusions, prepared matches and delivery reservations. Existing accounts enable ordinary recommendations and automatic inclusion; no campaign activates automatically. Review account policy before enabling production delivery. Keep a database backup before downgrade: new policy/matching/campaign data is removed, while original asset/metric data remains.Configure the same server-only
DEVFEED_PARTNER_TRACKING_KEYin the public API and user API with at least 32 random ASCII characters. Compose passes it only to those backends; empty disables delivery and collection. Local.envwas configured and remains ignored. Run the scheduler and Redis, and deploy services requiring schema0028together. Campaign budgets and event reports use the receipt's UTC issuance day; outstanding receipts reserve capacity until their one-hour expiry. Browser exposure history is local to each website/extension installation.The partner portal needs its dedicated Zitadel client, partner origin, secure cookies, DNS/TLS and issuer/subject account memberships. Roles are bounded by session lifetime; immediate role revocation also requires session invalidation. This feature records paid agreements but does not collect payments, revenue or conversions.
See promotion policy and rollout and partner portal setup.
Ready for review