Skip to content

Commit 4dab961

Browse files
author
JSONbored
committed
chore(release): resolve manifest conflict against main (contract/mcp/engine/miner at 3.21.1)
2 parents 4fd6ef7 + 12f3c6a commit 4dab961

169 files changed

Lines changed: 9869 additions & 908 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -889,6 +889,9 @@ jobs:
889889
# matches the pattern already used by "Save Turborepo cache"/"Save TypeScript incremental build
890890
# cache" elsewhere in this file: still run after an earlier step's failure, just not after the job
891891
# was cancelled outright. The job as a whole still fails if any of the three fails.
892+
- name: UI tests (ui-kit)
893+
if: ${{ !cancelled() && (github.event_name == 'push' || needs.changes.outputs.ui == 'true') }}
894+
run: npm --workspace @loopover/ui-kit run test
892895
- name: UI tests (ui)
893896
if: ${{ !cancelled() && (github.event_name == 'push' || needs.changes.outputs.ui == 'true') }}
894897
run: npm --workspace @loopover/ui run test

.github/workflows/mcp-release-please.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -178,31 +178,31 @@ jobs:
178178
if: ${{ steps.release.outputs['packages/loopover-mcp--release_created'] == 'true' }}
179179
env:
180180
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
181-
run: gh workflow run publish-mcp.yml --ref "${{ steps.release.outputs['packages/loopover-mcp--tag_name'] }}" -f released_by_release_please=true
181+
run: gh workflow run publish-mcp.yml --ref "${{ steps.release.outputs['packages/loopover-mcp--tag_name'] }}" -f released_by_release_please=true -f dispatched_by_automation=true
182182

183183
- name: Dispatch Engine publish
184184
if: ${{ steps.release.outputs['packages/loopover-engine--release_created'] == 'true' }}
185185
env:
186186
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
187-
run: gh workflow run publish-engine.yml --ref "${{ steps.release.outputs['packages/loopover-engine--tag_name'] }}" -f released_by_release_please=true
187+
run: gh workflow run publish-engine.yml --ref "${{ steps.release.outputs['packages/loopover-engine--tag_name'] }}" -f released_by_release_please=true -f dispatched_by_automation=true
188188

189189
- name: Dispatch Contract publish
190190
if: ${{ steps.release.outputs['packages/loopover-contract--release_created'] == 'true' }}
191191
env:
192192
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
193-
run: gh workflow run publish-contract.yml --ref "${{ steps.release.outputs['packages/loopover-contract--tag_name'] }}" -f released_by_release_please=true
193+
run: gh workflow run publish-contract.yml --ref "${{ steps.release.outputs['packages/loopover-contract--tag_name'] }}" -f released_by_release_please=true -f dispatched_by_automation=true
194194

195195
- name: Dispatch Miner publish
196196
if: ${{ steps.release.outputs['packages/loopover-miner--release_created'] == 'true' }}
197197
env:
198198
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
199-
run: gh workflow run publish-miner.yml --ref "${{ steps.release.outputs['packages/loopover-miner--tag_name'] }}" -f released_by_release_please=true
199+
run: gh workflow run publish-miner.yml --ref "${{ steps.release.outputs['packages/loopover-miner--tag_name'] }}" -f released_by_release_please=true -f dispatched_by_automation=true
200200

201201
- name: Dispatch UI Kit publish
202202
if: ${{ steps.release.outputs['packages/loopover-ui-kit--release_created'] == 'true' }}
203203
env:
204204
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
205-
run: gh workflow run publish-ui-kit.yml --ref "${{ steps.release.outputs['packages/loopover-ui-kit--tag_name'] }}" -f released_by_release_please=true
205+
run: gh workflow run publish-ui-kit.yml --ref "${{ steps.release.outputs['packages/loopover-ui-kit--tag_name'] }}" -f released_by_release_please=true -f dispatched_by_automation=true
206206

207207
# Self-heal for a known, reproducible, upstream googleapis/release-please limitation
208208
# (googleapis/release-please#1946, #1444, #1406 -- all the same "There are untagged, merged release
@@ -282,7 +282,7 @@ jobs:
282282
# `before_ts` only on the rare case the URL wasn't returned.
283283
local before_ts run_id dispatch_output
284284
before_ts="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
285-
dispatch_output="$(gh workflow run "$workflow" --repo "$GITHUB_REPOSITORY" 2>&1)"
285+
dispatch_output="$(gh workflow run "$workflow" --repo "$GITHUB_REPOSITORY" -f dispatched_by_automation=true 2>&1)"
286286
echo "$dispatch_output"
287287
run_id="$(printf '%s' "$dispatch_output" | grep -oE '/runs/[0-9]+' | grep -oE '[0-9]+' | tail -1 || true)"
288288
if [ -z "$run_id" ]; then

.github/workflows/publish-contract.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,18 @@ on:
2323
description: "Internal: set by the release automation's dispatch so this run skips re-creating the GitHub release it already made."
2424
type: boolean
2525
default: false
26+
dispatched_by_automation:
27+
description: "Internal: set by the release automation's dispatch so a hand retry is not counted as an outage. Informational -- it feeds run-name below and nothing else."
28+
type: boolean
29+
default: false
30+
31+
# PROVENANCE STAMP (#10234). `run-name` is the ONLY dispatch-time signal the runs API gives back (as
32+
# `display_title`): the reconcile path dispatches bare against main under a PAT, so `event`, `head_branch`
33+
# and `triggering_actor` are identical to a human's `gh workflow run`, and run objects carry no `inputs`.
34+
# scripts/escalate-workflow-outage.ts recovers "was this automated?" from the marker below -- see its
35+
# header for the full story. The marker must stay in lockstep with that script's
36+
# AUTOMATION_RUN_NAME_MARKER; scripts/check-dispatch-provenance-stamped.ts fails the build if they drift.
37+
run-name: "Publish Contract Package${{ inputs.dispatched_by_automation && ' [automated]' || '' }}"
2638

2739
permissions:
2840
contents: read

.github/workflows/publish-engine.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,18 @@ on:
1818
description: "Internal: set by the release automation's dispatch so this run skips re-creating the GitHub release it already made."
1919
type: boolean
2020
default: false
21+
dispatched_by_automation:
22+
description: "Internal: set by the release automation's dispatch so a hand retry is not counted as an outage. Informational -- it feeds run-name below and nothing else."
23+
type: boolean
24+
default: false
25+
26+
# PROVENANCE STAMP (#10234). `run-name` is the ONLY dispatch-time signal the runs API gives back (as
27+
# `display_title`): the reconcile path dispatches bare against main under a PAT, so `event`, `head_branch`
28+
# and `triggering_actor` are identical to a human's `gh workflow run`, and run objects carry no `inputs`.
29+
# scripts/escalate-workflow-outage.ts recovers "was this automated?" from the marker below -- see its
30+
# header for the full story. The marker must stay in lockstep with that script's
31+
# AUTOMATION_RUN_NAME_MARKER; scripts/check-dispatch-provenance-stamped.ts fails the build if they drift.
32+
run-name: "Publish Engine Package${{ inputs.dispatched_by_automation && ' [automated]' || '' }}"
2133

2234
permissions:
2335
contents: read

.github/workflows/publish-mcp.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,18 @@ on:
1212
description: "Internal: set by the release automation's dispatch so this run skips re-creating the GitHub release it already made."
1313
type: boolean
1414
default: false
15+
dispatched_by_automation:
16+
description: "Internal: set by the release automation's dispatch so a hand retry is not counted as an outage. Informational -- it feeds run-name below and nothing else."
17+
type: boolean
18+
default: false
19+
20+
# PROVENANCE STAMP (#10234). `run-name` is the ONLY dispatch-time signal the runs API gives back (as
21+
# `display_title`): the reconcile path dispatches bare against main under a PAT, so `event`, `head_branch`
22+
# and `triggering_actor` are identical to a human's `gh workflow run`, and run objects carry no `inputs`.
23+
# scripts/escalate-workflow-outage.ts recovers "was this automated?" from the marker below -- see its
24+
# header for the full story. The marker must stay in lockstep with that script's
25+
# AUTOMATION_RUN_NAME_MARKER; scripts/check-dispatch-provenance-stamped.ts fails the build if they drift.
26+
run-name: "Publish MCP Package${{ inputs.dispatched_by_automation && ' [automated]' || '' }}"
1527

1628
permissions:
1729
contents: read

.github/workflows/publish-miner.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,18 @@ on:
1818
description: "Internal: set by the release automation's dispatch so this run skips re-creating the GitHub release it already made."
1919
type: boolean
2020
default: false
21+
dispatched_by_automation:
22+
description: "Internal: set by the release automation's dispatch so a hand retry is not counted as an outage. Informational -- it feeds run-name below and nothing else."
23+
type: boolean
24+
default: false
25+
26+
# PROVENANCE STAMP (#10234). `run-name` is the ONLY dispatch-time signal the runs API gives back (as
27+
# `display_title`): the reconcile path dispatches bare against main under a PAT, so `event`, `head_branch`
28+
# and `triggering_actor` are identical to a human's `gh workflow run`, and run objects carry no `inputs`.
29+
# scripts/escalate-workflow-outage.ts recovers "was this automated?" from the marker below -- see its
30+
# header for the full story. The marker must stay in lockstep with that script's
31+
# AUTOMATION_RUN_NAME_MARKER; scripts/check-dispatch-provenance-stamped.ts fails the build if they drift.
32+
run-name: "Publish Miner Package${{ inputs.dispatched_by_automation && ' [automated]' || '' }}"
2133

2234
permissions:
2335
contents: read

.github/workflows/publish-ui-kit.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,18 @@ on:
1818
description: "Internal: set by the release automation's dispatch so this run skips re-creating the GitHub release it already made."
1919
type: boolean
2020
default: false
21+
dispatched_by_automation:
22+
description: "Internal: set by the release automation's dispatch so a hand retry is not counted as an outage. Informational -- it feeds run-name below and nothing else."
23+
type: boolean
24+
default: false
25+
26+
# PROVENANCE STAMP (#10234). `run-name` is the ONLY dispatch-time signal the runs API gives back (as
27+
# `display_title`): the reconcile path dispatches bare against main under a PAT, so `event`, `head_branch`
28+
# and `triggering_actor` are identical to a human's `gh workflow run`, and run objects carry no `inputs`.
29+
# scripts/escalate-workflow-outage.ts recovers "was this automated?" from the marker below -- see its
30+
# header for the full story. The marker must stay in lockstep with that script's
31+
# AUTOMATION_RUN_NAME_MARKER; scripts/check-dispatch-provenance-stamped.ts fails the build if they drift.
32+
run-name: "Publish UI Kit Package${{ inputs.dispatched_by_automation && ' [automated]' || '' }}"
2133

2234
permissions:
2335
contents: read

.release-please-manifest.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
2-
"packages/loopover-contract": "3.19.0",
3-
"packages/loopover-mcp": "3.19.0",
4-
"packages/loopover-engine": "3.19.0",
5-
"packages/loopover-miner": "3.19.0",
2+
"packages/loopover-contract": "3.21.1",
3+
"packages/loopover-mcp": "3.21.1",
4+
"packages/loopover-engine": "3.21.1",
5+
"packages/loopover-miner": "3.21.1",
66
"packages/loopover-ui-kit": "1.6.0"
77
}

apps/loopover-ui/content/docs/self-hosting-operations.mdx

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -676,13 +676,18 @@ three standalone bindings (`AI_EMBED`, `AI_VISION`, `AI_ADVISORY`).
676676
{
677677
title: "Content policy",
678678
description:
679-
"Metadata only — never the prompt or completion text. $ai_generation's own optional content fields ($ai_input/$ai_output_choices) are never populated, the same redaction posture as every other capture path on this page.",
679+
"Metadata only by default — no prompt or completion text leaves the box unless you explicitly opt in. $ai_generation's optional content fields ($ai_input/$ai_output_choices) stay unpopulated unless LOOPOVER_POSTHOG_AI_CONTENT is set, so upgrading never starts shipping content on its own.",
680680
},
681681
{
682682
title: "Model labelling",
683683
description:
684684
"$ai_model is always the model the provider actually resolved — on the failure path too. The core passes a Workers-AI model id that every self-host provider discards, so it is resolved to the real one (or <provider>-default) before capture and never reported verbatim.",
685685
},
686+
{
687+
title: "Trace naming",
688+
description:
689+
"$ai_trace names the whole review in PostHog's Traces view. Emitted once per trace, by the outermost pipeline span, and only when at least one AI call actually ran under it — a pipeline span with no generations is never given a trace row.",
690+
},
686691
{
687692
title: "Degraded requests",
688693
description:
@@ -691,6 +696,28 @@ three standalone bindings (`AI_EMBED`, `AI_VISION`, `AI_ADVISORY`).
691696
]}
692697
/>
693698

699+
### Capturing prompts and completions (`LOOPOVER_POSTHOG_AI_CONTENT`)
700+
701+
**Off by default, and deliberately so.** With it unset, no prompt, diff or model completion ever leaves the
702+
box — only the metadata listed above. Set `LOOPOVER_POSTHOG_AI_CONTENT=1` to populate `$ai_input` and
703+
`$ai_output_choices`, which is what unlocks PostHog's conversation view, sentiment, evaluations and
704+
LLM-judge surfaces. Read this before turning it on:
705+
706+
- **Your PR diffs and review text go to PostHog.** The prompt for a review contains the diff and the
707+
assembled repo context. On a private repository that is private source code leaving your infrastructure.
708+
Only enable it on a project you are willing to have that content in.
709+
- **The same redaction still applies.** Captured content passes through the identical `before_send` scrub
710+
(`src/selfhost/redaction-scrub.ts`) as every other field — credential shapes, JWTs and query-string
711+
secrets are redacted from it. That is a backstop, not a licence: it removes credential shapes, not the
712+
source code itself.
713+
- **Content is truncated.** Each message is capped at 10,000 characters
714+
(`LOOPOVER_POSTHOG_AI_CONTENT_MAX_CHARS`) and marked `…[truncated]`. A review prompt can exceed 300,000
715+
characters, so an uncapped capture would blow past PostHog's payload limits and be dropped entirely. A
716+
non-numeric, zero or negative override falls back to the default rather than disabling the cap.
717+
- **Images are never captured.** An image content block is dropped, not base64-encoded into the event.
718+
- **On a failure, the prompt is captured but there is no completion** — a `claude_stalled_no_output` or a
719+
context-length rejection is only diagnosable against the input that produced it.
720+
694721
A CLI-subscription provider declining an embedding request (`claude_code_no_embed` / `codex_no_embed`)
695722
is routing working as designed — it is how an embed reaches an embed-capable provider — so it is exempt
696723
from both captures. A chain with **no** embed-capable member at all is a real misconfiguration, but it

0 commit comments

Comments
 (0)