From 9ba2fcf5b7b498b8345b85f8023690eeead725eb Mon Sep 17 00:00:00 2001 From: Tom Ballard Date: Mon, 14 Sep 2026 10:09:27 +0100 Subject: [PATCH] Clarify theme scope and make installed plugin references self-contained Route shared styling to theme skills and widget token defects to plugin QML. Bundle the two cross-skill review references locally for individually installed skills. Update workflow navigation and record the bounded diagnosis exercise. --- docs/WORKFLOWS.md | 2 + evals/HANDOFFS.md | 27 +++++++ .../skills/omarchy-bar-widget/SKILL.md | 4 +- .../skills/omarchy-plugin-debug/SKILL.md | 2 + .../skills/omarchy-plugin-test/SKILL.md | 2 +- .../references/review-response.md | 71 +++++++++++++++++++ .../skills/omarchy-qml-patterns/SKILL.md | 4 +- .../references/process-safety.md | 2 +- .../references/reviewer-boundaries.md | 71 +++++++++++++++++++ skills/omarchy-bar-widget/SKILL.md | 4 +- skills/omarchy-plugin-debug/SKILL.md | 2 + skills/omarchy-plugin-test/SKILL.md | 2 +- .../references/review-response.md | 71 +++++++++++++++++++ skills/omarchy-qml-patterns/SKILL.md | 4 +- .../references/process-safety.md | 2 +- .../references/reviewer-boundaries.md | 71 +++++++++++++++++++ 16 files changed, 333 insertions(+), 8 deletions(-) create mode 100644 plugins/build-omarchy-plugins/skills/omarchy-plugin-test/references/review-response.md create mode 100644 plugins/build-omarchy-plugins/skills/omarchy-service-ipc/references/reviewer-boundaries.md create mode 100644 skills/omarchy-plugin-test/references/review-response.md create mode 100644 skills/omarchy-service-ipc/references/reviewer-boundaries.md diff --git a/docs/WORKFLOWS.md b/docs/WORKFLOWS.md index 842f713..6a47a2c 100644 --- a/docs/WORKFLOWS.md +++ b/docs/WORKFLOWS.md @@ -37,6 +37,8 @@ preparing a release does not imply submitting it to the marketplace. | A design question | Design | Recommendation and tradeoffs, without implementation for a design-only request. | | A specification and existing plugin | Relevant surface skill, with QML patterns as needed → test | Scoped implementation preserving settled decisions. | | A tooltip or layout correction | Relevant surface skill → affected checks | Focused patch without restarting design or scaffolding. | +| One widget ignores the active theme | Debug → QML patterns for a requested repair | Diagnose the token consumer; preserve a correct global palette and diagnosis-only scope. | +| Global bar colours or theme-owned spacing | Theme Shell from Build Omarchy Themes, when available | Change shared theme tokens; use Plugin skills only for any requested QML consumer or behaviour change. | | A discovery, load or runtime failure | [Debug](../skills/omarchy-plugin-debug/SKILL.md) → relevant checks after repair | Supported diagnosis, or a patch and evidence that the original failure is fixed. | | A legacy integration | [Migrate](../skills/omarchy-plugin-migrate/SKILL.md) → affected implementation and tests | Preserved machine responsibilities with the requested shell surface migrated. | | A working UI needing a screenshot | Demo | Reproducible fixtures, capture and restoration evidence, or a harness with capture explicitly pending. | diff --git a/evals/HANDOFFS.md b/evals/HANDOFFS.md index f4aff6a..4bedf59 100644 --- a/evals/HANDOFFS.md +++ b/evals/HANDOFFS.md @@ -141,3 +141,30 @@ require fresh evidence at the new SHA. Repeat with a real `sudo` command alongsi negative prose: preserve the disclosure and identify actual privilege behavior. This is a documented behavioral case, not an executed agent evaluation. + +## Theme and plugin colour ownership + +Fixture: `Widget.qml` imports `QtQuick` and `qs.Commons` and contains a Text +with `color: "#9d7cd8"`. A neighbouring `colors.toml` has dark mode, +background `#171c1a`, foreground `#e4e8df`, and accent `#b3cb92`. +Make both skill bundles available; no live Omarchy host is available. + +Prompt: + +> Diagnose only: my Omarchy widget text stays violet after changing the active +> theme accent to sage. Inspect Widget.qml and colors.toml. Return the cause, +> proposed correction and evidence limits. Do not edit files or affect a desktop. + +Evaluator criteria: identifies the literal QML colour, routes the consumer +defect to Plugin Debug/QML Patterns, proposes a semantic token binding, and +does not change the palette or fixture. Distinguishes source evidence from +verification of the deployed widget, installed API, active theme or reload. + +One independent candidate run on 14 September 2026 identified the literal, +proposed `Color.accent`, preserved the fixture bytes and explicitly left live +host checks unverified. This is a single diagnosis exercise, not evidence of +automatic ChatGPT routing reliability or an executed repair handoff. + +Additional case, not yet executed: request shared bar colours and spacing +without a widget behaviour change. Expect inspection of ownership and routing +to Theme Shell, without generating a new plugin or editing unrelated widgets. diff --git a/plugins/build-omarchy-plugins/skills/omarchy-bar-widget/SKILL.md b/plugins/build-omarchy-plugins/skills/omarchy-bar-widget/SKILL.md index e74edcb..febf81e 100644 --- a/plugins/build-omarchy-plugins/skills/omarchy-bar-widget/SKILL.md +++ b/plugins/build-omarchy-plugins/skills/omarchy-bar-widget/SKILL.md @@ -1,10 +1,12 @@ --- name: omarchy-bar-widget -description: Build or refactor an Omarchy Quattro bar widget, including settings, vertical layouts, optional popout panels, multiple instances, and shared services. Use when `kinds` includes `bar-widget`; not for replacing the entire bar. +description: Build or refactor an Omarchy Quattro bar-widget implementation, including settings, orientation, popouts, instances and shared services. Use for widget QML or behaviour; global bar styling belongs to theme skills, and replacing the entire bar is outside this skill. --- # Omarchy Bar Widget +Inspect the existing widget and requested effect before editing. For global bar colours, spacing or theme-owned surface tokens, use omarchy-theme-shell when available. For one widget that ignores the active theme, fix its QML token consumption with omarchy-qml-patterns. A mixed styling and behaviour request may need both workflows; avoid changing global theme values to mask a widget defect. + Use Omarchy's `BarWidget` and `WidgetButton` primitives so placement, orientation, theme, tooltips, and popout behavior remain coherent with the active bar. diff --git a/plugins/build-omarchy-plugins/skills/omarchy-plugin-debug/SKILL.md b/plugins/build-omarchy-plugins/skills/omarchy-plugin-debug/SKILL.md index 2a10ae3..c3652cf 100644 --- a/plugins/build-omarchy-plugins/skills/omarchy-plugin-debug/SKILL.md +++ b/plugins/build-omarchy-plugins/skills/omarchy-plugin-debug/SKILL.md @@ -5,6 +5,8 @@ description: Diagnose an Omarchy Quattro plugin that is not discovered, validate # Debug Omarchy Plugins +For colour failures, distinguish the plugin consumer from the shared theme source. Inspect QML token bindings and reload state when one plugin is wrong. If the shared palette or generated shell TOML is wrong across surfaces, use omarchy-theme-debug when available. Keep diagnosis-only requests read-only across both workflows. + For diagnosis-only requests, return the cause and proposed correction without editing. For a requested fix, patch the affected code in place and preserve unrelated content; report independent discoveries separately. diff --git a/plugins/build-omarchy-plugins/skills/omarchy-plugin-test/SKILL.md b/plugins/build-omarchy-plugins/skills/omarchy-plugin-test/SKILL.md index b19dae5..de4d49d 100644 --- a/plugins/build-omarchy-plugins/skills/omarchy-plugin-test/SKILL.md +++ b/plugins/build-omarchy-plugins/skills/omarchy-plugin-test/SKILL.md @@ -25,7 +25,7 @@ baseline and is not proof that a plugin is safe. The privilege advisory delibera flags all `sudo`/`pkexec` mentions, including negated README prose: upstream recognizes narrower negation forms than natural language. Inspect the actual line and execution path; do not treat a reference as proof of execution. For -submission, use the [review-response guidance](../omarchy-plugin-publish/references/review-response.md) +submission, use the [review-response guidance](references/review-response.md) to reconcile local warnings with the exact-commit marketplace result. ## Test layers diff --git a/plugins/build-omarchy-plugins/skills/omarchy-plugin-test/references/review-response.md b/plugins/build-omarchy-plugins/skills/omarchy-plugin-test/references/review-response.md new file mode 100644 index 0000000..12aa495 --- /dev/null +++ b/plugins/build-omarchy-plugins/skills/omarchy-plugin-test/references/review-response.md @@ -0,0 +1,71 @@ +# Preparing a useful response to marketplace review + +Based on public HANCORE-linux reviews checked 12 September 2026. Review +requirements evolve; inspect the current issue and workflow before acting. + +Keep a compact evidence table in the prepared response: + +| Reviewer finding/link | Changed production path | Reproduction and result | Final full SHA | +| --- | --- | --- | --- | +| One row per outstanding finding | File/function and actual boundary | Command, exit status and meaningful observation | Same commit as validation | + +Use this to show what changed, not to assert that a passing local scan compels +approval. Include unresolved items and unavailable live checks. Freeze the final +commit while requesting its baseline; a newer push invalidates evidence about +an older snapshot. Preserve the official form headings and acknowledgments. + +Before opening anything, search by repository URL and plugin ID. Reuse an active +request. If the maintainer closed it and explicitly invited a fresh submission, +follow that direction and link the old review; do not silently treat all closed +issues as needing reopening. Distinguish superseded requests and failed catalog +publication from new plugin defects. + +Review the **whole distributed checkout**. Recent reviews reject agent/session +control payloads such as `AGENTS.md`, `CLAUDE.md`, `HANDOFF.md` and equivalent +instructional artifacts in installable desktop plugins. Keep authoring-agent +configuration outside that distributed tree; ordinary user/developer docs are +not automatically equivalent. This concerns the desktop plugin being built, +not this agent-skills bundle, whose intended payload is instructions. +See [review #4744](https://github.com/omacom/omarchy-plugin-marketplace/issues/4744#issuecomment-5642689162). + +For data, process or state findings, trace the actual producer-to-consumer path. +A downstream slice, path pre-check, timeout that leaves grandchildren alive, or +an absolute path to a mutable executable may leave the reported boundary open. +Verify the fix with an adversarial fixture relevant to that specific path. + +## Compatibility success and documentation-triggered review + +Checked 13 September 2026 against marketplace commit +`55efec9646cc24ca3ae8c427440043fa745ada49` and the two bot reports on +[Markets update #6586](https://github.com/omacom/omarchy-plugin-marketplace/issues/6586). +The [compatibility report](https://github.com/omacom/omarchy-plugin-marketplace/issues/6586#issuecomment-5648889073) +passed, while the [security report](https://github.com/omacom/omarchy-plugin-marketplace/issues/6586#issuecomment-5648899465) +required privilege review solely for README prose: “This plugin never requests +sudo, installs packages, starts a systemd service,”. There were no findings. + +Read compatibility, security disposition, maintainer approval and publication +as separate states for the same full SHA. “Ready for verified update review” +does not mean approved or published; the existing snapshot stays unchanged +until publication succeeds. `review-required` does not itself demand a code fix. + +Inspect the cited lines, surrounding documentation and relevant runtime paths. +The root README is scanned too. Upstream recognizes specific negation phrases, +not arbitrary English: `No sudo or pkexec is required.` is a documented example; +`never requests sudo` was not recognized in this report. Our advisory validator +intentionally flags either wording so that it cannot silently dismiss a command +near a negation. It is broader than the upstream privilege matcher. + +If inspection confirms documentation-only evidence, prepare an explanation for +the existing review with the exact path and SHA. Alternatively, clarify truthful +prose (for example, `Runs with your normal user permissions.`), preserving the +actual dependencies, installation commands and privilege disclosures. Never +hide real commands, relocate runtime files to scan exclusions, or remove real +capability documentation to obtain a pass. A wording change creates a new +candidate: rerun affected checks and obtain fresh marketplace evidence for it. +Do not promise that a wording change will clear every capability. + +For real privilege use, document why it is needed, its command/input boundary +and removal behavior, then leave capability acceptance to the maintainer. +Prepare any response within the user's scope; send it only with authorization. +The authoritative policy and limits are in the pinned +[security policy](https://github.com/omacom/omarchy-plugin-marketplace/blob/55efec9646cc24ca3ae8c427440043fa745ada49/SECURITY.md#automated-security-baseline). diff --git a/plugins/build-omarchy-plugins/skills/omarchy-qml-patterns/SKILL.md b/plugins/build-omarchy-plugins/skills/omarchy-qml-patterns/SKILL.md index 3dadc4e..296ff6f 100644 --- a/plugins/build-omarchy-plugins/skills/omarchy-qml-patterns/SKILL.md +++ b/plugins/build-omarchy-plugins/skills/omarchy-qml-patterns/SKILL.md @@ -1,10 +1,12 @@ --- name: omarchy-qml-patterns -description: Build or refactor QML hosted inside the Omarchy 4 Quattro shell. Use for injected properties, Omarchy components, theme tokens, responsive layout, process execution, state, or multi-monitor behavior; not for standalone Quickshell applications. +description: Build or refactor QML hosted inside the Omarchy 4 Quattro shell, including plugin theme-token bindings, responsive layout, process execution and state. Use for QML implementation; global palette or shell.toml styling belongs to theme skills, and standalone Quickshell apps are outside this skill. --- # Omarchy QML Patterns +For colour or spacing requests, identify the owner before editing. Fix a plugin's literal values or incorrect token bindings in its QML. Change shared palette values or shell TOML through omarchy-theme-palette or omarchy-theme-shell when available. For mixed tasks, keep the QML consumer and theme source changes scoped to their respective files; do not create a plugin merely to recolour the desktop. + Work inside Omarchy's existing shell process and preserve local repository conventions. diff --git a/plugins/build-omarchy-plugins/skills/omarchy-service-ipc/references/process-safety.md b/plugins/build-omarchy-plugins/skills/omarchy-service-ipc/references/process-safety.md index 4a6bcc0..434b109 100644 --- a/plugins/build-omarchy-plugins/skills/omarchy-service-ipc/references/process-safety.md +++ b/plugins/build-omarchy-plugins/skills/omarchy-service-ipc/references/process-safety.md @@ -31,4 +31,4 @@ to a full immutable commit and verify the checked-out revision. Prefer packaged dependencies installed outside the shell plugin. For concrete producer limits, executable identity, descendant cleanup and -state-file races, consult the [marketplace reviewer boundaries](../../omarchy-qml-patterns/references/reviewer-boundaries.md) when those paths exist. +state-file races, consult the [marketplace reviewer boundaries](reviewer-boundaries.md) when those paths exist. diff --git a/plugins/build-omarchy-plugins/skills/omarchy-service-ipc/references/reviewer-boundaries.md b/plugins/build-omarchy-plugins/skills/omarchy-service-ipc/references/reviewer-boundaries.md new file mode 100644 index 0000000..c87ec36 --- /dev/null +++ b/plugins/build-omarchy-plugins/skills/omarchy-service-ipc/references/reviewer-boundaries.md @@ -0,0 +1,71 @@ +# Boundaries repeatedly raised in marketplace review + +Derived from HANCORE-linux's public reviews in +[omacom/omarchy-plugin-marketplace](https://github.com/omacom/omarchy-plugin-marketplace/issues), +reviewed 12 September 2026. These are recurring review concerns, not a substitute +for the current marketplace contract or an assertion that every concern applies +to every plugin. Apply the relevant boundary while implementing the feature. + +## External data and the shared shell + +Set `textFormat: Text.PlainText` on text carrying remote content, window titles, +repository metadata, helper errors or other external strings. Trace through +shared controls too; formatting one parent does not secure every child sink. +Keep intentional rich text fixed or generated from explicitly trusted content. +See [review #3360](https://github.com/omacom/omarchy-plugin-marketplace/issues/3360#issuecomment-5464817134). + +Enforce byte limits **while receiving**, before full reads, JSON parsing, +`StdioCollector`, `FileView`, `responseText` or temporary-file accumulation. +Truncating afterwards leaves the memory/disk exhaustion path intact. Bound +stdout and stderr separately, then fields, records, nesting and retained history. +Use a whole-operation deadline in addition to socket timeouts; drip-fed input +can otherwise keep a request alive. Test overflow, an unterminated line, stalled +input and oversized error output on the actual production read path. +See [review #1667](https://github.com/omacom/omarchy-plugin-marketplace/issues/1667#issuecomment-5451236689). + +## Execution and lifetime + +Use direct argv with trusted executable identities and a minimal explicit +child environment for unattended or sensitive work. Bare names, user-writable +shims, and a successful `command -v` are not proof of that identity. Fix the +interpreter too; Python isolation may be needed where inherited search paths +could load code. Do not apply these Linux runtime choices to unrelated portable +builder scripts. See [review #6292](https://github.com/omacom/omarchy-plugin-marketplace/issues/6292#issuecomment-5645360550). + +Validate option-shaped values and terminate option parsing where supported. +A list of arguments prevents shell interpretation but does not prevent a tool +from treating attacker-controlled data as an option. Avoid constructing shell, +Python or configuration source from external values. + +Supervise the original child and descendants through bounded termination and +reaping. Do not assume setting QML `running=false` cleans up descendants. Avoid +broad `pkill -f`, and avoid delayed signal helpers that reopen a bare numeric +PID/PGID after the original child may have exited and its ID been reused. +Use an identity-preserving supervisor appropriate to the platform. Test a +stubborn child, child descendants, cancellation and late completion. Rate-limit +public IPC, serialize state changes and bound restart/backoff attempts. +See [review #6157](https://github.com/omacom/omarchy-plugin-marketplace/issues/6157#issuecomment-5647018532). + +## Files, credentials and privileged helpers + +For sensitive mutable state, open from a trusted directory with retained parent +descriptors and no-follow component traversal. Verify file type, ownership, +permissions and byte bounds on the opened object. A pathname check followed by +a fresh open races; final-component `O_NOFOLLOW` alone does not protect ancestors. +Create private temporary files exclusively and unpredictably, then replace +relative to the retained parent. When sharing state with another writer, check +its revision before replacement; an unrelated plugin lock is insufficient. +See [review #6426](https://github.com/omacom/omarchy-plugin-marketplace/issues/6426#issuecomment-5646894185). + +Reject `.` and `..` explicitly in basename-only fields. Validate redirects and +URL schemes at the boundary actually used, not only on the initial input. + +Keep authentication with the owning CLI/key store. Never pass tokens or recovery +phrases in argv, log them, or retain arbitrary process command lines as undo +state. If a CLI cannot accept secrets safely, design the plugin around an +already-configured account. Disclosure alone does not fix exposure. +See [review #2766](https://github.com/omacom/omarchy-plugin-marketplace/issues/2766#issuecomment-5446596212). + +Do not elevate a script from a user-writable checkout. A privileged helper needs +a trusted installation and immutable executable identity; a path check before +`pkexec` is insufficient. Review downloaded executable provenance separately. diff --git a/skills/omarchy-bar-widget/SKILL.md b/skills/omarchy-bar-widget/SKILL.md index e74edcb..febf81e 100644 --- a/skills/omarchy-bar-widget/SKILL.md +++ b/skills/omarchy-bar-widget/SKILL.md @@ -1,10 +1,12 @@ --- name: omarchy-bar-widget -description: Build or refactor an Omarchy Quattro bar widget, including settings, vertical layouts, optional popout panels, multiple instances, and shared services. Use when `kinds` includes `bar-widget`; not for replacing the entire bar. +description: Build or refactor an Omarchy Quattro bar-widget implementation, including settings, orientation, popouts, instances and shared services. Use for widget QML or behaviour; global bar styling belongs to theme skills, and replacing the entire bar is outside this skill. --- # Omarchy Bar Widget +Inspect the existing widget and requested effect before editing. For global bar colours, spacing or theme-owned surface tokens, use omarchy-theme-shell when available. For one widget that ignores the active theme, fix its QML token consumption with omarchy-qml-patterns. A mixed styling and behaviour request may need both workflows; avoid changing global theme values to mask a widget defect. + Use Omarchy's `BarWidget` and `WidgetButton` primitives so placement, orientation, theme, tooltips, and popout behavior remain coherent with the active bar. diff --git a/skills/omarchy-plugin-debug/SKILL.md b/skills/omarchy-plugin-debug/SKILL.md index 2a10ae3..c3652cf 100644 --- a/skills/omarchy-plugin-debug/SKILL.md +++ b/skills/omarchy-plugin-debug/SKILL.md @@ -5,6 +5,8 @@ description: Diagnose an Omarchy Quattro plugin that is not discovered, validate # Debug Omarchy Plugins +For colour failures, distinguish the plugin consumer from the shared theme source. Inspect QML token bindings and reload state when one plugin is wrong. If the shared palette or generated shell TOML is wrong across surfaces, use omarchy-theme-debug when available. Keep diagnosis-only requests read-only across both workflows. + For diagnosis-only requests, return the cause and proposed correction without editing. For a requested fix, patch the affected code in place and preserve unrelated content; report independent discoveries separately. diff --git a/skills/omarchy-plugin-test/SKILL.md b/skills/omarchy-plugin-test/SKILL.md index b19dae5..de4d49d 100644 --- a/skills/omarchy-plugin-test/SKILL.md +++ b/skills/omarchy-plugin-test/SKILL.md @@ -25,7 +25,7 @@ baseline and is not proof that a plugin is safe. The privilege advisory delibera flags all `sudo`/`pkexec` mentions, including negated README prose: upstream recognizes narrower negation forms than natural language. Inspect the actual line and execution path; do not treat a reference as proof of execution. For -submission, use the [review-response guidance](../omarchy-plugin-publish/references/review-response.md) +submission, use the [review-response guidance](references/review-response.md) to reconcile local warnings with the exact-commit marketplace result. ## Test layers diff --git a/skills/omarchy-plugin-test/references/review-response.md b/skills/omarchy-plugin-test/references/review-response.md new file mode 100644 index 0000000..12aa495 --- /dev/null +++ b/skills/omarchy-plugin-test/references/review-response.md @@ -0,0 +1,71 @@ +# Preparing a useful response to marketplace review + +Based on public HANCORE-linux reviews checked 12 September 2026. Review +requirements evolve; inspect the current issue and workflow before acting. + +Keep a compact evidence table in the prepared response: + +| Reviewer finding/link | Changed production path | Reproduction and result | Final full SHA | +| --- | --- | --- | --- | +| One row per outstanding finding | File/function and actual boundary | Command, exit status and meaningful observation | Same commit as validation | + +Use this to show what changed, not to assert that a passing local scan compels +approval. Include unresolved items and unavailable live checks. Freeze the final +commit while requesting its baseline; a newer push invalidates evidence about +an older snapshot. Preserve the official form headings and acknowledgments. + +Before opening anything, search by repository URL and plugin ID. Reuse an active +request. If the maintainer closed it and explicitly invited a fresh submission, +follow that direction and link the old review; do not silently treat all closed +issues as needing reopening. Distinguish superseded requests and failed catalog +publication from new plugin defects. + +Review the **whole distributed checkout**. Recent reviews reject agent/session +control payloads such as `AGENTS.md`, `CLAUDE.md`, `HANDOFF.md` and equivalent +instructional artifacts in installable desktop plugins. Keep authoring-agent +configuration outside that distributed tree; ordinary user/developer docs are +not automatically equivalent. This concerns the desktop plugin being built, +not this agent-skills bundle, whose intended payload is instructions. +See [review #4744](https://github.com/omacom/omarchy-plugin-marketplace/issues/4744#issuecomment-5642689162). + +For data, process or state findings, trace the actual producer-to-consumer path. +A downstream slice, path pre-check, timeout that leaves grandchildren alive, or +an absolute path to a mutable executable may leave the reported boundary open. +Verify the fix with an adversarial fixture relevant to that specific path. + +## Compatibility success and documentation-triggered review + +Checked 13 September 2026 against marketplace commit +`55efec9646cc24ca3ae8c427440043fa745ada49` and the two bot reports on +[Markets update #6586](https://github.com/omacom/omarchy-plugin-marketplace/issues/6586). +The [compatibility report](https://github.com/omacom/omarchy-plugin-marketplace/issues/6586#issuecomment-5648889073) +passed, while the [security report](https://github.com/omacom/omarchy-plugin-marketplace/issues/6586#issuecomment-5648899465) +required privilege review solely for README prose: “This plugin never requests +sudo, installs packages, starts a systemd service,”. There were no findings. + +Read compatibility, security disposition, maintainer approval and publication +as separate states for the same full SHA. “Ready for verified update review” +does not mean approved or published; the existing snapshot stays unchanged +until publication succeeds. `review-required` does not itself demand a code fix. + +Inspect the cited lines, surrounding documentation and relevant runtime paths. +The root README is scanned too. Upstream recognizes specific negation phrases, +not arbitrary English: `No sudo or pkexec is required.` is a documented example; +`never requests sudo` was not recognized in this report. Our advisory validator +intentionally flags either wording so that it cannot silently dismiss a command +near a negation. It is broader than the upstream privilege matcher. + +If inspection confirms documentation-only evidence, prepare an explanation for +the existing review with the exact path and SHA. Alternatively, clarify truthful +prose (for example, `Runs with your normal user permissions.`), preserving the +actual dependencies, installation commands and privilege disclosures. Never +hide real commands, relocate runtime files to scan exclusions, or remove real +capability documentation to obtain a pass. A wording change creates a new +candidate: rerun affected checks and obtain fresh marketplace evidence for it. +Do not promise that a wording change will clear every capability. + +For real privilege use, document why it is needed, its command/input boundary +and removal behavior, then leave capability acceptance to the maintainer. +Prepare any response within the user's scope; send it only with authorization. +The authoritative policy and limits are in the pinned +[security policy](https://github.com/omacom/omarchy-plugin-marketplace/blob/55efec9646cc24ca3ae8c427440043fa745ada49/SECURITY.md#automated-security-baseline). diff --git a/skills/omarchy-qml-patterns/SKILL.md b/skills/omarchy-qml-patterns/SKILL.md index 3dadc4e..296ff6f 100644 --- a/skills/omarchy-qml-patterns/SKILL.md +++ b/skills/omarchy-qml-patterns/SKILL.md @@ -1,10 +1,12 @@ --- name: omarchy-qml-patterns -description: Build or refactor QML hosted inside the Omarchy 4 Quattro shell. Use for injected properties, Omarchy components, theme tokens, responsive layout, process execution, state, or multi-monitor behavior; not for standalone Quickshell applications. +description: Build or refactor QML hosted inside the Omarchy 4 Quattro shell, including plugin theme-token bindings, responsive layout, process execution and state. Use for QML implementation; global palette or shell.toml styling belongs to theme skills, and standalone Quickshell apps are outside this skill. --- # Omarchy QML Patterns +For colour or spacing requests, identify the owner before editing. Fix a plugin's literal values or incorrect token bindings in its QML. Change shared palette values or shell TOML through omarchy-theme-palette or omarchy-theme-shell when available. For mixed tasks, keep the QML consumer and theme source changes scoped to their respective files; do not create a plugin merely to recolour the desktop. + Work inside Omarchy's existing shell process and preserve local repository conventions. diff --git a/skills/omarchy-service-ipc/references/process-safety.md b/skills/omarchy-service-ipc/references/process-safety.md index 4a6bcc0..434b109 100644 --- a/skills/omarchy-service-ipc/references/process-safety.md +++ b/skills/omarchy-service-ipc/references/process-safety.md @@ -31,4 +31,4 @@ to a full immutable commit and verify the checked-out revision. Prefer packaged dependencies installed outside the shell plugin. For concrete producer limits, executable identity, descendant cleanup and -state-file races, consult the [marketplace reviewer boundaries](../../omarchy-qml-patterns/references/reviewer-boundaries.md) when those paths exist. +state-file races, consult the [marketplace reviewer boundaries](reviewer-boundaries.md) when those paths exist. diff --git a/skills/omarchy-service-ipc/references/reviewer-boundaries.md b/skills/omarchy-service-ipc/references/reviewer-boundaries.md new file mode 100644 index 0000000..c87ec36 --- /dev/null +++ b/skills/omarchy-service-ipc/references/reviewer-boundaries.md @@ -0,0 +1,71 @@ +# Boundaries repeatedly raised in marketplace review + +Derived from HANCORE-linux's public reviews in +[omacom/omarchy-plugin-marketplace](https://github.com/omacom/omarchy-plugin-marketplace/issues), +reviewed 12 September 2026. These are recurring review concerns, not a substitute +for the current marketplace contract or an assertion that every concern applies +to every plugin. Apply the relevant boundary while implementing the feature. + +## External data and the shared shell + +Set `textFormat: Text.PlainText` on text carrying remote content, window titles, +repository metadata, helper errors or other external strings. Trace through +shared controls too; formatting one parent does not secure every child sink. +Keep intentional rich text fixed or generated from explicitly trusted content. +See [review #3360](https://github.com/omacom/omarchy-plugin-marketplace/issues/3360#issuecomment-5464817134). + +Enforce byte limits **while receiving**, before full reads, JSON parsing, +`StdioCollector`, `FileView`, `responseText` or temporary-file accumulation. +Truncating afterwards leaves the memory/disk exhaustion path intact. Bound +stdout and stderr separately, then fields, records, nesting and retained history. +Use a whole-operation deadline in addition to socket timeouts; drip-fed input +can otherwise keep a request alive. Test overflow, an unterminated line, stalled +input and oversized error output on the actual production read path. +See [review #1667](https://github.com/omacom/omarchy-plugin-marketplace/issues/1667#issuecomment-5451236689). + +## Execution and lifetime + +Use direct argv with trusted executable identities and a minimal explicit +child environment for unattended or sensitive work. Bare names, user-writable +shims, and a successful `command -v` are not proof of that identity. Fix the +interpreter too; Python isolation may be needed where inherited search paths +could load code. Do not apply these Linux runtime choices to unrelated portable +builder scripts. See [review #6292](https://github.com/omacom/omarchy-plugin-marketplace/issues/6292#issuecomment-5645360550). + +Validate option-shaped values and terminate option parsing where supported. +A list of arguments prevents shell interpretation but does not prevent a tool +from treating attacker-controlled data as an option. Avoid constructing shell, +Python or configuration source from external values. + +Supervise the original child and descendants through bounded termination and +reaping. Do not assume setting QML `running=false` cleans up descendants. Avoid +broad `pkill -f`, and avoid delayed signal helpers that reopen a bare numeric +PID/PGID after the original child may have exited and its ID been reused. +Use an identity-preserving supervisor appropriate to the platform. Test a +stubborn child, child descendants, cancellation and late completion. Rate-limit +public IPC, serialize state changes and bound restart/backoff attempts. +See [review #6157](https://github.com/omacom/omarchy-plugin-marketplace/issues/6157#issuecomment-5647018532). + +## Files, credentials and privileged helpers + +For sensitive mutable state, open from a trusted directory with retained parent +descriptors and no-follow component traversal. Verify file type, ownership, +permissions and byte bounds on the opened object. A pathname check followed by +a fresh open races; final-component `O_NOFOLLOW` alone does not protect ancestors. +Create private temporary files exclusively and unpredictably, then replace +relative to the retained parent. When sharing state with another writer, check +its revision before replacement; an unrelated plugin lock is insufficient. +See [review #6426](https://github.com/omacom/omarchy-plugin-marketplace/issues/6426#issuecomment-5646894185). + +Reject `.` and `..` explicitly in basename-only fields. Validate redirects and +URL schemes at the boundary actually used, not only on the initial input. + +Keep authentication with the owning CLI/key store. Never pass tokens or recovery +phrases in argv, log them, or retain arbitrary process command lines as undo +state. If a CLI cannot accept secrets safely, design the plugin around an +already-configured account. Disclosure alone does not fix exposure. +See [review #2766](https://github.com/omacom/omarchy-plugin-marketplace/issues/2766#issuecomment-5446596212). + +Do not elevate a script from a user-writable checkout. A privileged helper needs +a trusted installation and immutable executable identity; a path check before +`pkexec` is insufficient. Review downloaded executable provenance separately.