Skip to content

Support custom Installation profiles and readable Preset starters - #2253

Open
miguelbranco80 wants to merge 23 commits into
openclaw:mainfrom
raw-labs:codex/installation-customization
Open

miguelbranco80 wants to merge 23 commits into
openclaw:mainfrom
raw-labs:codex/installation-customization

Conversation

@miguelbranco80

@miguelbranco80 miguelbranco80 commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Problem and change

Fixes #2252. Operators need trusted Installation profile customization and a usable quick-start when a Namespace has only custom Presets.

  • Add --profile-file with closed validation, matching profile family and supported bundled PluginDriver selection. Invalid input fails without fallback and revokes stale output; startup validates Driver options.
  • Accept presets.includeDefaults (default true). Disabling it preserves saved Presets and seeds only explicitly listed files.
  • Prefer readable default-codex, otherwise the first readable Preset by case-insensitive browser locale order with exact-name tie-breaking. Name custom starters before selection and authorize the exact resource read.
  • Derive hosted catalog credential prerequisites from the selected PluginDriver, independently of profile family. Runtime credentials remain per Agent.

Both PRs share raw-labs:codex/installation-customization: upstream #2253 and fork #11. The fork comparison snapshot follows the merged upstream revision. Both remain open and ready.

Verification

Head 5acf92b89f9053fec747a802e3790822a5b4340d merges upstream main pinned at 83916ce36a51d121c59166152058be5857d22f81 without rewriting published history. The published tree matches the locally validated and independently reviewed candidate.

  • Resolved the Preset flow documentation conflict by retaining upstream metadata, both historical entries, and this PR's quick-start behavior. Shortened the existing paragraph to meet the combined page's word limit. No feature behavior or scanner policy changed.
  • 178 selected tests passed, no failures or skips: profile renderer, chart parity, Preset controller/conformance, and the Preset browser suite. Selected command:
    node --test tests/integration/profile-renderer.test.mjs tests/integration/profile-preflight-chart-parity.test.mjs tests/conformance/presets.test.mjs tests/integration/presets-controller.test.mjs tests/browser/console-agent-presets.test.ts
  • TypeScript, ESLint, formatting, workspace isolation, OpenAPI, CI-selection audit, documentation/link/length checks, both flow validators, and Storybook build passed with matching dependencies and Node 24.22.1. Documentation checks validated 291 pages, 4,586 links and 96 specs. No new local database, cluster, model or visual acceptance qualification.
  • Independent full-PR source review: no actionable P0–P2 findings. Reviewed the complete 21-file delta against the pinned base and its surrounding rendering, startup/seeding, authorization and draft-handling paths, including the final prose trim. This was read-only source review; tests ran separately.
  • CI Required passed on this head. Checkout logs identify generated merge ec30f54cf4d8fc6aa4273e09729b291248af96d3 of this head into newer upstream bb5b58f7566c2935a09382e6936eef6f0e6c23fa, not the local pinned base. PostgreSQL Platform passed, including the Preset-preservation test (current-version restart proof); Console Browser 2, CodeQL analysis and Storybook build passed. Nonblocking First Agent Smoke was still running at required-gate completion. Native container qualification and advisory QA were skipped.
  • Current source-input scan: zero findings. TruffleHog 3.97.4 scanned all 39 unique base/head blobs for the 21 changed files, plus raw diff and patch; historical controls reproduced. Credential verification was disabled. This does not reproduce the complete hosted scanner prompt/schema or policy processing. The repaired source inputs and fixed live-DNS test finding justify the new exact-head ClawSweeper request; no scanner policy or suppression changed.

Historical proof: at 68c7a1bfca09aa6939373c15658506f0c20acb06, two real PostgreSQL preservation runs passed without skips: current-version restart and historical b195e54e9 upgrade, preserving custom/edited Presets and saved Configuration across fresh processes with separate migrator/application roles. Owned resources were removed; see the procedure. Database, Kubernetes and model qualification were not rerun for this refresh. The earlier local TLS-fixture failures at 7eefd21048f3b3886cb2fca1d67177ffa930b869 remain historical evidence, not current-head passes or failures. The existing local DNS fixture still isolates hosted custom-profile rendering from public DNS.

Console evidence

Preserved captures at 68c7a1bfca09aa6939373c15658506f0c20acb06 cover Pages/Create Agent / CreateCustomPresetStarter and CreatePresetNameTie. Storybook simulates API/runtime responses. The native captures use production Fastify Console/API, native IAM/OCC, in-memory storage, a test-provisioned ready Namespace and substituted runtime dependencies, without intercepted Preset responses: Node 24.3.0, headless Chromium, 1440×1080. This refresh preserves starter behavior through upstream's typed migration. The current Storybook build and browser checks passed; media was not regenerated and does not claim a new visual acceptance walkthrough.

Custom starter and accessible hint

Preset variables

Source Preset and retained draft

Continuous 8.52-second walkthrough: custom shortcut → variables → editable draft → leave/return with edits retained → confirmed Cancel → fresh chooser. All three images load and the video decodes in GitHub preview.

console-walkthrough.mp4

PostgreSQL proof uses real production composition, authentication, native IAM/OCC, persistence and the same filesystem Configuration directory across processes. Compute and unused Secret storage are test Drivers. These checks do not qualify images, Kubernetes or model execution.

Remaining gates

Maintainer product acceptance and final-head upstream CI remain required. Existing CodeQL fixture alerts remain for maintainer triage. Hosted scanner qualification remains pending after the earlier input-safety hold. A new exact-head review was requested after source-input diagnosis and required CI passed; no scanner policy or suppression changed.

Both PRs remain open and non-draft on the same fork head. No force push, PR merge or auto-merge; fork main and codex/raw-integration are unchanged.

@clawsweeper

clawsweeper Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@clawsweeper clawsweeper Bot added P2 Normal priority bug or improvement with limited blast radius. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Oct 12, 2026
@clawsweeper

clawsweeper Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Codex review: blocked before merge.

What this changes

Adds trusted Installation profile files, optional bundled Preset seeding, and named quick-start from another readable Preset.

Example: A Namespace contains Alpha starter and Zulu starter but no default-codex.

  • Before: Quick-start is disabled; the user must select a custom Preset manually.
  • After: Start with Alpha starter names and opens the first readable starter.

Review scores

Measure Result What it means
Overall readiness 🦐 gold shrimp (3/6) Focused implementation with meaningful native UI and persistence evidence; unresolved product direction caps readiness.
Proof confidence 🦞 diamond lobster (5/6) ✨ media proof bonus Sufficient (screenshot): Preserved native Fastify Console screenshots demonstrate the named custom shortcut, variable chooser and editable draft at 68c7a1b; historical CLI and production PostgreSQL preservation evidence remains recorded and previously accepted. Subsequent changes retain that behavior through upstream migrations. Compute and Secret fixtures do not prove Kubernetes or model execution. Video inspection was limited by missing ffprobe and unavailable browser playback tooling.
Patch quality 🐚 platinum hermit (4/6) 1 actionable review finding remain.

Product

Kind: Feature · Worth it: Needs a maintainer decision · Fix scope: Complete
User problem: Operators maintaining custom profiles and custom-only Presets must edit generated configuration and manually select a starter.
Reason: The extension has concrete operator value, but its new input contract and changed shortcut policy lack recorded maintainer acceptance.

Merge readiness

⛔ Blocked before merge - 3 items remain

Keep this PR open for maintainer product acceptance; the implementation is focused, with one small test-policy correction and no identified runtime defect.

Priority: P2
Reviewed head: 5acf92b89f9053fec747a802e3790822a5b4340d
Owner decision: Required. See Decision needed.

Decision needed

  • Question: Should OCE support trusted profile-file overrides and optional bundled seeding, with quick-start falling back to the first readable Preset?
  • Recommendation: Accept the bounded extension: Support the proposed inputs and named readable-starter fallback, retaining existing defaults and authorization.
  • Why: This adds operator inputs and changes the intentional default-codex-only shortcut policy; recorded reviews still leave acceptance to maintainers.

Before merge

  • Move the new PostgreSQL integration test into TypeScript (P3) - Root AGENTS.md requires newly added integration tests to use *.test.ts so the existing strict test typecheck includes them. This new *.test.mjs file falls outside tests/tsconfig.json's test-file inclusion. Convert it to erasable TypeScript and update its CI and documentation references; existing JavaScript suites can remain unchanged.
  • Await maintainer action - Resolve the recorded scanner-input qualification hold and outstanding CodeQL discussions before merging.
  • Resolve maintainer decision - Resolve the maintainer decision shown above before merge.

Findings

  • [P3] Move the new PostgreSQL integration test into TypeScript — tests/integration/postgres-preset-upgrade.test.mjs:19-20
Agent review details

How this fits together

The renderer converts trusted operator inputs into Helm and Installation configuration; the Console reads authorized Namespace Presets and applies their templates to the regular Agent form.

flowchart TB
  A[Operator profile and site inputs] --> B[Profile renderer]
  B --> C[Helm and Installation configuration]
  C --> D[Controller startup and Preset seeding]
  D --> E[Namespace Presets]
  E --> F[Authorized Console selection]
  F --> G[Editable Agent form]
Loading

Technical review

Best possible solution:

Accept or decline the bounded customization contract while keeping rendering, seeding and exact-resource authorization with their existing owners.

Do we have a high-confidence way to reproduce the issue?

Current main directly establishes the bundled-profile restriction, forced default seeding and default-codex-only shortcut; no target code was executed during this review.

Is this the best way to solve the issue?

The implementation extends existing owners without new platform machinery, preserves stock defaults and exact-resource reads, and clearly documents startup validation and cross-family DNS limits.

Full review comments:

  • [P3] Move the new PostgreSQL integration test into TypeScript — tests/integration/postgres-preset-upgrade.test.mjs:19-20
    Root AGENTS.md requires newly added integration tests to use *.test.ts so the existing strict test typecheck includes them. This new *.test.mjs file falls outside tests/tsconfig.json's test-file inclusion. Convert it to erasable TypeScript and update its CI and documentation references; existing JavaScript suites can remain unchanged.
    Confidence: 0.99

Overall correctness: patch is correct
Overall confidence: 0.91

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 7eea9145e14a.

Provenance checked

Testing

Proof path: shipped entry point.

Security

None.

Evidence

What I checked:

Likely related people:

  • kevinlin-openai: Raw commit ee48017 adds scripts/render-installation-profile.mjs:88 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: ee4801774d14; files: scripts/render-installation-profile.mjs)

Root-cause cluster

Relationship: fixed_by_candidate
Canonical: #2252
Summary: This PR implements the linked customization request, which remains open pending acceptance and landing.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Labels

Label changes:

  • add proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence.
  • add status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action.

Label justifications:

  • P2: This is a bounded operator improvement with functioning startup configuration and manual Preset selection alternatives.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action.
  • proof: sufficient: Contributor real behavior proof is sufficient.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence.

Rating scale

6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior.

Workflow

ClawSweeper edits this one comment on every review. Comment @clawsweeper re-review for a fresh review only. Repair and merge execution lanes are retired.

History

Review history (4 earlier review cycles)
  • reviewed 2026-10-12T19:08:35.974Z sha 2f94a9e :: needs real behavior proof before merge. :: [P2] [P2] Move the hosted PAT prerequisite outside the Codex-family branch
  • reviewed 2026-10-12T20:50:35.121Z sha 79ca12f :: needs real behavior proof before merge. :: none
  • reviewed 2026-10-13T12:24:43.409Z sha deef630 :: blocked before merge. :: none
  • reviewed 2026-10-13T13:00:04.798Z sha 775a7cf :: blocked before merge. :: none

Reviewed October 24, 2026, 11:17 AM ET / 15:17 UTC (Revision 5).

@miguelbranco80

miguelbranco80 commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor Author

Addressed the P2 diagnostic finding at 79ca12faec94069fc3a2f1e07f1a57bc3e313e1c. Hosted discovery prerequisites now follow the selected PluginDriver independently of profile family. The extended real CLI/production-loader regression failed on the reviewed head for the missing PAT requirement, then passed with the fix; it also covers the cross-family curated negative control.

Final runtime source passes 118 integration/conformance cases and 32 Console browser cases, with no skips. Updated Verification contains three native screenshots, an uncut 5.64-second browser video, actual renderer CLI output for hosted/curated custom profiles with disabled stock seeding, and the existing startup/saved-Preset preservation run. Media opens; the uploaded video plays through to the editable draft. The Console captures use the real Fastify test app with native IAM/OCC, in-memory state and substituted runtime dependencies; the limits are stated explicitly.

Two owner questions remain:

  1. Do maintainers approve the bounded profile override/seeding controls and readable-starter fallback, preserving stock default preference and exact-resource authorization?
  2. What specific before/after installation scenario is required for the upgrade proof? This change introduces no storage format, migration, or upgrade machinery changes. The supplied startup integration preserves edited/saved Presets when defaults are disabled, but is not an installed-system upgrade run.

No merge or auto-merge is requested. Upstream CI still needs its applicable maintainer workflow approval.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
Exact review queued.

Re-review progress:

@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. labels Oct 12, 2026
@miguelbranco80
miguelbranco80 marked this pull request as ready for review October 13, 2026 12:16
@miguelbranco80
miguelbranco80 requested a review from a team as a code owner October 13, 2026 12:16
@miguelbranco80

Copy link
Copy Markdown
Contributor Author

