Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
289 commits
Select commit Hold shift + click to select a range
9dc7d9e
feat(hogql): publish lazy-table traversal catalogs
orian Sep 23, 2026
3ee3019
Merge remote-tracking branch 'origin/master' into feat/hogql-publish-…
orian Sep 23, 2026
f63726e
Merge remote-tracking branch 'origin/master' into feat/hogql-publish-…
orian Sep 23, 2026
cb6976c
refactor(hogql): simplify catalog version markers
orian Sep 23, 2026
54ce129
Merge remote-tracking branch 'origin/master' into feat/hogql-publish-…
orian Sep 23, 2026
e724479
fix(hogql): name canonical traversal table fields
orian Sep 23, 2026
61ce474
Merge remote-tracking branch 'origin/master' into feat/hogql-publish-…
orian Sep 23, 2026
2f6e829
feat(workflows): add the proposal api behind the self-optimising flag
dmarchuk Aug 31, 2026
0aa1529
chore: update OpenAPI generated types
tests-posthog[bot] Aug 31, 2026
32462f9
chore(workflows): drop the stub generator from the metric vocabulary …
dmarchuk Sep 1, 2026
3903e52
feat(workflows): report click-through rate beside opens in the outcome
dmarchuk Sep 1, 2026
6ddc93d
fix(workflows): treat variables as a whole list in the stale guard
dmarchuk Sep 1, 2026
d652c3e
fix(workflows): measure an outcome against the step the suggestion named
dmarchuk Sep 1, 2026
82a0a3e
chore(workflows): record that the rates are window counts, not send c…
dmarchuk Sep 1, 2026
3f369a8
chore: update OpenAPI generated types
tests-posthog[bot] Sep 1, 2026
73ac5d1
fix(workflows): refuse evidence the suggestion panel cannot read back
dmarchuk Sep 1, 2026
ebddcd6
chore: update OpenAPI generated types
tests-posthog[bot] Sep 1, 2026
bd3fdd3
fix(workflows): close the review gaps on the suggestions API
dmarchuk Sep 1, 2026
9ebbc0e
chore: update OpenAPI generated types
tests-posthog[bot] Sep 1, 2026
a7e5cca
chore(workflows): trim the comments on the proposals API
dmarchuk Sep 2, 2026
275e61f
feat(workflows): merge suggested steps by id instead of replacing the…
dmarchuk Sep 4, 2026
8cb52d1
fix(workflows): make a producer declare whether its number is a rate …
dmarchuk Sep 14, 2026
63f44b3
chore(workflows): list only the content fields a suggestion may carry
dmarchuk Sep 16, 2026
c75f816
chore(workflows): drop the declared producer type and rejection note …
dmarchuk Sep 16, 2026
115c888
chore(workflows): trim comments that explain the obvious
dmarchuk Sep 17, 2026
8e3f3b8
fix(workflows): refuse a boolean denominator and put a rejection in t…
dmarchuk Sep 21, 2026
716b4ef
chore(workflows): name the whole-list staleness test for what it checks
dmarchuk Sep 21, 2026
7ef5c27
chore(workflows): drop the no-op before-snapshot from proposal rejection
dmarchuk Sep 21, 2026
7f84dc1
chore(workflows): drop repeated reads and name the field a whole-list…
dmarchuk Sep 21, 2026
1d4aad3
chore(workflows): drop the author and producer type from the proposal…
dmarchuk Sep 22, 2026
d14cc9c
chore(workflows): say when a suggestion names no step
dmarchuk Sep 22, 2026
b7cde5c
fix(workflows): put a suggestion back in the queue when a save drops …
dmarchuk Sep 22, 2026
8233483
fix(workflows): merge a suggestion field by field and judge staleness…
dmarchuk Sep 23, 2026
55697c8
fix(workflows): stage what a suggestion changes, not what it echoed
dmarchuk Sep 23, 2026
7baecf4
fix(workflows): read a HEAD on the proposals endpoint as a read
dmarchuk Sep 23, 2026
532addc
chore(hogql): merge master into lazy traversal publisher
orian Sep 23, 2026
1fe0fcf
fix(workflows): classify a patch's secrets against the step it patches
dmarchuk Sep 23, 2026
b27269b
chore(workflows): read the proposal's changes once and say what unsta…
dmarchuk Sep 23, 2026
9a3935d
chore(workflows): build the secret-patch test on the shared flow helper
dmarchuk Sep 24, 2026
5a95274
Merge master into dmarchuk/wf-proposal-api
dmarchuk Sep 24, 2026
cc7d76e
fix(workflows): type the filter kwargs the totals test unpacks
dmarchuk Sep 24, 2026
d5e16e6
fix(data-warehouse): refuse to save a partial SQL selection
sakce Sep 25, 2026
b30dd23
fix(data-warehouse): name the full next step when a selection is refused
sakce Sep 25, 2026
f8b652b
Merge branch 'master' into fix/sql-editor-selection-guard
sakce Sep 25, 2026
91b215b
fix(data-warehouse): skip the selection check on a raw connection query
sakce Sep 25, 2026
fe0065d
Merge master into dmarchuk/wf-proposal-api
claude Sep 25, 2026
0ab3d77
feat(customer-analytics): configure Google sync cadence
arthurdedeus Sep 25, 2026
d764a4b
chore: update OpenAPI generated types
tests-posthog[bot] Sep 25, 2026
07d3b8d
fix(customer-analytics): harden sync cadence scheduling
arthurdedeus Sep 25, 2026
b8b5db7
fix(customer-analytics): update calendar sync logic types
arthurdedeus Sep 25, 2026
a208807
Merge branch 'master' into codex/google-account-sync-cadence
arthurdedeus Sep 25, 2026
c529850
fix(customer-analytics): track pre-sync failures and rotate capped runs
arthurdedeus Sep 26, 2026
2356435
feat(data-warehouse): implement folk import source
Gilbert09 Sep 26, 2026
e952246
feat(data-warehouse): implement coolify import source
Gilbert09 Sep 26, 2026
a99dcef
feat(data-warehouse): implement electricity_maps import source
Gilbert09 Sep 26, 2026
2933410
feat(data-warehouse): implement smartlead import source
Gilbert09 Sep 26, 2026
8b3f9a6
fix(salesforce): stop retrying a not-found response and explain it
Gilbert09 Sep 26, 2026
83cc1c9
fix(plausible): stop retrying a payment-required rejection
Gilbert09 Sep 26, 2026
0644406
fix(salesforce): give the not-found message a step for both causes
Gilbert09 Sep 26, 2026
53e6730
feat(eppo): sync the entity, fact and dimension definition tables
Gilbert09 Sep 26, 2026
f2e0be4
feat(drata): sync audits and the control junction tables
Gilbert09 Sep 26, 2026
27ccebb
feat(factorial): sync worked times, project time records, compensatio…
Gilbert09 Sep 26, 2026
fe6d2ae
feat(eventbrite): add sales, attendee, question and subcategory tables
Gilbert09 Sep 26, 2026
26dd31c
feat(everhour): sync invoices, expenses, timecards and assignments
Gilbert09 Sep 26, 2026
6fde108
feat(emailoctopus): add campaign report and list tag tables
Gilbert09 Sep 26, 2026
1fa3a96
feat(warehouse-sources): add dynatrace entity type, tag and release t…
Gilbert09 Sep 26, 2026
8137505
feat(fastly): sync ACL entries, dictionary items and billing tables
Gilbert09 Sep 26, 2026
31db05f
feat(ezofficeinventory): add teams, work orders and checkout history …
Gilbert09 Sep 26, 2026
2c141d3
feat(data-warehouse): add missing env0 endpoint tables
Gilbert09 Sep 26, 2026
4950483
chore(eppo): narrow the definitions-family note to what is still missing
Gilbert09 Sep 26, 2026
93e1109
chore(everhour): declare the endpoint config dataclass frozen
Gilbert09 Sep 26, 2026
96411a3
chore(eventbrite): declare the endpoint config frozen
Gilbert09 Sep 26, 2026
e3a426f
fix(emailoctopus): pin API requests to the vendor host and declare da…
Gilbert09 Sep 26, 2026
0144e3f
fix(factorial): pin one reference date per allowance_stats run
Gilbert09 Sep 26, 2026
cdd4406
chore(ezofficeinventory): declare the endpoint config mutable
Gilbert09 Sep 26, 2026
2b0dfd7
fix(fastly): declare dataclasses frozen and guard billing pagination
Gilbert09 Sep 26, 2026
8f9d99f
chore(data-warehouse): freeze the env0 endpoint config dataclass
Gilbert09 Sep 26, 2026
54cd427
fix(data-warehouse): say what to check when a database host won't con…
Gilbert09 Sep 26, 2026
8a0b0ee
fix(data-warehouse): tell clickhouse users which source syncs their t…
Gilbert09 Sep 26, 2026
3006b51
fix(clerk): reject a secret key containing a return character
Gilbert09 Sep 26, 2026
f0a33a9
fix(data-warehouse): explain a storage host the query engine won't read
Gilbert09 Sep 27, 2026
ed08e03
fix(pinterest_ads): raise timeout for analytics fan-out requests
Gilbert09 Sep 27, 2026
0a10fa4
fix(pinterest_ads): only widen the analytics read timeout
Gilbert09 Sep 27, 2026
eabce23
fix(data-imports): close the FK race between a deleted source and job…
Gilbert09 Sep 27, 2026
e814682
Merge branch 'master' into posthog/electricity-maps-source
Gilbert09 Sep 27, 2026
09e2eba
fix(mailerlite): stop blaming a working api key for an unverified probe
Gilbert09 Sep 27, 2026
94f1a73
fix(data-warehouse): disable HTTP capture and require the items selec…
Gilbert09 Sep 27, 2026
029e77b
Merge branch 'master' into posthog/folk-warehouse-source
Gilbert09 Sep 27, 2026
6352dac
fix(data-warehouse): redact imap_password in HTTP sample capture
Gilbert09 Sep 27, 2026
690761b
fix(linkedin-ads): keep internals out of the credential validation error
Gilbert09 Sep 27, 2026
5670bef
fix(coolify): strip Sentinel/log-drain credentials and fail loudly on…
Gilbert09 Sep 27, 2026
408aaba
fix(linkedin-ads): tell users to retry when the connection check fails
Gilbert09 Sep 27, 2026
1cad1f9
Merge branch 'master' into posthog/folk-warehouse-source
Gilbert09 Sep 27, 2026
5c139ee
fix(electricity-maps): pin credential validation to no-redirect session
Gilbert09 Sep 27, 2026
0bf5c0d
Merge branch 'master' into posthog/smartlead-import-source
Gilbert09 Sep 27, 2026
ab5a20a
rebase membrain PR onto latest master
Gilbert09 Sep 27, 2026
401cf6e
fix(electricity-maps): pin credential validation to no-redirect session
Gilbert09 Sep 27, 2026
136c49c
test(coolify): cover the malformed-body fallback in the deployments p…
Gilbert09 Sep 27, 2026
2a6617b
fix(data-warehouse): exclude Membrain CRM responses from HTTP sample …
Gilbert09 Sep 27, 2026
17dfa0d
Merge branch 'master' into posthog/membrain-warehouse-source
Gilbert09 Sep 27, 2026
a0a798d
Merge branch 'master' into posthog/membrain-warehouse-source
Gilbert09 Sep 27, 2026
1d2d455
Merge branch 'master' into posthog/electricity-maps-source
Gilbert09 Sep 27, 2026
8fe6dd7
Merge branch 'master' into posthog/coolify-import-source
Gilbert09 Sep 27, 2026
4a24206
fix(tasks): unblock run commands to hogland sandboxes from the API
Gilbert09 Sep 27, 2026
4445dba
Merge branch 'master' into posthog/membrain-warehouse-source
Gilbert09 Sep 27, 2026
f14ac05
Merge branch 'master' into posthog/electricity-maps-source
Gilbert09 Sep 27, 2026
7a809b4
Merge branch 'master' into posthog/coolify-import-source
Gilbert09 Sep 27, 2026
3ed0b63
fix(data-warehouse): exclude Membrain custom-field definitions from H…
Gilbert09 Sep 27, 2026
076575a
fix(electricity-maps): namespace resume state per endpoint, add reque…
Gilbert09 Sep 27, 2026
2b00aa9
Merge branch 'master' into posthog/coolify-import-source
Gilbert09 Sep 27, 2026
fc3f856
Merge branch 'master' into posthog/membrain-warehouse-source
Gilbert09 Sep 27, 2026
3184e48
Merge branch 'master' into posthog/electricity-maps-source
Gilbert09 Sep 27, 2026
4654abf
feat(featurebase): sync the support conversations, tickets and lookup…
Gilbert09 Sep 27, 2026
ce433f0
feat(firehydrant): add schedule, milestone, task and escalation tables
Gilbert09 Sep 27, 2026
f6f9385
feat(fillout): add the form_metadata table
Gilbert09 Sep 27, 2026
8a7b8c2
feat(financial-modelling): add key metrics, ratios, dividends and ear…
Gilbert09 Sep 27, 2026
4864a0a
feat(fleetio): sync expense, status and service line item tables
Gilbert09 Sep 27, 2026
a7d67f1
feat(flagsmith): add tags, identities, traits and segment override ta…
Gilbert09 Sep 27, 2026
0927cd9
feat(finage): sync dividend, split and financial statement tables
Gilbert09 Sep 27, 2026
18604bc
feat(finnworlds): add identifier, insider and macro indicator tables
Gilbert09 Sep 27, 2026
5df0432
feat(fireworks_ai): sync usage, routers, dpo jobs and rft steps
Gilbert09 Sep 27, 2026
3543842
fix(featurebase): declare the endpoint config frozen and split the au…
Gilbert09 Sep 27, 2026
d56936e
chore(fillout): freeze the endpoint config and correct the audit line
Gilbert09 Sep 27, 2026
75c12f7
chore(flagsmith): declare the endpoint and resume configs frozen
Gilbert09 Sep 27, 2026
2d18300
fix(firehydrant): fail loud when a fan-out response drops its envelope
Gilbert09 Sep 27, 2026
5f379e2
fix(fleetio): address the v2 resource paths on the legacy version pin
Gilbert09 Sep 27, 2026
a65ac7b
fix(finage): tighten the key and date checks on the new tables
Gilbert09 Sep 27, 2026
6f5ac5f
fix(finnworlds): make the insider line index unique per response
Gilbert09 Sep 27, 2026
3bb7fa8
chore(fireworks_ai): declare the endpoint and resume configs frozen
Gilbert09 Sep 27, 2026
aa32ed2
fix(data-warehouse): send a tab-less source URL to the source, not a 404
Gilbert09 Sep 27, 2026
57c9526
fix(temporal): treat schema-lag column/table errors as transient
Gilbert09 Sep 27, 2026
3fbc224
fix(temporal): treat schema-lag column/table errors as transient
Gilbert09 Sep 27, 2026
5c8c94a
fix(data-warehouse): drop api field names from the incremental sync e…
Gilbert09 Sep 28, 2026
e83e04c
fix(google-search-console): name a next step when the picker lists no…
Gilbert09 Sep 28, 2026
1d336bd
chore(braintree): promote the source from alpha to ga
Gilbert09 Sep 28, 2026
2bb55e1
fix(clickhouse): retry when the egress proxy hangs up mid-connect
Gilbert09 Sep 28, 2026
233b341
chore(insights): drop stale long-loading story baselines
sampennington Sep 28, 2026
f5bca28
Merge remote-tracking branch 'origin/master' into feat/aio-openai-com…
carlos-marchal-ph Sep 28, 2026
985adaf
fix(engineering-analytics): cap friction per pull request and ignore …
webjunkie Sep 28, 2026
f57c8ff
fix(api): Declare request bodies of pause, unpause, and cancel
tomasfarias Sep 28, 2026
5ade80a
chore(api): Regenerate OpenAPI and MCP types
tomasfarias Sep 28, 2026
e0719b1
fix(engineering-analytics): keep stale conclusions out of stopped run…
webjunkie Sep 28, 2026
fad1f1c
Merge remote-tracking branch 'origin/master' into fix/devex-friction-…
webjunkie Sep 28, 2026
76ef4d5
Merge branch 'master' into chore/retire-legacy-loops-mcp-tools
mayteio Sep 28, 2026
80f41b3
fix(temporal): upgrade temporalio to 1.33.0 for rss-based tuner
rossgray Sep 25, 2026
361e397
fix(api): Validate unpause request body
tomasfarias Sep 28, 2026
8ff607e
fix(engineering-analytics): read job rows of runs that stopped reporting
webjunkie Sep 28, 2026
790972b
Merge remote-tracking branch 'origin/master' into fix/devex-friction-…
webjunkie Sep 28, 2026
8302707
Merge branch 'master' into chore/retire-legacy-loops-mcp-tools
mayteio Sep 28, 2026
100d5da
chore(visual): update storybook baselines
posthog[bot] Sep 28, 2026
24ff50e
chore(mcp): count the loops-hog-flows flag in the required flags test
mayteio Sep 28, 2026
774b337
fix(data-warehouse): stop blaming a database when a source check fails
Gilbert09 Sep 28, 2026
bf29c9c
fix(cli): read the remote URL from the remote sections of the Git config
hpouillot Sep 28, 2026
117a525
Merging 3c943d8fd83d8515d6da3a4cb3b73a81b6bbcf43 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
bf37247
Merging 361e397b2ab8108d502b7e155e8a2373133ba1c1 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
11536d5
Merging fe0065d0196f0fbda1252e99b7e2a42aa85ca797 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
0f795b1
Merging 100d5dadda97f345547efcda0e914708a84e923d into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
ae931c3
Merge remote-tracking branch 'origin/master' into posthog/email-templ…
mayteio Sep 28, 2026
a300991
Merge branch 'posthog/email-template-editor-live-refresh' into postho…
mayteio Sep 28, 2026
cb2c260
Merging 0f795b164c75ead109421b109de75425852dc3b4 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
5f631f6
Merging 790972b30f781eafc707c6a00ad29b1adeaee68f into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
79fb12f
Merge commit 'a300991ae42' into posthog/email-templates-ai-first-new
mayteio Sep 28, 2026
991776f
fix(data-warehouse): widen the 5xx message to cover source creation
Gilbert09 Sep 28, 2026
67a8a28
chore(workflows): sort the taxonomic filter feature flags
mayteio Sep 28, 2026
798e6b5
fix(cli): close a config section header outside the quoted remote name
hpouillot Sep 28, 2026
fd6a360
Merging 0f795b164c75ead109421b109de75425852dc3b4 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
da9813d
Merging 0144e3f9f2c59a5734299bd26f1dc906b8f6a9d3 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
20c8457
Merging 93e11095fa02bc06a9da8ef53732a308f2cfdfb1 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
7c73621
Merging 96411a3f92f6bf57ad81a831386c558ba658223c into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
55e0626
Merging e3a426fa19bc0dea38ad00350e3c7b3f847ebc47 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
f74f00f
Merging 55e0626c385435f387b4490aee0717da97fa135b into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
2658630
Merging 5f631f6b1833ec204f1236c49dbaa21b98a279d5 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
ee1bda8
Merging 1fa3a961b92bd93d7e081faa9e2cf7459c13f719 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
99640d2
Merging 2b0dfd7db24a1fcd22db079dab9cc90ca422f67d into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
088364c
Merging 54cd427717891f0a2b17d2603d120f8cb140c5a5 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
007271e
Merging 3006b51fe8c4fdcb02e9e4b267d95970c63864df into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
27bb10d
chore(workflows): format the new template button
mayteio Sep 28, 2026
f3fb7e3
Merge branch 'master' into posthog/env0-coverage-gap-tables
Gilbert09 Sep 28, 2026
d7cae0c
Merging 007271ea3b570ff73dca1c0a708cc738f2947630 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
80a5579
Merging 8a0b0ee9b0ea2564ec010541965d31d8edbebaa2 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
c5a94ad
Merging f0a33a976d438a7c1a6695d4f97176faa53009dc into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
6e500d3
Merging 0a10fa4556095333fed49974dfeaada5e16f07b5 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
8ccbabc
Merging eabce23aabf1466956516203eac10874c0773dc2 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
3a30509
Merging 8ccbabcd45fba69444842b079a4fe79c042b56c8 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
cf91aa7
Merging 09e2ebaa0875102be39b60a6f23e464260beb0ca into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
e2995cd
Merging 408aaba830d13083751f89cfb608fee70e68c4ee into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
da89394
Merging 35438429ef3603f4e95a22395fd1381ea37e9a15 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
acb4dac
Merging 2d183008cbb25c5e48ad88e6d2ed352df47c4cb3 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
5bc9f3b
Merging acb4daca750831a473056b59687f3c5e51e2a6c5 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
bf993cf
Merging 8a7b8c2b63fdd692bc76ec1df496fe7841d7a2d9 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
000a3c2
Merging cdd4406d12ea68a64c57183945edc1c15beed148 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
4495f43
Merging 75c12f71e9ca05696d0040dea3a1969dfafa0053 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
614790f
Merging d56936e15aa7278f3dd61f0d74101db71a696418 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
bf36993
fix(tasks): route hogland checks through facade, disable redirects on…
Gilbert09 Sep 28, 2026
4185d3f
Merge branch 'master' into posthog/fleetio-expense-status-line-item-t…
Gilbert09 Sep 28, 2026
32c435b
feat(workflows): show pending suggestions on the workflow page
dmarchuk Sep 28, 2026
d2bc545
Merging 614790f81944c2fa7ccb96cdc32e2b860e9d16e9 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
82f61f9
Merging a65ac7b5735b9bdb796994e39cda1080e921a41a into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
5477314
Merging 6f5ac5f1ff71eb85fbe6b96927a3532a5611149f into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
956a0bf
Merging aa32ed29297be8b21a6c6837822f016611bb25f2 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
69b63b7
Merging 3bb7fa8e4bbdacbe6fb137ba51b8d92cce7d86a0 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
f742886
Merging 69b63b7629610f5c990edfc29aa0a800cfdc9bfa into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
de1157b
Merging 5c8c94a48432af3c7fe35e0c6624ce42ff3e686e into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
14ead92
Merging e83e04c80077ddf13f478cec2aa658e48aa63f93 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
f1f5b7e
Merging 1d336bd6a4c8774a498cf169c47cbd18beb46351 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
7376b19
Merging 2bb55e1ceffdabb2496f08b6a15e719d131cb2ae into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
8c88227
Merging 7376b19492f6ddedcad7626beb24c62b3ba71a4f into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
1b85857
Merging f2e0be4711c23a6977c24999d518a0cad4095340 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
c0c8353
Merging 83cc1c9ee8dfdaafd1719fc00719611a06d19405 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
0326b29
Merging 4950483c952204266366f5d19afadf44ac020ff9 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
5f08692
Merging 0644406da8baa408502a1c3cccbe323d11cfba6c into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
b6025ec
Merging 5f0869275ec41f127eb7355e6d41a42cd05b59a1 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
aaf626c
Merging 0bf5c0d40337f216a6586ee9e5aafd00eb94e79b into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
3cf8834
Merging fc3f856b6a8fbb6c02944cc52f2bf1ad3b27d304 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
508067c
Merging 3184e48ad5fb7843e32cd737fe36cf4e9365e81c into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
1eb1652
Merging 2b00aa9f41317697a3ab9f7fae49208fb45cb0df into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
a785bb3
Merging 1eb16524ff959d53d09a77d5bcd7094143b63e48 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
f942d58
Merging 1cad1f98a321083077e32bac04fe9eafe8a0b188 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
4eaffdc
Merging 3fbc2246390ec57140a9a1f9f7455a984720bc85 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
c1f12b8
Merging f3fb7e38bae8dd0856fb7ad57334af42e6b2c786 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
fe10591
fix(signals): show active runs with a green indicator
skoob13 Sep 28, 2026
e5d6dd9
Merging 69b63b7629610f5c990edfc29aa0a800cfdc9bfa into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
883dc28
Merging 991776f066b0991379f7844fde60836b7724cfb4 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
4079e81
fix(fleetio): declare FleetioResumeConfig frozen explicitly
Gilbert09 Sep 28, 2026
417bcb2
Merge branch 'master' into tom/tasks-hogland-command-proxy
Gilbert09 Sep 28, 2026
752bac6
fix(cli): decode a remote subsection name with the subsection rules
hpouillot Sep 28, 2026
470575d
chore(workflows): find the created workflow through the generated client
mayteio Sep 28, 2026
ced1a79
Merge branch 'posthog/ai-first-create-scaffolding' into posthog/email…
mayteio Sep 28, 2026
38b0bf6
Merging c1f12b82a91451503758dd5d941c186032ed8c17 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
91fbbd9
Merging 80f41b391020d0eab61777415829ca9e7afd6be8 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
2dba8c3
Merging 91fbbd9af30162ab09011514909c7c4b79c6d36f into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
453d000
Merging 883dc28fb8bb9844760ae89b43699d2a3af79551 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
cbb3390
Merging 752bac69cc0d53d6c609122ab844645cbaa87a19 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
a66c38b
Merging f5bca2835ecc832f636494604177054366f360e8 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
6be7fe4
Merging 32c435b4077f67c1349e5efacae24b0438210a74 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
57c93bc
Merge branch 'master' into posthog/fleetio-expense-status-line-item-t…
Gilbert09 Sep 28, 2026
55ea2a7
Merging 6be7fe4a0c47e30bd1998a417f89ac457d3cd88b into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
325589e
Merging 91b215b9ed614284cb49b96458879ba0c25c931d into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
9572259
Merging fe105910b7f63a3366b32ab16e40649684da648c into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
16cbe8c
Merging 95722596cde35265b2f70fa85bc35cff61c922dd into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
03d9ff5
Merging 57c93bcb9efaeeb69212e58c15941a3b5f574d52 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
e0bb6e8
Merging ced1a79849dcb9e918d17cf7c5265125e8b29d73 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
1f4b5de
chore(cli): release v0.18.8
releaser-posthog-cli[bot] Sep 28, 2026
710ea88
Merging e0bb6e835a6b10390eddc6127c5c0d075f88a280 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
d1bf129
Merging 24ff50ed7dac2e4fac8ff6538736f7b91882284b into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
16d9387
Merging 417bcb26959661551f315e9719bee53f0446313b into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
a3fe6bd
Merging 532addc4397a756785bddaed09e3cc9d3e1ff457 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
4bb3f7d
Merging c529850bb966057bfe60b6bf51535bdd31e6aa95 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
d47f82a
Merging 4bb3f7d64aab4f692d567a02bde3d2335b9b6f38 into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
83a7f13
Merging 1f4b5de2fb12023ff81cbd92d27ff9461d52e73b into trunk-temp/pr-1…
trunk-io[bot] Sep 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions cli/.sampo/changesets/event-hash-ignores-chunk-file-names.md

This file was deleted.

5 changes: 0 additions & 5 deletions cli/.sampo/changesets/section-aware-git-config.md

This file was deleted.

7 changes: 7 additions & 0 deletions cli/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# posthog-cli

## 0.18.8 — 2026-09-28

### Patch changes

- [09644fddca4](https://github.com/PostHog/posthog/commit/09644fddca4814ae7e95b67353c9c1a13f29bfbc) Read the remote URL from the `[remote "..."]` sections of the Git config only, and prefer `origin`. A repository that records another URL in its config, such as a superproject that records the URL of a submodule, no longer gets the wrong remote URL and repository name in its release metadata. — Thanks @hpouillot!
- [69a47659037](https://github.com/PostHog/posthog/commit/69a4765903776a5e70d4633590673395b1eaec2f) In event release mode, `sourcemap upload` no longer uploads unchanged chunks again when the bundler names chunks by content, as Vite does by default. Every chunk carries the release id, so every release renamed every chunk, and the content hash covered those names: the map's `file`, the `sourceMappingURL` comment and imports of other chunks. The hash now leaves out script file paths (ending in `.js`, `.mjs` or `.cjs`). Hashes stored by earlier versions include the paths, so the first upload after updating sends each chunk once more. — Thanks @ablaszkiewicz!

## 0.18.7 — 2026-09-24

### Patch changes
Expand Down
2 changes: 1 addition & 1 deletion cli/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ resolver = "2"

[package]
name = "posthog-cli"
version = "0.18.7"
version = "0.18.8"
authors = [
"David <david@posthog.com>",
"Olly <oliver@posthog.com>",
Expand Down
40 changes: 29 additions & 11 deletions docs/internal/hogql-language-service.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,8 @@ Built-in `posthog.*` namespaces are outside this rollout.

### Lazy-table traversal catalog

The Go consumer accepts optional traversal metadata alongside the flat catalog.
This is a consumer-first extension: existing Django snapshots do not publish these annotations yet.
Deploy the Go consumer before enabling publication in Python, because older consumers reject unknown JSON fields.
The Python publisher adds traversal metadata alongside the flat catalog using the same permission-filtered HogQL database.
Deploy the Go traversal consumer before this publisher, because older consumers reject unknown JSON fields.
Snapshots without traversal metadata keep their existing completion and validation behavior.

A field can carry one of two optional annotations:
Expand Down Expand Up @@ -137,19 +136,38 @@ The cache budget includes the traversal graph and annotations; the catalog reque
Cycles are allowed without recursive expansion.
Each query path can follow at most 16 relation hops and also consumes the request's field-lookup work budget.

This first consumer slice supports traversal from bound catalog sources, including sources inside CTE bodies.
Traversal works from bound catalog sources, including sources inside CTE bodies.
Direct top-level property containers retain their explicit namespace through the existing projected-field provenance rules.
Projecting a relation or nested virtual property container through a CTE, subquery, or SELECT alias does not yet retain traversal provenance.
Quoted path completion, nested JSON schemas, scalar traverser expression inference, and execution of lazy joins remain outside this slice.
Quoted path completion, nested JSON schemas, scalar traverser expression inference, and execution of lazy joins remain unsupported by this graph.
For deeper JSON paths under an explicit property namespace, validation checks the first property key but does not validate its descendants.

The Python publisher follow-up must resolve `LazyJoin`, `VirtualTable`, and table-valued `FieldTraverser` targets using the same permission-filtered database as the snapshot.
It must publish only permitted fields, reuse canonical table schemas when they match the resolved target, and deduplicate virtual relation definitions.
It must bound traversal during publication and isolate unresolvable edges without exposing denied targets.
It must also distinguish traversal-capable revisions so cached flat snapshots refresh instead of hiding the new suggestions until expiry.
The Python publisher resolves `LazyJoin`, `VirtualTable`, and table-valued `FieldTraverser` targets from the snapshot's database.
It follows the configured person and session schemas, including person-on-events virtual fields and parent-relative traversers used by custom joins.
It reuses a canonical table only when the resolved object and permitted field set match; other permitted helper and virtual targets receive deduplicated inline definitions.
Warehouse tables and views require a matching exported canonical schema; the publisher never copies them into inline definitions.
Hidden fields and denied targets do not gain traversal metadata.
An unresolvable edge or publication budget limit omits the affected traversal, while unrelated fields remain available.
Omissions produce one aggregate warning per catalog build with reason counts, without table names, query text, or exception traces.
Scalar traversers need no relation annotation.
No Python resolver chains, join SQL, credentials, or executable expressions belong in the graph.

For example, with the corresponding tables and properties available to the user:

| SQL | Completion behavior |
| ------------------------------------------------- | ----------------------------------------------------------------------- |
| `SELECT e.person.\| FROM events AS e` | Fields on the effective person target, not an assumed copy of `persons` |
| `SELECT e.person.properties.\| FROM events AS e` | Permitted person properties |
| `SELECT e.session.\| FROM events AS e` | Fields on the configured session table |
| `SELECT e.group_0.properties.\| FROM events AS e` | Properties for group index 0 only |
| `SELECT e.pdi.person.\| FROM events AS e` | Fields reached through the person distinct-ID helper |

`CATALOG_VERSION` is the single version for catalog publication and Redis coordination.
Revisions use `v2:<timestamp>`, and Redis coordination hashes the numeric version with the service target, team, and user.
Django refreshes snapshots with older revision prefixes on use instead of accepting them until expiry.
Older Django workers do not accept the new prefix; a mixed rollout can cause extra publications or Python fallback while the service is feature flagged.
The frontend request and response contracts do not change, and the existing eligibility checks and Python fallback still apply.

## Query analysis

`internal/analysis` owns parsed statements, nested scopes, table and CTE bindings, and projected fields for validation and completion.
Expand Down Expand Up @@ -399,9 +417,9 @@ fails startup unless dedicated signing keys are configured.
Local and debug environments may use the service directly. Production integration remains behind a server-side
feature flag and should progress through shadow comparison before serving editor results.
The Go consumer accepts alias metadata, and Django always publishes resolver-confirmed warehouse aliases.
Django refreshes cached catalogs with numeric or `legacy-v1` revisions before it uses their responses.
Django refreshes cached catalogs without the current version prefix before it uses their responses.
Each request attempts at most one publication and one post-publication retry; marker and lease paths add only bounded Go rechecks.
The retry must return an alias-capable revision, but a concurrent publication for the same team and user can supersede the requested revision.
The retry must return the current catalog version, but a concurrent publication for the same team and user can supersede the requested revision.
If publication fails or a catalog cannot represent the resolver result, Django uses the Python autocomplete or validation path.
Malformed HTTP payloads, incompatible revisions after refresh, and malformed autocomplete or validation mappings also use the Python path.
Malformed service responses produce a sanitized Error Tracking event without the SQL text, response body, user context, or original exception.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import '@testing-library/jest-dom'

import { render } from '@testing-library/react'

import { EmailPreviewThumbnail } from './EmailPreviewThumbnail'

describe('EmailPreviewThumbnail', () => {
// The design rides in the iframe's `srcdoc`, which the recorder serializes like any attribute.
it('keeps the email design out of session replay', () => {
const { container } = render(
<EmailPreviewThumbnail html="<p>Spring sale</p>" title="Spring sale preview" size="card" />
)

expect(container.querySelector('iframe')).toHaveClass('ph-no-capture')
})

// Each card frames a whole email, so without this its links are tab stops the caller never wanted.
it('stays out of the tab order', () => {
const { container } = render(
<EmailPreviewThumbnail html="<p><a href='/x'>Shop now</a></p>" title="Spring sale preview" size="card" />
)

expect(container.querySelector('iframe')).toHaveAttribute('tabindex', '-1')
})
})
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import { cn } from 'lib/utils/css-classes'

// Email designs are laid out for a 600px canvas. Each size renders that canvas and scales it to its width,
// so the thumbnail shows the whole design and not its top-left corner. Scale is width / 600.
const SIZE_CLASSES = {
attachment: 'w-24 h-16 [--email-preview-scale:0.16]',
card: 'w-40 h-28 [--email-preview-scale:0.2667]',
} as const

export interface EmailPreviewThumbnailProps {
/** Self-contained email html. Rendered in a fully sandboxed iframe: no scripts, no same-origin access. */
html: string
title: string
size: keyof typeof SIZE_CLASSES
className?: string
}

/** A scaled-down, non-interactive render of an email, for composer attachments and picker cards. */
export function EmailPreviewThumbnail({ html, title, size, className }: EmailPreviewThumbnailProps): JSX.Element {
return (
<span className={cn('block shrink-0 overflow-hidden bg-white', SIZE_CLASSES[size], className)}>
<iframe
srcDoc={html}
sandbox=""
title={title}
// The framed email is decorative: its own links would otherwise be tab stops with no
// visible focus at this scale, and `pointer-events-none` covers the mouse only.
tabIndex={-1}
// `ph-no-capture`: the recorder serializes `srcdoc`, so without it the whole design
// would ride into our own session recordings. Unreadable at this scale anyway.
className="w-[600px] h-[1000px] origin-top-left scale-(--email-preview-scale) border-0 pointer-events-none ph-no-capture"
/>
</span>
)
}
1 change: 1 addition & 0 deletions frontend/src/lib/constants.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,7 @@ export const FEATURE_FLAGS = {
DWH_POSTGRES_CDC: 'dwh-postgres-cdc', // owner: #team-warehouse-sources
DWH_SOURCE_METRICS: 'dwh-source-metrics', // owner: #team-warehouse-sources
EDITOR_DRAFTS: 'editor-drafts', // owner: @EDsCODE #team-data-tools
EMAIL_TEMPLATES_AI_FIRST_NEW: 'email-templates-ai-first-new', // owner: @mayteio #team-workflows
EMOJI_RELATED_SEARCH: 'emoji-related-search', // owner: @pauldambra, gates the model search in `emojiSuggestionsLogic.ts` when the emoji picker finds no match
ENDPOINTS_AI_MATERIALIZATION_FIX: 'endpoints-ai-materialization-fix', // owner: @sakce #team-data-modeling, gates the AI materialization rewrite (UI button + API action + MCP tools)
ENGINEERING_ANALYTICS: 'engineering-analytics', // owner: #team-devex
Expand Down
90 changes: 90 additions & 0 deletions frontend/src/scenes/max/aiFirstCreate/AiFirstCreateScene.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
import { useActions, useValues } from 'kea'
import { useEffect } from 'react'

import { LemonBanner } from '@posthog/lemon-ui'

import { cn } from 'lib/utils/css-classes'
import { MAX_SIDE_PANEL_ID } from 'scenes/max/components/PhaiSidePanelChat'
import { SuggestionCard } from 'scenes/max/components/SuggestionCard'

import { runnerPanelLogic } from 'products/posthog_ai/frontend/api/logics'
import { SidePanelRunner } from 'products/posthog_ai/frontend/api/runner'

import { AiFirstHandoffLogicProps, aiFirstHandoffLogic } from './aiFirstHandoffLogic'

export interface AiFirstSuggestion {
title: string
description: string
prompt: string
}

export interface AiFirstCreateSceneProps {
handoff: AiFirstHandoffLogicProps
/** Banner copy that says what this page trials. */
banner: string
escapeHatchLabel: string
onEscapeHatch: () => void
suggestions: AiFirstSuggestion[]
suggestionIcon: JSX.Element
/** Rendered between the composer and the suggestions while no run is active, e.g. a row of starting points. */
belowComposer?: React.ReactNode
// pinned: `data-attr` root. The page, its escape hatch (`-open-editor`) and its cards (`-suggestion`) hang off it.
dataAttr: string
}

/** An AI-first "new entity" page: the side panel's runner rendered full page, with a way back to the editor. */
export function AiFirstCreateScene({
handoff,
banner,
escapeHatchLabel,
onEscapeHatch,
suggestions,
suggestionIcon,
belowComposer,
dataAttr,
}: AiFirstCreateSceneProps): JSX.Element {
const { composerShown, escapeHatchClicked, fillComposer } = useActions(aiFirstHandoffLogic(handoff))
useEffect(() => composerShown(), [composerShown])
const { activeCreation } = useValues(runnerPanelLogic({ panelId: MAX_SIDE_PANEL_ID }))

return (
// Natural height while drafting so the cards sit under the composer; full page once a run starts.
<div className="flex flex-col grow min-h-0" data-attr={dataAttr}>
{/* The escape hatch stays up during a run, so a turn that never creates the entity has a way out. */}
<LemonBanner
type="ai"
className="m-2 shrink-0"
action={{
children: escapeHatchLabel,
onClick: () => {
escapeHatchClicked()
onEscapeHatch()
},
'data-attr': `${dataAttr}-open-editor`,
}}
>
{banner}
</LemonBanner>
<div className={cn('flex flex-col', activeCreation ? 'grow min-h-0' : 'shrink-0 mt-auto')}>
<SidePanelRunner panelId={MAX_SIDE_PANEL_ID} />
</div>
{!activeCreation && (
<div className="flex flex-col items-center gap-4 shrink-0 pb-6 mb-auto">
{belowComposer}
<div className="grid grid-cols-1 @min-[40rem]/main-content:grid-cols-2 gap-1 w-full max-w-2xl px-4">
{suggestions.map((suggestion) => (
<SuggestionCard
key={suggestion.prompt}
title={suggestion.title}
description={suggestion.description}
icon={suggestionIcon}
onClick={() => fillComposer(suggestion.prompt)}
data-attr={`${dataAttr}-suggestion`}
/>
))}
</div>
</div>
)}
</div>
)
}
Loading
Loading