Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
109 commits
Select commit Hold shift + click to select a range
2a93532
feat(lab): CL-10 public evidence trust core
Wibias Aug 13, 2026
5ad7201
fix(lab): bound private file stage cleanup
Wibias Aug 13, 2026
9336afe
test(lab): cover expired private file stages
Wibias Aug 13, 2026
57ff10f
fix(lab): bound strict public JSON input (#1641)
Wibias Aug 13, 2026
88627a8
fix(lab): harden private stages before publication
Wibias Aug 14, 2026
9c39523
fix(lab): protect publisher key before final link
Wibias Aug 14, 2026
75f8a02
test(lab): reject publisher key publication on ACL failure
Wibias Aug 14, 2026
bc4ab53
test(lab): prepare private stages before secret writes
Wibias Aug 14, 2026
78740d6
fix(lab): harden private stages before writing secrets
Wibias Aug 14, 2026
f26f397
fix(lab): harden publisher stage before key bytes
Wibias Aug 14, 2026
d01a619
fix(lab): address public evidence review findings
Wibias Aug 14, 2026
5e4e9aa
test(lab): tighten review regressions
Wibias Aug 14, 2026
b669369
fix(lab): address public evidence review findings
Wibias Aug 14, 2026
a69b19a
fix(lab): close remaining POSIX path privacy gaps
Wibias Aug 14, 2026
2a709df
feat(lab): CL-10 public evidence operator and community integration
Wibias Aug 14, 2026
6655307
fix(lab): scope public purge test faults
Wibias Aug 14, 2026
5d5a239
test(lab): cover actionable CodeRabbit regressions
Wibias Aug 14, 2026
7a1e066
fix(lab): bound mutation lock PID recovery
Wibias Aug 14, 2026
6c0db16
fix(lab): align public origin quota accounting
Wibias Aug 14, 2026
73d2cc2
fix(lab): report incomplete purge provenance
Wibias Aug 14, 2026
b5d35ab
fix(lab): fail incomplete public purge classification
Wibias Aug 14, 2026
4c2f84f
fix(lab): bound public verdict lookup and canonical ordering
Wibias Aug 14, 2026
cda04fe
fix(lab): make revocation ordering locale independent
Wibias Aug 14, 2026
34d0445
fix(cli): classify public verification failures correctly
Wibias Aug 14, 2026
6206798
test(lab): exercise community revocation conflict path
Wibias Aug 14, 2026
7983c7c
test(lab): make duplicate-key regression effective
Wibias Aug 14, 2026
fe295bc
test(lab): make private-key leak canary effective
Wibias Aug 14, 2026
99faa65
test(lab): describe provenance failure accurately
Wibias Aug 14, 2026
124d1e0
test(lab): remove duplicate source-shape regressions
Wibias Aug 14, 2026
af73ffc
test(lab): harden provenance recovery regressions
Wibias Aug 14, 2026
d5d7e59
test(lab): derive wire fixture key path
Wibias Aug 14, 2026
67ed25e
test(lab): keep temp path helper import
Wibias Aug 14, 2026
25b4c24
test(lab): isolate corrupt-origin purge provenance
Wibias Aug 14, 2026
f887c2a
test(lab): align origin regressions with corrected semantics
Wibias Aug 14, 2026
8e77cd6
test(lab): cover deferred export purge branches
Wibias Aug 14, 2026
730aa0d
fix CL-01 negative-control accounting
Wibias Aug 14, 2026
3ecd63f
test CL-01 harness failure isolation
Wibias Aug 14, 2026
d3886c1
refactor(lab): share community bundle filename contract
Wibias Aug 14, 2026
fa7846a
docs(lab): fix sensitive purge heading level
Wibias Aug 14, 2026
de9b5ff
fix CL-01 negative-control execution identity
Wibias Aug 14, 2026
28cf62a
test: report unexpected CL-01 negative-control classifications
Wibias Aug 14, 2026
6d471f3
test(lab): restore purge fault in finally
Wibias Aug 14, 2026
d5ea3a3
fix(gui): allow HTTP protocol literal in i18n lint
Wibias Aug 14, 2026
1c59fb1
fix CL-01 tool-result negative control
Wibias Aug 14, 2026
b69934c
test(lab): cover ledger mutation locking
Wibias Aug 14, 2026
1ee2d51
fix(lab): serialize ledger mutations
Wibias Aug 14, 2026
c0187ef
fix(lab): lock sensitive purge transactions
Wibias Aug 14, 2026
164881e
fix(lab): keep artifact publication in ledger transactions
Wibias Aug 14, 2026
6ec2dea
fix(lab): lock live artifact persistence
Wibias Aug 14, 2026
b1c8e37
fix(lab): lock conformance artifact persistence
Wibias Aug 14, 2026
aba59bb
fix(lab): lock fabric artifact persistence
Wibias Aug 14, 2026
52c92e8
test(lab): cover atomic artifact publication
Wibias Aug 14, 2026
1fe1eb5
fix(lab): make stale ledger recovery ownership-safe
Wibias Aug 14, 2026
1df92c2
test(lab): cover ledger lock lifecycle guards
Wibias Aug 14, 2026
d348130
test(lab): assert persistence lock release
Wibias Aug 14, 2026
981b868
fix(lab): clean up uninitialised ledger locks
Wibias Aug 14, 2026
d9655f3
fix(lab): preserve live transport failure classes
Wibias Aug 14, 2026
ecdbbda
fix(lab): preserve legacy pinned HTTP idle timeout
Wibias Aug 14, 2026
8c1f497
fix(lab): validate management read filters
Wibias Aug 14, 2026
118c90f
test(lab): cover invalid management read filters
Wibias Aug 14, 2026
c715534
fix(lab): propagate pinned body failures
Wibias Aug 14, 2026
6e23061
test(lab): cover compatibility follow-up regressions
Wibias Aug 14, 2026
5f59416
fix(lab): surface partial compatibility reads
Wibias Aug 14, 2026
a4cdf38
test(lab): verify load-more retry recovery
Wibias Aug 14, 2026
ae5498e
test(lab): avoid hardcoded retry error text
Wibias Aug 14, 2026
a13ebd8
fix(lab): harden CL-07 outcome validation
Wibias Aug 14, 2026
381ce11
test(lab): cover fractional CL-07 timestamps
Wibias Aug 14, 2026
05fcadf
fix(gui): allowlist HTTP protocol token
Wibias Aug 14, 2026
e66f864
fix(providers): recover static model discovery
Wibias Aug 14, 2026
690eeb3
fix lab automation runtime rebind
Wibias Aug 14, 2026
8acdb23
test lab activation runtime ownership
Wibias Aug 14, 2026
991e5ba
fix(lab): align passive signal API limit
Wibias Aug 15, 2026
b665724
fix(lab): validate passive subject IDs in CLI
Wibias Aug 15, 2026
04d6b08
test(lab): cover passive read surface validation
Wibias Aug 15, 2026
19af689
test(lab): restore passive test environment
Wibias Aug 15, 2026
8119b3c
feat(models): per-custom-model reasoning effort in the Models dashboard
RobinBially Aug 14, 2026
64272d7
docs: add custom-model reasoning steps dialog screenshot
RobinBially Aug 14, 2026
709b2ff
fix(models): enforce ladder invariants and constrain Pi effort levels
RobinBially Aug 14, 2026
4467a4b
docs: refresh custom-model dialog screenshot to final reasoning-effor…
RobinBially Aug 14, 2026
925fa93
docs: rename screenshot for a cache-free URL (old filename was CDN-ca…
RobinBially Aug 14, 2026
f88d69c
docs: hi-res screenshot of the reasoning-effort dialog (none..max)
RobinBially Aug 14, 2026
74a1a7b
docs: use the user's browser screenshot of the reasoning-effort dialog
RobinBially Aug 14, 2026
fbda693
feat(models): add none/minimal as declared reasoning efforts; fix rev…
RobinBially Aug 15, 2026
8ccca16
fix(models): address CodeRabbit round 3 + carry-over findings
RobinBially Aug 15, 2026
a42dfe5
fix(models): CodeRabbit round 4 — init-ref seeding, capability-aware …
RobinBially Aug 15, 2026
a087d2a
fix(gui): localize reasoning-effort labels in the custom-model dialog
RobinBially Aug 15, 2026
ccdc7bc
refactor(adapters): centralize runtime adapter authority
Wibias Aug 15, 2026
ca0a512
test(adapters): derive routed tool conformance from registry
Wibias Aug 15, 2026
3b05a27
test(adapters): cover buffered freeform restoration
Wibias Aug 15, 2026
5bc5fda
Merge PR #1708 into dev (triage 260815)
lidge-jun Aug 15, 2026
56522c6
Merge PR #1709 into dev (triage 260815)
lidge-jun Aug 15, 2026
0827bc6
Merge PR #1710 into dev (triage 260815)
lidge-jun Aug 15, 2026
43c5f9e
Merge PR #1712 into dev (triage 260815)
lidge-jun Aug 15, 2026
7c20f8c
Merge PR #1715 into dev (triage 260815)
lidge-jun Aug 15, 2026
e7651fc
Merge PR #1717 into dev (triage 260815)
lidge-jun Aug 15, 2026
a2f01ac
Merge PR #1719 into dev (triage 260815)
lidge-jun Aug 15, 2026
f0daa72
Merge PR #1720 into dev (triage 260815)
lidge-jun Aug 15, 2026
8c88f56
Merge PR #1705 into dev (triage 260815)
lidge-jun Aug 15, 2026
d8479bd
Merge PR #1706 into dev (triage 260815)
lidge-jun Aug 15, 2026
447b776
Merge PR #1714 into dev (triage 260815)
lidge-jun Aug 15, 2026
feeec96
Merge PR #1721 into dev (triage 260815)
lidge-jun Aug 15, 2026
13429be
test(adapters): use canonical mimo-free endpoint in registry authorit…
lidge-jun Aug 15, 2026
859bce8
Merge PR #1722 into dev (triage 260815)
lidge-jun Aug 15, 2026
ca5c10f
test(adapters): canonical mimo-free chat endpoint in tool conformance…
lidge-jun Aug 15, 2026
9edfecb
Merge PR #1723 into dev (triage 260815)
lidge-jun Aug 15, 2026
d1491ab
test(adapters): canonical mimo-free chat endpoint in buffered conform…
lidge-jun Aug 15, 2026
13672f2
Merge PR #1716 into dev (triage 260815)
lidge-jun Aug 15, 2026
57097a1
docs(devlog): 260815 open-PR triage plan, matrix, and execution record
lidge-jun Aug 15, 2026
ba20ce1
fix(lab): type-safe deferred export error in merged purge flow
lidge-jun Aug 15, 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

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# CL-10 V1 revocation anchor clarification

Status: normative clarification to `010_cl10_public_evidence_export.md` section 17.

`PublicEvidenceRevocationV1` uses exactly one already-verified target bundle as its authority anchor. The revocation may contain between 1 and 256 sorted unique targets, but every target must resolve inside that one anchor bundle:

- a `bundle` target must equal the anchor bundle ID;
- a `record` target must name a record contained by the anchor bundle;
- mixed bundle/record targets are allowed only when they all resolve inside the same anchor bundle;
- multiple distinct bundle IDs in one V1 revocation are not supported and must be rejected;
- targets spread across multiple bundles are not supported even when those bundles use the same publisher key.

The publisher algorithm, key ID and exact public key in the revocation must match the already-verified anchor bundle before the revocation signature is authoritative. V1 therefore has no cross-key, key-rotation or multi-bundle authority bootstrap.

The phrase "one or more bundle/record IDs" in section 17 describes the bounded target list, not multiple independent bundle authority contexts. Where that wording could be read as authorizing a single V1 revocation across multiple bundles, this clarification is authoritative.

Supporting multi-bundle revocation requires a separately reviewed contract/schema revision that defines how all target bundles are supplied, verified, bounded and bound to the signing authority before persistence or application.
45 changes: 45 additions & 0 deletions devlog/_plan/260815_open_pr_triage/000_plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# 000 — 260815_open_pr_triage: Plan

## Objective

Triage every open PR shown in the owner's 2026-08-15 list (22 PRs, #1704-#1732) in lidge-jun/opencodex. Each PR gets exactly one executed disposition: MERGE (squash via gh, or cherry-pick when unmergeable), CLOSE with evidence-led comment, or KEEP-DRAFT with named gaps. Owner directives: suites run only on ssh lidge; pushing to dev is authorized (--no-verify allowed); unlimited subagents; multi-cycle PABCD.

## Loop-spec

- Loop archetype: verifier-defined (gh PR state + lidge suite green on dev).
- Write scope: GitHub PR state (merge/close/comment), devlog unit docs. Out-of-scope: main/preview branches, npm release, issues, PRs #1703 and older (not in the owner's list).
- Budget / bounds: wall-clock one session; BLOCKED if lidge or gh auth fails.

## Evidence base

- 5 explorer subagent verdicts (diff-level per-PR review), 2026-08-15.
- GraphQL reviewThreads (authority for unresolved blocking threads).
- Exact-head check-run rollup per PR (gh pr view --json statusCheckRollup).

## Work-phase map (one phase = one full PABCD cycle)

| WP | Doc | Slice | Depends on |
|----|-----|-------|------------|
| wp1 | 010 | Triage matrix (this unit's docs) | - |
| wp2 | 020 | Lab CL merges: #1708 #1709 #1710 #1712 #1715 #1717 #1719 #1720, then #1705 -> #1706 stack | wp1 |
| wp3 | 020 | Adapters: #1714 merge, then #1721 rebase + fixture fix + merge; #1722/#1723 stay draft (Major thread) | wp2 |
| wp4 | 020 | Contributor #1716 merge; KEEP-DRAFT comments #1718 #1725 #1728; #1704 stays draft | wp2 |
| wp5 | 020 | Storage/log-guard #1727 #1729 #1732 stay draft (named gaps) | wp1 |
| wp6 | 030 | Final: lidge full suite on dev, verify all dispositions, report | wp2-wp5 |

## Merge mechanics (B-phase execution)

1. Independent lab fixes first (disjoint files; overlaps #1709/#1717 and #1712/#1720 verified clean by merge-tree): gh pr merge <n> --squash (--admin only if the review-requirement blocks; owner-directed triage).
2. #1705 merges; GitHub auto-retargets #1706 to dev; merge #1706.
3. #1714 merges. Then #1721: rebase onto dev, switch mimo-free fixture URL to canonical MIMO_CHAT_URL (semantic conflict with #1714's endpoint guard), push, merge.
4. #1716 merges (external contributor - use gh merge so it records as merged).
5. KEEP-DRAFT set: no state change; gaps recorded in 010 matrix; brief maintainer comment on external drafts (#1718 #1725 #1728).

## Accept criteria

- c1: 010 matrix written with per-PR evidence (this unit).
- c2: every listed PR shows merged/closed/draft disposition via gh pr view.
- c3: full suite green on lidge against final dev head.
- c4: no security notes in tracked files (log-guard findings stay in matrix form - all referenced fixes already public in PR diffs).
- c5: final per-PR outcome report.

51 changes: 51 additions & 0 deletions devlog/_plan/260815_open_pr_triage/010_triage_matrix.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# 010 - Triage matrix (wp1 deliverable)

Evidence gathered 2026-08-15. "checks" = exact-head check-runs; "threads" = fresh unresolved reviewThreads (GraphQL). Verdicts from 5 independent explorer subagents, spot-verified by maintainer agent.

A-audit amendment (GO-WITH-FIXES, 2 blockers folded):
1. #1706 will be retargeted to dev explicitly ('gh pr edit 1706 --base dev') before merging - the repo does not auto-delete branches, so merge does not auto-retarget stacked children.
2. #1722/#1723 upgraded KEEP-DRAFT -> MERGE: the Cursor false-pass Major was fixed at head ca0a5124 (force-push 02:13Z, after the 01:56Z CodeRabbit comment); same fixed-in-branch standard the plan already applied to #1706. Residual: stale-thread hygiene only.

## MERGE (15)

| PR | What | Gate state | Notes |
|----|------|-----------|-------|
| #1708 | fix(lab) CL-01: negative control asserted its own repair | 35 green, 0 threads | harness integrity |
| #1709 | fix(lab) CL-02: transactional ledger mutations | 26 green, 0 threads | TOCTOU races closed |
| #1710 | fix(lab) CL-03: distinct transport failure classes | 35 green, 1 outdated | backward compatible |
| #1712 | fix(lab) CL-04: 400 on invalid read filters | 35 green, 1 minor | empty-artifactClass follow-up optional |
| #1715 | fix(lab) CL-05: GUI partial-read failures | 29 green, 0 threads | gui-screenshot-waived label present |
| #1717 | fix(lab) CL-07: fail-closed outcome validation | 29 green, 0 threads | clean vs #1709 |
| #1719 | fix(lab) CL-08: rebind runtime ownership on server replace | 32 green, 0 threads | lifecycle defect |
| #1720 | fix(lab) CL-09: passive read surface alignment | 32 green, 0 threads | clean vs #1712 |
| #1705 | feat(lab) CL-10 trust core | 31 green (react-doctor cancelled = superseded dup), 2 trivial + 1 minor threads | stack base |
| #1706 | feat(lab) CL-10 operator/community | 26 green, Major fixed in-branch (7a1e066ae) | explicit retarget to dev before merge; core-lab boundary test green |
| #1714 | fix(providers) static model discovery | 32 green, 0 threads | land BEFORE adapter stack (endpoint-guard fixture conflict) |
| #1721 | refactor(adapters) registry authority Part 1 | 26 green, 0 threads | rebase + mimo fixture fix (authority test only) after #1714 |
| #1722 | test(adapters) conformance Part 2 | 23 green; Major fixed at head ca0a5124 | stack order after #1721; A-audit upgrade |
| #1723 | test(adapters) buffered freeform Part 3 | 23 green, 0 threads | stack order after #1722; A-audit upgrade |
| #1716 | feat(models) per-custom-model reasoning effort | 27 green (+1 cancelled react-doctor dup; win shard skip systemic), screenshot present | "Critical duplicate payload" verified false positive; 1 minor trim nit |

## KEEP-DRAFT (7)

| PR | Why not now | Gap to merge |
|----|-------------|--------------|
| #1704 | own GUI quota PR: hygiene + enforce-target FAIL (no screenshot, no regression test), 5 fresh threads | screenshot, unit test, address threads |
| #1718 | external draft, light gates only, no full CI | author checklist + maintainer-triggered CI |
| #1725 | external draft, no full CI | author readiness + maintainer CI |
| #1727 | enforce-target (screenshot), hygiene empty_catch, unresolved Major: sqliteHome/databasePath leak in API/CLI/UI | redact path fields, fixed-message errors, screenshot |
| #1728 | author mid-flight: checklist 0/4, manual verification pending | author completes checklist |
| #1729 | 5 real macOS test failures in protection/lock core, 10 unresolved threads | fix lock/trigger semantics failures |
| #1732 | failing reclaim/gates checks, plausible TOCTOU + stopReason Majors, CI still running | post-open path re-validation, stopReason fix, drop duplicate workflow |

## Stacks and order constraints

- #1705 (base dev) -> #1706 (base cl10-public-core): merge #1705, then 'gh pr edit 1706 --base dev', then merge #1706.
- #1721 -> #1722 -> #1723 stack: merge in order; use --delete-branch on each merge so the next child retargets to dev automatically (or retarget explicitly).
- #1727 -> #1729 -> #1732 stack: all stay draft.
- Semantic conflict: #1714's canonical-endpoint guard breaks the mimo-free fixture in #1721's authority test (example.invalid/v1). #1714 lands first; #1721 rebases with MIMO_CHAT_URL fixture before merge. #1722/#1723 fixtures re-verified against the combined tree before their merges.

## Out of scope (open but not in owner's list)

#1703 #1669 #1664 #1660 #1655 #1652 #1645 #1644 #1624 #1584 #1569 #1557 #1552 #1526 #1521 #1498 #1367 #1165 - untouched this round.

65 changes: 65 additions & 0 deletions devlog/_plan/260815_open_pr_triage/020_merge_execution.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# 020 - Merge execution record (wp2-wp3)

## Plan (written at P, verified: zero head drift on all 15 PRs, 2026-08-15)

Mechanism: local integration branch with --no-ff merges of pull/<n>/head refs,
so each PR head becomes an ancestor of dev and GitHub auto-marks the PR Merged
on push (preserves contributor attribution, e.g. external #1716). One dev push,
one dev CI run, one lidge validation before the push.

### Step 1 - retarget stacked children to dev (gh pr edit --base dev)

- #1706 (was cl10-public-core), #1722 (was refactor/adapter-registry-authority),
#1723 (was test/adapter-registry-conformance).

### Step 2 - integration branch

git fetch origin
git switch -c int/260815-pr-landings origin/dev

Merge order (dependency-safe):
1. #1708 #1709 #1710 #1712 #1715 #1717 #1719 #1720 (independent lab fixes)
2. #1705 then #1706 (stack; #1706 branch contains #1705)
3. #1714 (endpoint guard)
4. #1721 (authority test fixture fix required: tests/adapter-registry-authority.test.ts
mimo-free provider baseUrl example.invalid/v1 -> canonical MIMO_CHAT_URL
https://api.xiaomimimo.com/api/free-ai/openai/chat; separate fix commit)
5. #1722 then #1723 (stack; contains #1721)
6. #1716 (external feature, disjoint files)

Each: git merge --no-ff FETCH_HEAD -m 'Merge PR #<n>: <title>' using
git fetch origin pull/<n>/head.

### Step 3 - devlog unit onto int

Cherry-pick 1628d06c2 (triage docs) onto int.

### Step 4 - validate

git push origin int/260815-pr-landings
ssh lidge: clone/fetch, checkout int branch, bun install, bun run typecheck +
bun run test (+ privacy:scan). Suite runs ONLY on lidge per owner directive.

### Step 5 - land

git push origin int/260815-pr-landings:dev --no-verify
(owner-authorized; enforce_admins=false so admin bypass works on protected dev)
Then verify all 15 PRs auto-marked Merged; stragglers get an evidence comment
and manual close.

### Step 6 (wp3) - KEEP-DRAFT comments

Brief maintainer comment on #1704 #1718 #1725 #1727 #1728 #1729 #1732 naming
the recorded gaps (010 matrix).

## A-audit amendments (GO-WITH-FIXES, 3 blockers folded)

1. #1709 -> #1706 semantic conflict in src/lab/ledger/purge.ts: #1706's export-purge steps + deferred-error vars must be re-expressed inside #1709's withLedgerMutation wrapper. Pre-staged resolution; purge tests re-run.
2. #1715 -> #1714 trivial conflict in gui/.eslint/i18n-allowlist.ts: take #1714's /^HTTP$/i version (superset).
3. Fixture fix covers THREE files (mimo-free canonical /chat under #1714's guard): tests/adapter-registry-authority.test.ts (#1721), tests/adapter-tool-conformance.test.ts (#1722), tests/adapter-buffered-tool-conformance.test.ts (#1723). Separate commits, never amend PR heads (auto-merge detection is exact-SHA).
4. Advisory: retargets before push; re-verify all 15 head SHAs at push time.

## Execution log

(pending)

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# 030 - Final verification (wp6)

(pending: lidge suite output on final dev head, gh disposition verification, per-PR outcome report)

23 changes: 20 additions & 3 deletions docs-site/src/content/docs/guides/pi.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,9 +103,26 @@ small-context model is never given more output than context. It is not a claim a
model's true maximum.

Two fields are deliberately absent. `cost` requires all four price fields and opencodex has no
price data for routed models — emitting zeros would assert that every model is free. `reasoning` is
a boolean in Pi while the catalog carries an effort ladder, and mapping one onto the other would be
a guess.
price data for routed models — emitting zeros would assert that every model is free.

`reasoning` is the one field that used to be absent and now is not: Pi stores a boolean while the
catalog carries an effort ladder, and mapping one onto the other used to be a guess. Since the
catalog's ladder is the proxy's own statement about whether a model accepts reasoning parameters
(adapters honor `reasoning_effort`), an export row with a **non-empty** ladder now emits
`"reasoning": true`, and a row without one (or with an explicitly empty ladder) stays
reasoning-free. Pi then offers its effort control for exactly the models opencodex will accept it
on. The export also emits a `thinkingLevelMap` that hides every pi level with no declared target
(`null`), so pi never offers — and never sends — an effort the ladder does not contain. One
fallback keeps the model usable: when `ultra` is declared without `max`, pi's `max` level maps
to `ultra` (still a ladder member).
If you need a different mapping, hand-edit `thinkingLevelMap` afterward as documented by Pi.

Treat `reasoning` as Pi-UI metadata: it is derived from the catalog ladder, not proof that the
upstream natively supports a reasoning parameter. What the proxy actually sends for a given
`reasoning_effort` value depends on the provider's adapter and model — it may pass the value
through, translate it (wire aliases), clamp it to the configured ladder, emulate it, or omit it
entirely (e.g. `noReasoningModels`). The boolean only controls whether Pi offers the control at
all.

## Schema status

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading