Skip to content

fix(qt-guidelines): qmake is forbidden as a build system, not as a query - #51

Merged
UnbreakableMJ merged 1 commit into
mainfrom
fix/qt-guidelines-qmake-query-only
Aug 28, 2026
Merged

fix(qt-guidelines): qmake is forbidden as a build system, not as a query#51
UnbreakableMJ merged 1 commit into
mainfrom
fix/qt-guidelines-qmake-query-only

Conversation

@UnbreakableMJ

Copy link
Copy Markdown
Contributor

Applying spacecraft-qt-guidelines to Majestic C1 (Qt 6.11 + CXX-Qt 0.9.1 on NixOS) hit a rule that is wrong as written:

CMake shape: … never qmake in new projects. — SKILL.md:70
Never introduce qmake into a new project. — Spacecraft_Qt_Cpp_Guidelines.md:281

A compliant reading of that forbids the one thing that makes this skill's own preferred path — Rust behind CXX-Qt — build on the house platform.

What actually broke

Not a Qt 6.11 API incompatibility. cxx-qt-build locates Qt by querying qmake and assumes a vendor-SDK layout: QtBase and QtDeclarative under one prefix. Nix gives each module its own immutable output, so discovery failed on a missing Qt6Qml.prl. Combining the outputs then exposed a second split — libGLX/libOpenGL live in libglvnd, not in any Qt output.

Both are packaging mismatches. Qt 6.11 itself built, linked, and passed the sanitizer and package gates.

The change

  • SKILL.md — the prohibition is now scoped to qmake as the build system; querying it is stated as a different act and permitted. The toolchain line records Qt 6.11 as validated (built + sanitizer + package gates against CXX-Qt 0.9.1) rather than merely "current".
  • Spacecraft_Qt_Rust_Guidelines.md — new §2.1 Qt Discovery on Nix: the combined qt6.env "<name>-qt" [ qt6.qtdeclarative ], libglvnd in buildInputs, QMAKE exported for discovery only, QT_VERSION_MAJOR=6, and the §3.2.1 -fuse-ld=mold flag in the same block. It explains why each is load-bearing (separate buildInputs do not give qmake one prefix to report; the libglvnd failure only surfaces after the .prl one is solved) and points at majestic-codex/c1/packaging/default.nix + flake.nix as the reference implementation instead of restating a full derivation.
  • Spacecraft_Qt_Cpp_Guidelines.md — same relaxation for the C++ path, with the reason the build-system half of the rule still stands (a .pro beside CMakeLists.txt is two sources of truth).
  • Both troubleshooting tables gain a split-Qt-outputs row.
  • Spacecraft_Qt_QML_Guidelines.md — records Qt 6.11's repeated stale-accessible-path diagnostics on rebuilt dynamic scene nodes as known Qt behaviour: the tree stays correct and Orca operates it, so the §18.4 gate is an Orca run, not a clean console. It also warns against "fixing" the warning by pinning Accessible properties onto recycled delegates — that trades a harmless log line for a genuinely wrong tree.

Evidence

  • majestic-codex/c1/packaging/default.nix:32 — the combined qt6.env
  • same :99–101libglvnd, qt6.qtbase, qtEnvironment in buildInputs
  • same :104–108export QMAKE=…, QT_VERSION_MAJOR=6, -C link-arg=-fuse-ld=mold
  • evidence/touchstone/m4-nix-qt-package.v1.json — Qt 6.11.0, "build": "pass"
  • evidence/touchstone/m4-orca-accessibility.v1.json"Qt 6.11 emitted repeated stale-accessible-path diagnostics while rebuilding dynamic scene nodes, although Orca exposed and operated the resulting tree."

Scope

The Steelbore Standard says nothing about qmake, so this is Construct-only — no two-repo Standard sync.

