Repository navigation
refactor(settings): declare settings once and admit them per setting - #3662
Conversation
There was a problem hiding this comment.
All reported issues were addressed across 49 files
Reply with feedback, questions, or to request a fix.
View guided diff | Turn on auto-fix | Re-trigger cubic
|
|
The settings catalog and per-setting admission look sound in code at e0a7c21, but this PR changes device-facing routes and has no device run yet. CI is pending: all 20 non-passing checks are still queued, none have failed, and the diff overlaps command-docs-gate, Repo Guards/layering, Bundle Size and the Android/iOS smoke routes. I know of no conflicts. Before merge, please post a live run at head. The Android alert wait/accept/dismiss and fill-verification loops now run on pollUntilSettled (alert.ts:154), and Not blocking, and fine to take or leave: commit f11c7a3 (pollUntilSettled, the Android alert and fill rewrites, and their tests) is unrelated to declaring settings, carries its own public change in I ran no tests, and I did not regenerate The cubic-dev-ai threads that still apply are the Limrun owner-list restatement (#3662 (comment)) and the settings-catalog help dropping per-owner
|
Size Report
Startup median (7 runs, lower is better):
|
e0a7c21 to
38bfc3a
Compare
|
Rebased on Android 15 emulator (
iPhone 17 Pro simulator, iOS 27.0
macOS host
Response to the non-blocking points:
|
|
The earlier findings at e0a7c21 are fixed. At 38bfc3a one problem remains: the Please fix before merge: the On the other threads, the app description thread still applies, and the other 21 are fixed or benign, so they can be resolved: r4283187835, r4283187848, r4283187857, r4283187866, r4283187875, r4283187886, r4283187891, r4283187927, r4283187935, r4283187943, r4283187951, r4283187966, r4283187986, r4283187995, r4283188008, r4283188023, r4283188029, r4283188039, r4283188051, r4283188057, r4283188074 and r4283188083, all under #3662 (comment)_ (each is fixed at this head or matches main's behavior). |
Add pollUntilSettled to host-kit/retry: it samples a probe until a settled check accepts or a deadline passes, always takes the first sample, lands the last one at the deadline, and stops on an aborted signal. The Android alert wait, alert-dismiss confirmation, and fill verification use it instead of their own loops, and their tests drop the cadence assertions the helper's tests now own. An already-visible Android alert now answers alert wait 0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One catalog row per setting (settings-catalog.ts) now carries its forms,
app source, app scope, and help. CLI and daemon parsing, usage, the
invalid-args message, app scope, the MCP setting enum, the public client
type, and settings --help are derived from it.
Owners declare settings support per setting through
settingsRuntimeOperationFacts({ target, unsupported, write, read }), and
admission checks the requested setting's fact before binding. That
replaces the daemon's pre-admission macOS and Apple text-size refusals
and the Apple owner leaf guards: an unserved setting answers
UNSUPPORTED_OPERATION "settings <setting> is not supported on this
device" with the owner's reason and hint, and the ref frame survives.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
38bfc3a to
20ffe6f
Compare
|
Rebased on |
|
This PR is ready at 20ffe6f. The earlier findings from 38bfc3a are fixed. The app description in Not blocking: the Limrun Android leg in packages/provider-limrun/src/interaction-operations.ts#L369 repeats the AndroidSetting write table and the text-size read table from the local Android runtime, and the daemon test fixture holds a third copy. You could export one write table and one read table from On the open threads, the cubic thread on the app description text no longer applies at this commit, so you can resolve it: #3662 (comment) No conflicts. No check has failed, but 11 checks are still queued or in progress after the rebase push, and I did not verify your local gate run. Before merge, Repo Guards, Lint & Format, Integration, Smoke and Coverage need to pass. |
…ctions-1 * origin/main: feat(react-devtools): inspect React components and profile renders through the Metro inspector (#3613) refactor(daemon-contracts): drop the registration and claims fixture exports (#3689) refactor(test-kit): drop the daemon-contracts dependency (#3686) refactor(test-kit): drop command-registry by making the replay-script generator a root fixture (#3687) fix(ios): handle delayed launch confirmations without stopping XCTest (#3682) refactor(test-kit): move the dispatch-disclosure harness out of contracts (#3690) refactor(test-kit): host the target classification capture fixture (#3691) ci: fold six CI jobs into four with parallel and background steps; cancel superseded and closed-PR runs (#3658) build(typescript): move root project references into tsconfig.typecheck.json (#3688) chore(daemon): declare @agent-device/proxy as a devDependency, since only a test imports it (#3685) refactor(settings): declare settings once and admit them per setting (#3662) # Conflicts: # packages/platform-android/src/alert.ts # website/docs/docs/limrun.md
Summary
settingsnow declares every setting once and lets admission check support per setting.contracts/src/settings-catalog.tsholds each setting's forms, app source, app scope and help. CLI/daemon parsing (one parser), usage, the invalid-args message,settingsAppScope, the client type, the MCPsettingenum andsettings --helpderive from it.settingsRuntimeOperationFacts({ target, unsupported, write, read }); admission checks the requested setting before binding, so a refusal never expires the ref frame. Each owner's fact record is keyed by the setting list its dispatch switch is exhaustive over, so the two cannot drift. This removes the daemon's pre-admission refusals and the Apple leaf guards (ADR 0019 note added).pollUntilSettledinhost-kit/retryreplaces the Android alert and fill-verification loops.Public changes (CHANGELOG): an unserved setting answers
UNSUPPORTED_OPERATIONwith the owner's reason, replacing macOSINVALID_ARGSandsetting-unsupported-on-leaf; the parser refuses a permission action or mode its target does not take and stray extra arguments; Androidalert wait 0reports a visible alert.agent-device settings wifi on --platform macos # UNSUPPORTED_OPERATION, reason unsupported-platform-leaf51 files, +1480/−1779: over the 2,500-line gross guide; one migration kept as one PR on request, net −299.
Validation
pnpm check:affected --runpassed at38bfc3a60.38bfc3a60on an Android 15 emulator, an iPhone 17 Pro simulator (iOS 27.0) and the macOS host; transcript in the PR comments.🤖 Generated with Claude Code