Updated the shared branch to deef630f4b9d6f476dc44376e7c21d7981c1d7dd through a normal merge of latest upstream main (c1bd65749), and marked this PR ready for review. Fork tracking PR #11 remains open and draft; neither PR was merged, and fork main/integration were untouched.

The requested PostgreSQL before/after scenario now passes from pinned before revision b195e54e9: real production bootstrap and authenticated HTTP save edited/custom Presets and non-default Configuration values; fresh candidate controller processes retain the same database and filesystem Configuration storage with unchanged stock inputs, then with seeding disabled. Resource IDs, templates, Configuration generations/values and Installation identity are preserved. A new ready Namespace receives no stock Presets after disabling defaults. The new test is registered in postgres-platform CI and also passed through ordinary CI preparation.

Verification contains the native PostgreSQL output/procedure, refreshed screenshots and an uncut 5.72-second Console video from the final head. All 119 focused profile/Preset cases and 32 Console browser cases pass without skips. Proof limits are explicit: Compute/unused Secret fixtures do not qualify Kubernetes or model execution. Maintainer product acceptance and applicable upstream CI remain pending.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
Exact review queued.

Re-review progress:

password: (await readFile(join(directory, "initial-admin-password"), "utf8")).trim(),
});
async function request(method, path, payload, expectedStatus = 200) {
const response = await fetch(`${endpoint}${path}`, {
Comment on lines +163 to +169
JSON.stringify({
installation,
namespaceId: namespace.id,
edited,
custom,
savedConfiguration,
}),
@clawsweeper clawsweeper Bot added proof: sufficient Contributor real behavior proof is sufficient. and removed status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Oct 13, 2026
@freeqaz

freeqaz commented Oct 13, 2026

Copy link
Copy Markdown
Collaborator

Free's clanker here (an AI agent working on Free's behalf). Review-only pass at 775a7cf. The renderer and Console changes read correctly to me. Locally tests/integration/profile-renderer.test.mjs passes 64/64 (Helm parity included) and the new quick-start browser case passes. One usability item:

The shortcut still calls itself "default" after it stops meaning default-codex. apps/controller/src/console/agents/presets.mjs:61 keeps the button label "Start with default Preset" and chooseHint (:59) keeps "Choose a Preset or start with the default Preset." while defaultId (:472-474) now falls back to the first readable Preset by name. Scenario: a Namespace holding only "Research teammate" and "Zulu starter"; a member clicks Start with default Preset and gets the "Research teammate" template, with nothing on the chooser saying which Preset the shortcut picked until the variable chooser or the form opens (the new browser test asserts that hint text in its absent case and then expects "Alpha Agent"). Suggestion: once the list arrives, name the pick in the button or hint, e.g. "Start with Research teammate" / "Quick-start uses Research teammate", and keep the "default" wording only when the pick is default-codex. docs/reference/presets.md "Plain console default" would follow.

For the record: merge-tree is clean against main and against #2320, #2322, #2329 and #2330 (the other open renderer refusals); the only textual overlap is docs/flows/agent-presets.md with the long-stale #906. CI has not run on this head yet (the fork workflows await approval).

@freeqaz

freeqaz commented Oct 20, 2026

Copy link
Copy Markdown
Collaborator

Free's clanker here (an AI agent working on Free's behalf).

One more review pass on head 17614d91. Nothing blocking, but it is a feature, so I'm flagging it for a maintainer decision.

What it changes

  • render-installation-profile.mjs takes a new operator input, --profile-file, and exposes presets.includeDefaults as a site input.
  • "Start with default Preset" no longer needs default-codex to be readable. It falls back to the first readable Preset by name. It still reads that exact Preset before applying it, and only from Presets the user can read.
  • No IAM, credential or migration changes.

Issues

  • Live DNS in a test (small, real): in tests/integration/profile-renderer.test.mjs, the ["openclaw", "codex-plugin", { catalogSource: "hosted" }] case renders without a codex input or the DNS fixture. The renderer therefore resolves the hosted catalog and auth hosts for real (render-installation-profile.mjs ~L1590 and ~L2271). It will fail on an offline runner or during a DNS blip. Passing the file's existing startDnsFixture server for that case fixes it.
  • No offline option for the openclaw family with hosted codex-plugin: codex.modelDiscoveryCidrs is refused as a codex-only input, so rendering always needs DNS. The docs don't say so.
  • Late failure on typos: a value like catalogSource: "hostd" renders ok: true and only fails at controller startup, after helm upgrade. The docs state this, but we generally prefer refusing bad input at render or preflight time.
  • The docs consolidation dropped some measured detail from installation-profiles.md and the rendering flow doc (CPU-limit startup measurements, memory planning).
  • Two CodeQL threads on tests/helpers/preset-upgrade-process.mjs look like false positives and need a maintainer to dismiss them.

Compatibility with the pending Credential Proxy work: one trivial conflict in the parallelFiles list of scripts/ci/test-suites/postgres-platform.json; keep both sides. No semantic overlap.

@freeqaz-openai flagging this one for your review.

@freeqaz

freeqaz commented Oct 24, 2026

Copy link
Copy Markdown
Collaborator

Free's clanker here (an AI agent working on Free's behalf).

Validation request on head 1946736a. This is a feature, so it needs a maintainer decision on scope before it lands.

What it does

  • scripts/render-installation-profile.mjs gets --profile-file, a closed-schema custom Installation profile. The family must match, the profile must name a bundled PluginDriver, unknown fields are refused, and a failure never falls back to defaults.
  • A new site input, presets.includeDefaults (default true), turns off seeding of the bundled Presets.
  • Console quick-start (apps/controller/src/console/agents/presets.mts) still prefers a readable default-codex. Otherwise it picks the first readable Preset by name (case-insensitive, ties broken on the exact name), names that Preset in the button and hint, and reads that exact resource before applying it.
  • New tests: tests/integration/postgres-preset-upgrade.test.mjs with tests/helpers/preset-upgrade-process.mjs (registered in scripts/ci/test-suites/postgres-platform.json), more profile-renderer.test.mjs cases, and more browser Preset cases. New doc: docs/guides/deploy/custom-installation-profiles.md.
  • No IAM, credential-custody or migration changes.

Since our last pass (17614d91): merges of main, the conflict fix after presets.mts moved to TypeScript, DNS-fixture isolation for the hosted profile-renderer cases (fixes the live-DNS issue we raised on 10-20), and docs trimming. The logic is unchanged apart from added types. One small difference: presets.mts:551 now uses presets.sort(...) where it used toSorted. It sorts in place, but presets is a fresh array from value.map(...) just above, so this is harmless.

What to validate

  1. Render with --profile-file three times: a good file, a file with an unknown field (must be refused), and a family mismatch (must be refused).
  2. Render presets.includeDefaults: false against an existing install and check that saved Presets are kept. tests/integration/postgres-preset-upgrade.test.mjs covers this on PostgreSQL.
  3. In the Console, open a Namespace that has only custom Presets. The starter should be named, and a member should only get Presets they can read.

Still open from earlier reviews (none blocking)

  • With the openclaw family and hosted codex-plugin there is no offline render path. codex.modelDiscoveryCidrs is accepted only for the codex profile (render-installation-profile.mjs:1747-1749), so rendering needs DNS.
  • A typo such as catalogSource: "hostd" still renders fine and fails only at controller startup. That is a late failure, and we prefer failing early.
  • Two CodeQL threads on tests/helpers/preset-upgrade-process.mjs look like false positives in a test helper. They need a maintainer to dismiss them.
  • The ClawSweeper input-safety hold needs maintainer handling.

CI and conflicts: CI Required and the other required checks pass on this head. Review decision: REVIEW_REQUIRED. GitHub reports a conflict with current main in scripts/ci/test-suites/postgres-platform.json only, in two hunks (parallelFiles and the expected-tests entries), because main added the Credential Proxy and standing-approval Postgres tests there. Resolve it by keeping both sides. Every other file auto-merges.

@freeqaz-openai flagging this one for your validation.

@miguelbranco80

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

The last exact-head attempt stopped at the input scanner. Local reproduction with TruffleHog 3.97.4 identified the same synthetic test URL in the old base blob and removal patch. Both current endpoints now construct that URL at runtime. Scanning all 39 unique base/head blobs across this PR's 21 changed files, plus raw diff and patch, returned zero findings; historical positive controls reproduced. Credential verification was disabled. This is source-input evidence, not a claim that the complete hosted gate passed. No scanner policy or suppression changed.

The previously reported live-DNS test issue is also fixed with the existing local DNS fixture. Required CI passes on this head. Product acceptance, both unresolved CodeQL discussions, and existing visual/runtime qualification limits remain outstanding; this requests review, not merge.

@clawsweeper

clawsweeper Bot commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
Exact review queued.

Re-review progress:

@clawsweeper clawsweeper Bot added proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed clawsweeper:intake:feature Preliminary submission classification; full source review pending. labels Oct 24, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P2 Normal priority bug or improvement with limited blast radius. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. proof: sufficient Contributor real behavior proof is sufficient. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support trusted Installation profile overrides and custom-only Preset quick-start

4 participants