Verified

  • grep -rn -i qmake spacecraft-qt-guidelines/ — every surviving hit reads as build-system-only or as the documented query.
  • .githooks/check-description-length.py — pass; frontmatter description untouched at 826 chars against the §5.6 cap of 1000.
  • .github/check-license-files.py and reuse lint — clean.
  • Both bundles rebuilt in the same commit; the AGENTS.md drift sweep (content + missing-file directions) is clean, and .skill carries no directory entries.
  • The documented snippet was checked line-by-line against the real derivation. nix build .#majestic-c1-qt was not run: its closure is 1090 MiB and the build host has ~2.2 GB free.

Applying this skill to Majestic C1 (Qt 6.11 + CXX-Qt 0.9.1 on NixOS) hit a rule
that is wrong as written. "Never qmake in new projects" forbids the one thing
that makes the skill's own preferred Rust path work on the house platform.

The failure was not a Qt 6.11 API incompatibility. cxx-qt-build locates Qt by
querying qmake and assumes QtBase and QtDeclarative share one SDK prefix; Nix
gives each module its own immutable output, so the build stopped on a missing
Qt6Qml.prl. Combining the outputs exposed a second split — libGLX/libOpenGL come
from libglvnd. Both are packaging mismatches. Qt 6.11 itself built, linked, and
passed the sanitizer and package gates.

- SKILL.md and the C++ reference now forbid qmake as the BUILD SYSTEM and state
  that querying it is a different act and permitted. The toolchain line records
  Qt 6.11 as validated rather than merely current.
- The Rust reference gains §2.1 "Qt Discovery on Nix": the combined
  qt6.env, libglvnd in buildInputs, QMAKE exported for discovery only, and
  -fuse-ld=mold per §3.2.1 — pointing at majestic-codex/c1's derivation and
  devShell as the reference implementation rather than restating them.
- Both troubleshooting tables gain a split-Qt-outputs row.
- The QML reference records Qt 6.11's stale-accessible-path diagnostics on
  rebuilt dynamic scene nodes as known Qt behaviour: the tree stays correct and
  Orca operates it, so the §18.4 gate is an Orca run, not a clean console. Also
  warns against "fixing" it by pinning Accessible properties onto recycled
  delegates, which trades a harmless warning for a wrong tree.

The Steelbore Standard says nothing about qmake, so this needs no Standard sync.
Frontmatter description untouched (826 chars, §5.6 cap 1000). Both bundles
rebuilt in this commit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M94JK8t6zguGCTDP7udiUv

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0621d37143

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +183 to +184
normally. Do not chase the log, and do not paper over it by pinning `Accessible` properties
onto recycled delegates — that trades a harmless warning for a genuinely wrong tree. The

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep accessibility properties on recycled delegates

For a model-driven ListView with interactive delegates, this warning discourages the same Accessible.role and Accessible.name bindings that the example at lines 115–139 and the checklist require. Following it literally leaves recycled controls unnamed or without an explicit role, making the verified tree less accessible. Identify the specific warning-suppression workaround that is unsafe rather than broadly telling readers not to attach Accessible properties.

Useful? React with 👍 / 👎.

Comment on lines +115 to +117
Reference implementation: `majestic-codex/c1/packaging/default.nix` (derivation) and
`majestic-codex/c1/flake.nix` (devShell). Read those rather than re-deriving the
environment.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Bundle or replace the referenced Nix implementation

These majestic-codex/c1/... paths do not exist anywhere in this repository, so consumers installing the standalone skill bundle cannot follow the instruction to read them instead of deriving the environment. Include the reference implementation under this skill's references/ directory or replace this with a public, resolvable reference.

AGENTS.md reference: AGENTS.md:L72-L76

Useful? React with 👍 / 👎.

@UnbreakableMJ
UnbreakableMJ merged commit 52a8097 into main Aug 28, 2026
3 checks passed
@UnbreakableMJ
UnbreakableMJ deleted the fix/qt-guidelines-qmake-query-only branch August 28, 2026 08:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant