Skip to content

Latest commit

 

History

History
2462 lines (2144 loc) · 187 KB

WORK.md

File metadata and controls

2462 lines (2144 loc) · 187 KB
this_file WORK.md

2026-10-18: Two additional foreground reporter candidates

Added only two thin lazy Reporters menu scripts, separate additional-tools.json, scoped routing/provenance tests and documentation. Original migration.json SHA ef87bc7a69eef091a3061dfed5fee748631edca8576b6fdf0c2ebf9a99cff415 and all68 payload hashes stay exact. Universe check is the strict disjoint union of68 original migrations plus2additional reporters. Separate tests require exact menu hashes, Apache provenance, actual native evidence hashes and explicit foreground scope; neither reporter enters130sample denominator.

Tests-first missing-menu2failures then3passes; new metadata absent/pending failures retained. After actual controller native acceptance of both complete menus and their feature controls, native records became passed with receipt hashes, while release_gate explicitly stays held. Actual installed App brushfix wheel full suite775pass/1historicalskip, original-source audit intact. Formal project D20 two-module gate100%statements+branches; source scope/receipt at root .local/issue111-quality-repair-fontlab-python-scriptmix-1grw_mp8. Root gate first refused this new production route, then a minimal dispatch branch and3tests-first regressions were added; root18tests pass. No hook bypass.

Native both-menu/no-font/peerClose/completefont/history/import controls pass at issue111-reporter-menus-native-v1. RSB/R1 native geometry, pixels, clipping, context and destruction are hashed in additional-tools.json. Combined prior68 run has all68workflow andClose checks pass, but fails one Guide Clear Redo modification-date leaf across a UTC second; failure retained, no normalization or passing retry. Controller is investigating before promotion/release. No canonical changes, commits, tags, original removals or release count increase.

Issue 111 first batch

Controller acceptance: second Reports batch

47Python3.11 tests pass; review APPROVE without blocking findings. Original five scenarios pass on FontLab9.0.9784 through the installed helper wheel:42checks, including all205CSVrows and actual file export, live glyph follow/width+10, Rafi2702-glyph mark/suffix/Add selection, transformed zone nodes and Unicode block counts/selection. Screenshots of every tool reviewed and readable. All owned dialogs/fonts clean up; live timer stops. Host sys.path/module identities restore after the run. Evidence in workspace ecosystem evidence: issue111-reports-batch2-v1/summary.json. No original source removed.

Added three complete modeless reports and a provenance manifest. Original source files were not modified. Shared helpers protect stale-font selection and validate all names before clearing. Seven host-free report tests exercise calculations, missing-font refresh, stale-font selection and manifest integrity. Native proof is pending.

Commands: rtk proxy uv run --no-project --with pytest python -m pytest -q fontlab-python-scriptmix/tests .worktrees/issue111-app/tests/test_scripting.py (from workspace root): exit 0, 13 passed. Scoped Ruff initially corrected imports/formatting; a subsequent run passes (exit 0).

Controller native acceptance (2026-10-17): all three original scenarios pass in FontLab9.0.9784 against the installed helper wheel. Empty Glyphs6, Open Contours6 and Overview14 independent checks pass; all dialogs/fonts cleaned up. Screenshots reviewed for readable text/tables and complete controls. Evidence in workspace verification/issue-101-ecosystem/evidence/issue111-reports-v1/summary.json. Initial runner refused an unsaved owner font (exit76); owner saved/closed it, then guarded run exited0 without a crash. Source files remain retained in _old. Fresh controller Python3.11 tests11pass; app310pass; wheel helper6pass and47 production files match source bytes. Fix review: original P1 addressed, no new blocking findings. Native/GUI claims refer only to these three report scripts.

Issue 111 review round 1

Fixed failed-refresh selection: invalidate the prior snapshot before native access, scan into local rows, populate the full table, then publish rows/id. Any scan or display exception clears partial table data, keeps selection disabled, and rejects direct select_rows calls. Four regression cases first failed against the old code (genuine RED retained), then passed after this fix. No native run.

Issue 111 second Reports migration (2026-10-17)

Preserved five complete Apache-2.0 report implementations and original scenario keys. Ported imports to fly and package-id-bound selection helpers. Scans resolve the current package afresh; no closed retained package is dereferenced. UI scans use local results until full display completes. Add merges current selection only after validating the computed font id. Live timer stops and all owned signals disconnect on close; the CSV chooser closes and deletes with its report.

Tests-first RED: rtk proxy env PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 uv run --no-project --python 3.11 --with pytest python -m pytest -q fontlab-python-scriptmix/tests/test_report_batch2.py exited 1: nine failures, including five genuine requested-module existence assertions. After migration, 35 tests pass (exit 0), covering real layer/CSV/Unicode calculations, all five success/no-font/scan/display paths, stale selection, Add and close teardown. Scoped Ruff initially exited 1; native slot guards were documented and fixture imports/unused doubles fixed; scoped check and format now exit 0. Final all-tests command and result are recorded in task-3b-report.md. Native runs not performed.

Issue 111 task 2b — shared script dialog lifecycle (2026-10-17)

Shared fontlabapp.scripting helpers handle guarded Python callbacks, identity-checked registry removal, explicit native close handling and deferred widget deletion. All eight Reports use them through fly.ap.scripting; CSV passes its owned chooser and Live Glyph Info its timer. No new dependencies.

Controller acceptance passed on FontLab 9.0.9784 using the installed wheel: all eight original scenarios, 68 independent checks, and actual Close-button native destruction for every dialog. Registry cleanup and host import-state restoration pass. The old immutable source released its registry entry but remained native-live while a wrapper was retained; the new source destroys it. App 315 tests, Scriptmix 55 tests and 11 installed-helper tests pass; all 47 production files match wheel bytes. Evidence: workspace ecosystem evidence, issue111-lifecycle-v1/summary.json. No owner site-packages install or new tag.

Verification: app rtk proxy env PYTHONPATH=.worktrees/issue111-app/src fontlab-fontlabapp/.venv/bin/python -m pytest -q .worktrees/issue111-app/tests: exit 0,315 passed13.01s; Scriptmix rtk proxy uv run --python 3.11 --no-project --with pytest python -m pytest -q fontlab-python-scriptmix/tests: exit0,55 passed0.10s. Scoped Ruff and both git diff --check exit0. Exact RED/GREEN and source hashes: .superpowers/sdd/issue-111/task-2b-report.md at workspace root.

Issue 111 task 3c — complete Font Info sources (2026-10-17)

Migrated all six Font Info tools with full original UI/data and mutation paths. Preserved original KEY/registry interfaces and all eight existing Reports sources. Applied shared fly aliases/current-package access, guarded slots and deterministic close/destruction. Full previews bind Apply to the original package, retain the actual edit plan, refuse stale old fields and invalidate after failed previews. Names/current-scope metrics bind their master. No glyph/layer notifications.

API review: Fontport NativeFontBackend.set_info_many and its info-backend tests provide the measured checkInitHistoryState(0) + [package, mastersContainer()] history protocol, but not an explicit multi-master plan or rollback. App fontui FontInfoEditor stages through Fontport and eagerly imports PythonQt, so it is not a reusable script-core editing API. Added a bounded shared write_font_info helper only in the App worktree, without dependencies. No-op plans produce no history; whole plans validate first; native old values are retained for exact rollback.

Tests-first RED: Scriptmix initial test_font_info.py exited1 (14 failures; six requested-tool existence assertions). App initial direct import errored during collection; corrected explicit module import then two genuine missing-helper assertions failed (exit1). App regression for normalized-empty rollback failed against implemented code (None became empty text); fixed by retaining actual native preflight values. Three native-boundary regressions then failed for huge integers/null/surrogate text; bounded numeric comparison and Unicode validation fixes pass. Rollback-failure fixture initially expected failure from a no-op setter; corrected to apply a changing field whose restore setter raises.

Focused GREEN: Scriptmix21tests and App7tests pass. Full Scriptmix76tests pass. Exact commands/final source hashes are in the workspace task-3c-report.md. Native runs, Undo/Redo, chooser interaction and full saved/reopened metadata proof are pending the controller; no native calls/commits/package installs made.

Issue 111 task 3c review round 1 — shared Font Info shell

Extracted the repeated six-tool layout, palette/heading/status/footer, guarded callbacks, failed-preview invalidation, current-font/master checks, preview guard, table rendering and default close into App's private FontInfoDialog. The public fly.ap.scripting.font_info_dialog_type() loads it only when a tool runs; importing scripting remains host-free. Per-tool controls, preview calculations, plans, master-bound choice and mutation actions stay in Scriptmix. The glyph-order modeless chooser, single callback/reuse and owned-child close cleanup are retained.

This shell adapts Apache-2.0 sample code. Its SPDX/provenance is retained in the new source and NOTICE, with LICENSE-APACHE-2.0 and combined distribution license metadata preserving the existing BSD-3-Clause/MIT terms. No dependencies added.

Tests-first: six Scriptmix AST assertions failed against copied safety methods (exit1;22prior tests passed); App factory assertion failed before implementation (exit1;three related fixture assertions also failed). The Apache-metadata test then failed before metadata/provenance changes (exit1;fourpanel tests passed). App tests exercise the actual shared constructor styling/layout/control wiring, callback argument handling, safety/master checks, numeric table alignment, missing-font/failed-setup disabling and separate-process lazy host-free import. Scriptmix imports the actual shared base against owned native/Qt doubles and retains all calculation/mutation/chooser tests.

Full Scriptmix tests:83passed0.11s,exit0. Full App/scoped Ruff/hash receipts and updated production freeze are recorded in the workspace task-3c-report.md. Native acceptance of the refactored bytes remains controller-owned; prior v4 native receipts belong to the preceding production hashes. No native runs, installs, commits or edits to Reports/canonical App occurred in this round.

Controller acceptance: six Font Info tools

Task review and two scoped fixes pass: shared App panel extraction and concise export status. Fresh Scriptmix83tests, App328tests, installed shared-helper24tests, 48wheel/source matches and14manifest pairs pass. Native installed-wheel results: all14original workflows153checks; four mutators24metadata/preservation/one-Undo/ Redo/reopen checks;12no-op/preflight/stale-font checks;8actual chooser exports; Close destroys14/14native dialogs and releases registry. Paths/module identities restore; owned fonts close. Raw workspace UUID/title changes are independently predicted without normalizing any font-design data.

Final Glyph Order-only status fix passed original15checks,chooser8checks and Close again; screenshot confirms count/filename fits. Earlier all14tool bytes except that status line remain unchanged. Source/native evidence is retained in workspace issue111-font-info-shared-v3 and issue111-font-info-footer-v1. App 0f3f896 is reviewed and integrated into its canonical branch. Source archives remain intact; full issue111 migration, cleanup, additional tools/reporters and documentation/final review are still pending. No release tag or owner-site install was performed.

2026-10-17 — Issue111 Features source checkpoint

Six complete Features tools retain their original controls, proofs, Copy and search/filter interactions. Shared App FeaturesDialog extends the existing FontInfoDialog shell/lifecycle. Build uses App's lazy Fontport ordered feature writer, exact source/current-font/reference validation and existing native history safety checks. No source archive or prior14tool bytes changed.

RED: rtk proxy bash -c 'cd fontlab-python-scriptmix && ./test.sh' exit1, 6requested-file failures/83existing passes. Actual Fontport integration caught a missing LF in the generated final feature block (1failed5passed); fixed Build's preview, then6passed. Other failed setup/style attempts are retained in workspace .superpowers/sdd/issue-111/task-3d-report.md.

Final rtk proxy uv run --python 3.11 --no-project --with pytest python -m pytest -q fontlab-python-scriptmix/tests: exit0,108passed. Final rtk proxy env PYTHONPATH=.worktrees/issue111-app/src:fontlab-fontport/src fontlab-fontlabapp/.venv/bin/python -m pytest -q .worktrees/issue111-app/tests: exit0,334passed,13.06s. Both final interpreters are Python3.11. Scoped Ruff check/format and both repository diff checks exit0;20manifest hash pairs pass.

Wait, but: source tests cannot prove native Undo, source persistence or actual widget destruction. Those gates, original scenarios and screenshot review stay with the controller. No native runs, owner-site installs or commits were made. Production sources frozen with SHA256 in the task report. Full issue111 scope, archive cleanup and final docs/release work remain open.

Task3d round1 review fixes — 2026-10-17

Extract duplicated suffix/FEA/name validation into host-free App feature_code, consumed through fly.ap by the current Build/Suffix/Ligature tools. Preserve the original helper import surfaces and alternate-name pair ordering. Add concrete calculation row types and docs for class exclusion, suffix counts, recipe Ready limits and exact feature source order.

Fix the measured Feature Code Viewer native boundary: native iteration returned positions and raw prefix synthesized classes. It now displays the complete exact read_feature_blocks snapshot, preserving prefix text and ordered source blocks. A genuine new RED calls the actual viewer.setup against iterator[0,1]/blank get_feature and synthetic prefix doubles; it failed on the incorrect sources before the fix, then passed on exact independent blocks. No native execution or blind performance optimization was performed in this round.

Commands: rtk proxy uv run --python 3.11 --no-project --with pytest python -m pytest -q fontlab-python-scriptmix/tests/test_features.py -k viewer_uses: exit1, 1failed25deselected (RED). Final full Scriptmix command without the selection: exit0,110passed0.11s. rtk proxy env PYTHONPATH=.worktrees/issue111-app/src:fontlab-fontport/src fontlab-fontlabapp/.venv/bin/python -m pytest -q .worktrees/issue111-app/tests: exit0,347passed13.06s. Direct shared-helper tests account for13new App checks; shared identity and actual viewer boundary add2Scriptmix tests. A pre-freeze run had109passes/1expected stale-manifest failure; refreshed only Features hashes. Scoped Ruff check/format pass;20source/destination hash pairs verify. Updated production hashes are in the workspace task3d report. Native acceptance of these revised bytes remains the controller's task.

Controller acceptance: six Features tools

Initial task review required shared pure calculations and useful typing/docs. Native v1 additionally exposed blank feature bodies in the viewer. Fix1 review passes: host-free App feature_code calculations are shared through fly; viewer uses exact persisted prefix/ordered sources rather than raw native iteration. Genuine regressions and fixes are retained in workspace task-3d-report.md.

Fresh Python3.11 source347App13.02s/110Scriptmix tests pass; installed helper, shared panel/writer and calculation tests43pass;50production files match wheel. 20provenance source/destination pairs match. Wheel56entries and sdist94entries retain shared sources, licenses and NOTICE; ignored scratch/venv/archive payload is excluded. Fontport v1.0.2 source confirms the required ordered API exists.

Native installed-wheel six-tool v2 passes30workflow checks,6Close destructions, and Build's six full feature-only/preservation/one-Undo/Redo/reopen checks. All20tool v2 additionally passes183workflow checks,30persistence checks across five editors,12no-op/preflight/stale-font safety checks andClose20/20. Actual App/Fontport source paths are asserted; App/fly/Fontport imports restore. Every owned font closes and no host crash occurs. Screenshots of all six reviewed: real alternate outlines, complete scrollable tables/source, working highlights.

Evidence: workspace issue111-features-v2 and issue111-tools20-v2. Suffix clipboard scenario is explicitly adapted to actual preview under D8; clipboard remains native-unverified. All20-v1 reached20workflow/5editor-persistence passes then a cold native chooser hit FontLab's5sRPC deadline. This unchanged chooser already passes independently on the same Scriptmix source hash (footer-v1); all20-v2 tests lifecycle/safety separately. Failure receipts retained; no performance claim or speculative source fix. Feature-source mutation does not compile or prove shaping: test generated code in FontLab's Features panel.

Full issue111 archive migration/cleanup, further practical and broader scripts, package cleanup, new reporters and docs/finalreview remain open. No original source removed, owner environment install, publication or release tag.

Task 3e: portability

Baseline isolated archive reproduced RED: 6 passed / 3 App lookup errors (exit1). Removed private checkout defaults; installed App files resolve without native imports before module doubles. Added three dependency resolution regressions. Default checks retain 20 destination hashes, menu paths, syntax and provenance; --original-source-root explicitly enables all20 original hash checks. Product sources and migration.json remain unchanged. Exact verification commands and final isolated results are in workspace .superpowers/sdd/issue-111/task-3e-report.md.

Verification (all commands prefixed rtk proxy):

  • bash -c 'cd fontlab-python-scriptmix && SCRIPTMIX_APP_REQUIREMENT="$PWD/../.local/issue111-app-features-fix1-dist/fontlab_fontlabapp-0.2.1.dev75+g0f3f8962b.d20261017-py3-none-any.whl" ./test.sh --original-source-root ..': exit0,113passed;20source/destinationpairs.
  • Archived committed checkout outside workspace: same wheel with ./test.sh, exit0,113passed;20destinationhashes. No originals/siblings present.
  • Explicit missing-original and mismatched-original probes: each exit1, 1failed/112deselected (expected); no silent skip.
  • uvx ruff check tests, git diff HEAD^ --check and git diff 86a48ce --exit-code -- Scripts migration.json: exit0. One initial Ruff run found two import-order issues; fixed and reran successfully. No native run: product bytes unchanged. No push/release or owner environment edit.

Issue 111 task 3f — Names sources frozen for native review

Five new complete Names tools preserve the original registry/class/method interfaces, controls, language data, keyboard/row/copy actions and outline proof. Shared lazy App shell/table/font access, guarded signals and complete-refresh snapshots replace duplicated lifecycle/selection logic. Validate every requested name and original font identity before clearing selection; Keep/Add retained. Live Character Info refreshes even for same-name font/master changes and stops on Close; original has no Pause control. Painter errors and error hooks remain contained and painter ends in finally. No metadata/design/master writes.

Test-first RED: five missing requested files, 113 existing tests passed (exit1). Intermediate runs exposed one test tuple-unpacking mistake, manifest20 awaiting update and a copied-fixture closure mistake; corrected. Final 35 new Scriptmix checks include actual action inputs, direct failed refreshes for all five tools, Unicode/case/charset/glob/mark calculations, stale/closed fonts, missing names, copy, transformed outline parts, timer teardown and failing painter/error hook. Two App Add-selection regressions added. Earlier App full run347 passed; final349. All original twenty manifest entries unchanged; append five, exact menu depth. No archived source writes, native calls, owner installs, commits or push. Native original workflows, screenshots, font invariance and actual destruction remain pending controller verification. Freeze report includes every changed and new file hash: workspace .superpowers/sdd/issue-111/task-3f-report.md.

Verification from workspace root:

rtk proxy bash -c 'cd fontlab-python-scriptmix && SCRIPTMIX_APP_REQUIREMENT="$PWD/../.local/issue111-app-v0.2.5-dist/fontlab_fontlabapp-0.2.5-py3-none-any.whl" SCRIPTMIX_APP_SOURCE="$PWD/../.worktrees/issue111-app/src/fontlabapp" ./test.sh --original-source-root ..'
# exit 0: 148 passed in 0.14s; all 25 source/destination pairs audited.
rtk proxy bash -c 'cd .worktrees/issue111-app && ./test.sh -q'
# exit 0: 349 passed in 12.91s.
rtk proxy uvx ruff check fontlab-python-scriptmix/Scripts/Names fontlab-python-scriptmix/tests/test_names.py fontlab-python-scriptmix/tests/test_reports.py .worktrees/issue111-app/src/fontlabapp/scripting.py .worktrees/issue111-app/src/fontlabapp/_names_dialog.py .worktrees/issue111-app/tests/test_scripting.py
# exit 0: All checks passed.
rtk proxy git -C fontlab-python-scriptmix diff --check
rtk proxy git -C .worktrees/issue111-app diff --check
# each exit 0.

Task 3f review fix 1 — complete Character Info proof fitting

Controller reports all five original scenarios pass33checks on the initial native build with complete saved font/history invariance. Its Wacute screenshot revealed the left accent clipped: vertical fitting only used master metrics and horizontal centering only used advance. New actual Specimen.draw regressions reproduced RED (2failed/1passed/148deselected): tall accent y=-79 and overhang x=-17.2..319.2 escaped the padded left frame. Fit the union of actual transformed path bounds, advance, metric frame and baseline in both axes; reserve labels and retain system proof/painter containment. GREEN:3passed/148deselected. Native screenshot/geometry acceptance of this fix remains pending controller rerun.

Corrected comparison-list Unicode describe docstring. Select by Mark's retained font_window_selection interface now thin-wraps shared exact-selection access, with no current-glyph fallback; the existing fallback helper uses that reader. App gains an exact-empty-selection regression. No other behavior changed. No native calls, owner installs, commits or pushes in this fix.

Commands from workspace root (all exit0 unless noted):

  • rtk proxy bash -c 'cd fontlab-python-scriptmix && SCRIPTMIX_APP_REQUIREMENT="$PWD/../.local/issue111-app-v0.2.5-dist/fontlab_fontlabapp-0.2.5-py3-none-any.whl" SCRIPTMIX_APP_SOURCE="$PWD/../.worktrees/issue111-app/src/fontlabapp" ./test.sh -k "fits_tall_accents or mark_selection_reader"': RED exit1,2failed/1passed; GREEN exit0,3passed.
  • Same environment and ./test.sh --original-source-root ..:151passed (0.14s),25provenance pairs; original20unchanged.
  • rtk proxy bash -c 'cd .worktrees/issue111-app && ./test.sh -q': full App results in freeze report.
  • rtk proxy uvx ruff check fontlab-python-scriptmix/Scripts/Names fontlab-python-scriptmix/tests/test_names.py fontlab-python-scriptmix/tests/test_reports.py .worktrees/issue111-app/src/fontlabapp/scripting.py .worktrees/issue111-app/src/fontlabapp/_names_dialog.py .worktrees/issue111-app/tests/test_scripting.py: All checks passed.
  • rtk proxy git -C fontlab-python-scriptmix diff --check and rtk proxy git -C .worktrees/issue111-app diff --check: each exit0.

2026-10-17: Names native acceptance

Independent source review and fix review pass. The corrected native Wacute screenshot shows the complete accent inside the outline frame; tall-accent and side-overhang geometry regressions pass. Original constant expressions, presets and signal callbacks match all five source tools. The shared shell supplies the per-script heading label and lifecycle.

The installed App wheel passes the combined 25-tool run on FontLab 9.0.9784: 216 original workflow checks, 40 full preservation/history checks, 12 editor safety checks, 32 switched/closed selection checks and actual Close destruction for all 25 dialogs. All owned fonts close and App/fly/Fontport imports restore. The Names checks compare every saved font/format field and dirty/Undo/master; owned workspace UI changes are recorded separately. The live timer stops.

Fresh Python 3.11 checks: App 350, Scriptmix 151, installed App helpers 46. All 25 source/destination hashes pass; the prior 20 mappings are unchanged. Wheel 57 and sdist 95 entries contain 51 byte-identical source files, complete licenses and updated NOTICE; private paths and scratch payloads are excluded. Evidence: workspace issue111-tools25-v1, names-source-fidelity.json and the source/fix reviews. Clipboard and chooser timing have no new native claim. Full issue 111 remains active; no archived input is removed.

Controller native command uses fl-native.sh --mutating --lane issue111-tools25, FL_RESTART=1, PYTHONDONTWRITEBYTECODE=1, installed final App wheel, all 25 manifest scripts and --verify-close --verify-safety --verify-names-safety. Exact argv/exit0: issue111-tools25-v1/native-command-receipt.json.

Task 3f dependency guidance fix 2

Align runner/README minimum guidance with App0.2.6, which contains the Names helpers. Explain tag-built wheels without claiming package-index availability. The shared source resolver now requires _names_dialog.py alongside the existing four helpers. Scripts, migration and App bytes remain unchanged from the controller-verified freeze. No native calls, commits, pushes or installs.

Missing-helper regression: a temporary source tree containing only the four old helpers was accepted before the fix (probe exit1, expected RED); after adding the Names check the same probe exits0 and reports "Missing Names helper refused explicitly." No new test-file scope or dependency was introduced.

Exact verification commands from workspace root:

  • rtk proxy uv run --no-project --python 3.11 --with pytest python /tmp/issue111-missing-names-check.py fontlab-python-scriptmix/tests/conftest.py: RED exit1 (incomplete helpers accepted); GREEN exit0.
  • rtk proxy bash -c 'cd fontlab-python-scriptmix && env -u SCRIPTMIX_APP_SOURCE SCRIPTMIX_APP_REQUIREMENT="$PWD/../.local/issue111-app-names-fix1-dist/fontlab_fontlabapp-0.2.6.dev0+g8e4463d52.d20261017-py3-none-any.whl" ./test.sh --original-source-root ..': exit0,151passed in0.14s;25source/destinationhashes, installed final wheel only (no source override).
  • rtk proxy uvx ruff check fontlab-python-scriptmix/tests/conftest.py: exit0,All checks passed.
  • rtk proxy git -C fontlab-python-scriptmix diff --check: exit0.
  • rtk proxy git -C fontlab-python-scriptmix diff --exit-code HEAD -- Scripts migration.json: exit0; native product bytes unchanged.

2026-10-17 Task3g: complete read-only Kerning source implementation

Implemented five complete originals: Classes Browser, Compare Masters, Pair List Browser, Missing Pairs and Text Preview. All original controls, KEY/registry and class/method interfaces remain. Shared lazy KerningDialog reuses the Names shell, exact guarded callbacks, selection validation and close lifecycle. Named-master explicit items/groups retain @names, class sides, fractions and explicit zero. Native effective get(names) supplies kerning precedence, rather than adding a second calculator. Fontport's existing reader targets the current master and UFO-normalized group names; its editor and optional dependency are unnecessary for these inspectors. Native pyfontgate/fgkerning.cxx lines627-634 and675-702 confirm explicit items versus effective get(names). Local QtGui stubs consulted.

Every outgoing action validates the complete snapshot's font; unknown names fail before clearing selection. Failed native/table/proof work clears partial rows, classes and paths and disables selection/Copy/export. Pair List exports actual shown numeric-sort order through an owned modeless chooser; wrapping status reports count and basename. Proof materializes actual transformed outlines before publication and fits all ink, tall accents and overhangs with native pen positions; painter construction/draw/end and failing error hooks are contained. No native calls, owner installs, commits, pushes or original archive writes occurred. Exceptions Finder and Pairs From Text stay editors in later full-scope work. App minimum guidance targets forthcoming0.2.7 without an index-publication claim. Portable tests use explicit0.2.6wheel plus source override.

Wait, but: an arbitrary long proof could still overflow when fixed label gaps exceeded the whole canvas. The fitting helper now bounds label space too; 200-row overflow and tall/side-overhang checks retain every glyph. Painter-end errors now invalidate the proof just as drawing errors do. These are host-free receipts only, not native acceptance.

Verification recipes from workspace root (portable placeholders; exact private receipts retained in the workspace task-3g report):

  • rtk proxy env SCRIPTMIX_APP_REQUIREMENT=/path/to/current-app.whl SCRIPTMIX_APP_SOURCE=/path/to/updated-app/src/fontlabapp fontlab-python-scriptmix/test.sh tests/test_kerning.py: RED exit1,5missing-filefailures/151pass.
  • Intermediate full suite: exit1,164pass/2fail (new category missing from test set and installed-only portability probe required a helper absent from supplied0.2.6wheel). Added Kerning category and explicit resolver helper subset for the installed baseline probe; default/source checks still fail closed on missing Kerning helper.
  • rtk proxy env SCRIPTMIX_APP_REQUIREMENT=/path/to/current-app.whl SCRIPTMIX_APP_SOURCE=/path/to/updated-app/src/fontlabapp fontlab-python-scriptmix/test.sh --original-source-root ..: GREEN exit0,171passed in0.15s;30source/destinationmappings. Prior25exactly unchanged (compared to HEAD JSON).
  • (cd .worktrees/issue111-app && rtk proxy env UV_LINK_MODE=copy uv run --python 3.11 --extra test python -m pytest -q): exit0,359passed in13.71s (original350plus9new).
  • rtk proxy uvx ruff check fontlab-python-scriptmix/Scripts/Kerning fontlab-python-scriptmix/tests/test_kerning.py fontlab-python-scriptmix/tests/test_reports.py fontlab-python-scriptmix/tests/test_portability.py fontlab-python-scriptmix/tests/conftest.py .worktrees/issue111-app/src/fontlabapp/scripting.py .worktrees/issue111-app/src/fontlabapp/_kerning_dialog.py .worktrees/issue111-app/tests/test_kerning_scripting.py: exit0.
  • rtk proxy git -C fontlab-python-scriptmix diff --check and rtk proxy git -C .worktrees/issue111-app diff --check: each exit0.

Native original scenarios, actual chooser/Close, full saved-font/history invariance and installed-wheel proof await controller verification. Source report/freeze: workspace .superpowers/sdd/issue-111/task-3g-report.md and task-3g-freeze.json.

Task3g fix1: concrete types, precise docstrings and portable receipts

Typed Missing Pairs coverage inputs and Cartesian-product outputs concretely; kept the native FontLab package wrapper Any. Explained zero-valued coverage, side-specific classes and input ordering, and clarified Text Preview's empty state. Product behavior is unchanged: AST comparison against the before-fix1 snapshot passes after removing only type annotations/docstrings. All52App source modules remain byte-identical to the frozen native wheel. Refreshed only the two script destination hashes; all prior25mappings remain exactly unchanged.

Replaced personal home paths in the new public WORK command recipes with clearly labelled portable placeholders. Exact original receipts remain in the private workspace task-3g report. Both public Markdown trees have no personal home paths.

Verification from workspace root:

  • rtk proxy env SCRIPTMIX_APP_REQUIREMENT=/path/to/current-app.whl SCRIPTMIX_APP_SOURCE=/path/to/updated-app/src/fontlabapp fontlab-python-scriptmix/test.sh --original-source-root ..: exit0,171passed in0.15s; exact private invocation in task-3g-report.md.
  • rtk proxy uvx ruff check 'fontlab-python-scriptmix/Scripts/Kerning/Missing Pairs.py' 'fontlab-python-scriptmix/Scripts/Kerning/Text Preview.py': exit0.
  • Both repository rtk proxy git -C <repository> diff --check commands: exit0.
  • Before-fix1 behavior AST,52module wheel-byte comparison and public-doc path audit: exit0.

Controller reports native5acceptance:31workflow,10fullfont/history,7chooser/CSV, 8staleclass-selection and Close5/5, with5screenshots inspected. This worker made no native calls, commits, pushes, owner installs or App source changes. Fix1 adds no new behavior requiring another native run; controller decides integration.

2026-10-17: Kerning native acceptance

Source and scoped fix reviews approve. Five kerning tools pass 31 independent native workflow checks, ten complete saved-font/history checks, eight stale class-selection checks, seven actual chooser/export checks and Close 5/5. Screenshots show real wrapped accented outlines, native kerning positions, master flags, class members, coverage and a concise export footer. Original constant expressions and signal callbacks match all five originals.

The combined 30-tool run on FontLab 9.0.9784 passes 247 workflows, 50 complete font/preservation/history checks, 52 safety checks, seven actual save-dialog checks and native destruction of every dialog. Five informational composite notes are retained separately from test counts. Clipboard invocation/check is explicitly excluded under D8; Copy remains host-free tested. Exact exported CSV UTF-8/CRLF bytes match independently read MCP values in native table order.

Python 3.11: App359 and Scriptmix171 tests pass; installed App helpers55 pass. All30 source/destination mappings pass; the prior25 are unchanged. Wheel58 and sdist97 entries contain52 exact source matches, licenses and NOTICE, with private paths/scratch excluded. Public work-log recipes are portable; private exact receipts are retained separately. Evidence: workspace issue111-tools30-v1 and issue111-kerning-v1. Full issue111 and all remaining editors stay active; no archived input or owner environment installation is changed.

Native command through fl-native.sh --mutating --lane issue111-tools30 with FL_RESTART=1, PYTHONDONTWRITEBYTECODE=1 and installed App wheel runs all30 manifest scripts with --verify-close --verify-safety --verify-names-safety --verify-kerning-safety --verify-kerning-chooser. Exact argv/exit0 retained in issue111-tools30-v1/native-command-receipt.json.

2026-10-17 Task3h: five complete Kerning editor sources

Implemented Copy Between Masters, Pair Editor, Scale Values, Round Values and Remove Small Pairs, retaining original controls, source/target/mode choices, per-master cells, add/delete, zero options, preview ordering, counts and original KEY/class/method/registry interfaces. App owns shared pure plans and rounding, complete native pair/class/master snapshots, one all-master writer, lifecycle, Refresh recovery and Scale/Round rendering; Scriptmix enters through fly.ap.

The writer stages every selected master before notification. It validates name structure/existence/class side, whole signed32 values, nonblank history label, original current font and exact scanned pairs/classes/masters. It preserves explicit zero versus absence using native seed/scale and restores all unrelated nonzero pairs in that master. Fractional source history on any master is refused; no-op adds no history. Only package/master/kerning containers enter the shared before/after checkpoint. Native writes/readback may be partial on failure and say so while retaining the after checkpoint. Failed/stale previews clear partial staging and disable Apply; invalid cells remove only their own invalid stage and leave other valid edits available. Rebuilding the editable table retains staged and invalid text. Failed refresh after a write cannot overwrite the error with success counts. Optional dependencies remain lazy and no package is added.

Wait, but: checking changed master membership before the original-font guard would read a closed package. The final snapshot guard checks current font first. A post-write preview failure could also have hidden success or raised a None count error; explicit outcome feedback now separates it from successful refresh. These are owned-host/source checks only. Original scenarios, installed/native complete-font deltas, one real Undo/Redo, saved reopening and actual Close remain pending controller verification. No original source, owner install, commit or remote branch was changed. All35source/destination hashes pass; prior30unchanged.

Portable verification recipes from the workspace root (private exact invocations and initial failures retained in the workspace task-3h-report.md):

  • rtk proxy env SCRIPTMIX_APP_REQUIREMENT=/path/to/current-app.whl SCRIPTMIX_APP_SOURCE=/path/to/updated-app/src/fontlabapp fontlab-python-scriptmix/test.sh: RED exit1,5missing-editor failures with171existing tests passing.
  • (cd .worktrees/issue111-app && rtk proxy env UV_LINK_MODE=copy uv run --python 3.11 --extra test python -m pytest -q): final exit0,399passed in13.88s, including40new owned batch/planning tests.
  • rtk proxy env SCRIPTMIX_APP_REQUIREMENT=/path/to/current-app.whl SCRIPTMIX_APP_SOURCE=/path/to/updated-app/src/fontlabapp fontlab-python-scriptmix/test.sh --original-source-root ..: final exit0,215passed in0.24s,35provenance mappings and Python3.11syntax/menu checks.
  • rtk proxy uvx ruff check <changed Python files>: exit0,All checks passed.
  • rtk proxy git -C fontlab-python-scriptmix diff --check and rtk proxy git -C .worktrees/issue111-app diff --check: exit0.

Forthcoming App0.2.8 helper guidance/resolver checks are explicit; use a current wheel plus source override until its artifacts exist. Native acceptance is unchecked in PLAN/TODO; full130-stem migration and other archive collections remain active, with all originals retained.

Task3h range fix — retain values across native reopening

Controller's owned native persistence control found signed32 endpoints save but reopen clamped to +/-2UPM with a mark. The native load pipeline in Proteus/workspace2/ioengine.cpp12898–12941 confirms it clamps all masters on load. Following the controller's recorded ruling, the shared writer now validates the ENTIRE final font's kerning against inclusive +/-2current positive finite UPM, including masters not edited by the batch, before history/writes. It refuses clearly, never clamps. Valid correction/deletion of existing extreme pairs is allowed; no-op bypasses the new range check and stays untouched. Existing signed32 and fractional-history safety stays; Fontport is unchanged.

Tests first:13range/UPM failures and7allowed/repair/no-op controls; real PairEditor Apply also reached history initialization before refusal. After the shared preflight,60owned App batch tests and the real Apply refusal pass. Final full suite counts and exact private receipts are in task-3h-report.md. No native calls, commits, agents or archive writes occurred. Controller owns focused native limits verification and the final combined35tool gate.

Range-fix final Python3.11 suites:App419passed in13.73s;Scriptmix216passed in0.34s with all35provenance mappings; changed-file Ruff and both diff checks pass. Native acceptance remains with the controller.

Controller acceptance: five Kerning editors and full35 gate

Source, wording and native range-fix reviews PASS. Native9784 original5 pass33 workflow checks and35exact wholefont/oneUndo/Redo/reopen checks; switched/closed Apply safety30 and actualClose5 pass. Complete combined35gate passes280workflow, 85preservation/history,82safety,32writer controls,7realexport-dialog checks and Close35/35. Ten composite notes are separate information, never assertions. All93exercisedsource/dependency hashes match; all56App sources matchinstalledwheel.

App419source/60ownedbatch tests pass; installedwheel115 andinstalledsdist115pass with pytest sourcepath disabled. Scriptmix216tests pass againstthe actualfinal wheel, withall35source/destination hashes. Both distributionsretain licenses, NOTICE andprivatepath/scratch exclusions. Five native UI screenshots and final plain-language invalid-cell feedback inspected; controls/counts/actions visible.

Richer native testing found a host save/reopen domain mismatch: signed32 endpoints persist in memory/history but load clamps beyond2UPM and addsmark1 (fl#8522). Final writer refuses a lossy finalbatch before anyhistory/write, neverclamps. Native controls prove inclusive +/-2UPM persistence, oneunitoutside refusal, existing/newzero, nonzero->zero, glyph/class/bothclass zeros, staleclass/pairs, fractionalhistory onuntouchedmaster and exact fullfont preservation. Known extra no-op history row remains permitted underD18; oneUndo restores allfontdata.

Controller commands use rtk proxy: installed PYTHONPATH scratch roots and pytest -o pythonpath= over seven helpertest files (115passed,exit0,0.31s each); Scriptmix explicit SCRIPTMIX_APP_REQUIREMENT currentwheel test.sh --original-source-root workspace (216passed,exit0,0.27s). Exact native argv/exit0 and previous failures are retained privately in issue111-tools35-v1, kerning-edit-v1 and kerning-preflight-v2/v3/v4. No owner-site install, original input removal or Fontport contract change. Full130-stem/archive migration, additional tools/reporters/docs remain open.

Issue111 Task3i selected Kerning editors — source milestone

Exceptions Finder retains all-master/current scope, first broader class-pair precedence, redundant/manual checkboxes, Untick all and Remove ticked. Pairs From Text retains word/slash-token parsing, reading-order unique adjacency, effective versus explicit previews, manual checkboxes and Add/Set for selected masters. Shared lazy App0.2.9 plans reuse the complete snapshot-bound writer and owned panel. No new dependency or Fontport change. Complete-master final range, zero/absence, fractional-history and stale guards stay centralized. Read errors propagate instead of being shown as an absent zero.

Tests first: two missing tools RED with216existing passes (exit1). Eight new App checks cover precedence/zero/manual deletions, parsing and native effective reads, Add/Set, empty selection/no-history, late invalid preflight and honest partial native-write failure. New real menu-method tests exercise stale font/pairs/classes/ masters, actual checkbox state through shared guarded callbacks, failed preview, post-write read errors and inherited owned Close. One RED caught list-pair previews surviving shared invalidation; it now clears both pair lists and value maps. A second test setup correction used AVA (the prior AV pair was explicitly zero and correctly bypassed effective reads) and supplies the normal subtitle control.

Final portable commands (exact private argv/receipts in workspace task-3i-report):

  • App checkout: rtk proxy .venv/bin/python -m pytest -q: exit0,427passed13.52s.
  • Scriptmix checkout: rtk proxy env SCRIPTMIX_APP_REQUIREMENT=/path/to/current-app.whl SCRIPTMIX_APP_SOURCE=/path/to/updated-app/src/fontlabapp ./test.sh --original-source-root /path/to/workspace: exit0,238passed0.27s.
  • rtk proxy uvx ruff check <changed Python files>: exit0, all checks passed.
  • rtk proxy git -C <App checkout> diff --check and the Scriptmix equivalent: exit0. All37exact source/destination hashes pass; prior35rows/menu bytes are unchanged. Original TITLE/KEY/MODES constants and all signal callbacks match AST comparisons. Scriptmix README198lines, dependency/helper guidance forthcoming0.2.9, no index publication claim. Official local pyflpackage.cpp833/838 declarations and existing scripting native get semantics were inspected; no new Qt API was introduced.

Wait, but: host doubles prove source contracts only. Installed native original scenarios, seeded Exceptions baseline, full-font deltas, one native Undo/Redo, saved reopening, safety, real controls/screenshots and native Close are controller acceptance work and remain unchecked. Full130stems/othercollections/archive cleanup, additional tools/reporters/docs stay active. No native calls, owner installs, archive writes, agents, commits or pushes occurred in this task.

Task3i review fix1 — completed writes and shared tables

P2: the shared seven-editor Apply boundary now retains a known successful write across every later exception, including UpdateAll, post-write tick collection and refresh. The message reports that kerning was applied, keeps the original cause and offers Undo/Refresh. It resets the write marker before preflight so an earlier success cannot relabel a new refusal; partial-writer diagnostics stay unchanged. Staging/results clear and Apply disables before the guarded callback reports it. P3: both selected editors reuse the existing shared table builder; exact headers, manual checkbox callbacks and Exceptions240minimum remain. Prior35menus unchanged.

Tests first: five genuine failure-injection REDs through actual inherited guarded callbacks, with two preflight/partial-error controls passing. The seven focused cases then pass after the shared fix. Original26frozenfiles and initial report were verified and copied to the workspace task-3i-before-fix1 directory before edits. Native/artifact reacceptance stays controller-owned; full results and snapshot delta are retained in task-3i-report/fix1-freeze. No native call, owner install, archive edit, commit or push occurred.

Fix1 final direct verification uses the same portable full-suite commands above: App427passed13.82s, Scriptmix245passed0.34s with all37provenance hashes; changed Python Ruff and both diff checks exit0. Seven new guarded-callback controls pass; original constants/callbacks and prior35mapping/menu bytes remain unchanged. Native acceptance of these changed bytes remains pending controller rerun.

Controller Task3i acceptance

Source/fix1 reviews SPEC PASS/QUALITY APPROVED. Installed final wheel native combined37 gate:301original workflow checks,99complete preservation/history, 94safety (12FontInfo+32Names+8classes+42editor staleApply),32writer controls, 12post-write failure controls,15realchooser/export checks andClose37/37pass. 96source/dependency hashes match;importsrestored,ownedfontsclosed. Both selected editors retain originalnativeoracles and14exactfullfont/firstUndo/Redo/reopen checks. Owned UpdateAll failure injection proves honest completed outcome and exactUndo/Redo;nativefunctionrestored in finally. Earlier chooser timeout retained in tools37-v1, boundedcalls pass in tools37-v2, no waivedoracles.

App427source/123installedwheel/123installedsdist tests andScriptmix245against actualwheel withno sourceoverride pass;37provenance hashes pass.57App sourcefiles match both artifacts;licenses/NOTICE/privacy checks pass. Exact rtk proxy argv, exitcodes,freezes/reviews andsnapshots retained in issue111-tools37-v2 and kerning-remaining-fix1-v1 workspaceevidence. Bothnative tickedscreenshots checked. Full130stems/othercollections/archivecleanup/newtools/reporters/docs stayactive. No owner-siteinstall ororiginalinput removal. Controller prepares D12/D17 release.

Task3j — four Proof tools, source milestone

Glyph Grid, Text By Master, Waterfall and Word Finder retain all original controls, defaults, classes, keys, registry entries and scenario-accessed globals. App shares actual transformed outline assembly, advance-only text, exact original English/Latin words and filters, three native painters, scroll/footer composition, complete-scan guards and existing owned dialog lifecycle. Grid fits one scale to all full bounds; deliberate Reload adopts current font/selection. Automatic refresh/paint/Copy refuses switched/closed fonts before cached-wrapper access. Paint create/draw/hook/end errors clear incomplete results; inactive devices and false end() results are diagnosed. Copy is host-free tested only (D8).

Tests first: App baseline427pass14.11s; Scriptmix baseline245pass0.28s. Four missing menus produce RED4fail/245pass; later inactive-painter/false-end controls produce RED2fail/282deselected before their minimum guard fix. Final direct source verification, all exit0:

  • App cwd: rtk proxy ./test.sh:441passed13.92s (14new shared-helper cases).
  • Scriptmix cwd: rtk proxy env SCRIPTMIX_APP_REQUIREMENT=../.local/issue111-app-v0.2.9-dist/fontlab_fontlabapp-0.2.9-py3-none-any.whl SCRIPTMIX_APP_SOURCE=../.worktrees/issue111-app/src/fontlabapp ./test.sh --original-source-root ..:284passed0.32s (245baseline +39new).
  • Workspace cwd: rtk proxy uvx ruff check .worktrees/issue111-app/src/fontlabapp/proof.py .worktrees/issue111-app/src/fontlabapp/_proof_views.py .worktrees/issue111-app/src/fontlabapp/_proof_dialog.py .worktrees/issue111-app/tests/test_proof.py fontlab-python-scriptmix/Scripts/Proof fontlab-python-scriptmix/tests/test_proof.py fontlab-python-scriptmix/tests/conftest.py fontlab-python-scriptmix/tests/test_reports.py fontlab-python-scriptmix/tests/test_portability.py:allchecks passed.
  • Workspace cwd: rtk proxy git -C fontlab-python-scriptmix diff --check and rtk proxy git -C .worktrees/issue111-app diff --check:exit0 each. All41provenance hashes pass; prior37rows/menu bytes unchanged. Original signal connection expressions are AST-identical; strict audit checks exact original constants/embedded words. README197lines; helpers require forthcoming App0.2.10 or explicit current source override/current built wheel; no index claim.

Attempts retained: initial focused run36pass/1test-double failure (base Widget.text was mistaken for a text control), corrected by checking setText; next focused 42pass/1opening-failure fixture failure (default text had no encoded characters, so injected findName was never reached), corrected to inject glyph_run. First App test launch from workspace root failed because no root test.sh exists; one later edit/format/wc batch used Scriptmix cwd with workspace-relative paths and failed before writes, then ran correctly from workspace. Initial Ruff failures were native-boundary BLE001 comments, unused descender/import sorting/export annotations; all corrected. lean-ctx binary and rules file are absent; rtk proxy was used. No failing product behavior is being waived.

Wait, but: owned doubles and external Qt mathematical paths prove source contracts only. Source review, built wheel/sdist/license/privacy/byte audits, unchanged native original scenarios and exact path bounds, real screenshots and controls, complete saved-font/history invariance, stale/read/paint safety and actual native Close remain controller gates. No native runs, owner installs, canonical App edits, commits/pushes, archive writes/removal or child agents. Full130stems/othercollections/cleanup/reporters/docs remain open. Detailed exact commands and all changed/untracked hashes are in the workspace Task3j report and freeze; no source promotion is authorized by host doubles alone.

Task3j fix1 — R1 initial native-read containment

The independent review correctly found that earlier initial_refresh covered late proof scans only: package/current/id, selection/maps/characters and master reads could escape before a closable panel existed. All29frozen files and the original report/freeze were hash-verified and snapshotted before edits under the workspace task-3j-before-fix1 directory; original task-3j-freeze.json is unchanged.

Proof constructors now build safe empty state and complete status/Close/controls before any font read. The existing snapshot wrapper includes the whole initial source load: bind current/id, read per-tool state, recheck identity, then scan. Failed early reads discard incomplete caches, leave an invalid empty diagnosed panel and preserve any known bound id for guarded retry. A binding failure before an id is obtained has no identity to retain. Grid explicit Reload intentionally resets initial binding so it can adopt current font/selection or no font. Waterfall publishes original master choices/active-master default with signals blocked and previous block state restored in finally; no signal recursion or native active-master change is introduced. Defaults, aliases, every original _connect expression, prior37menu bytes/mapping rows and native oracles remain.

Tests first: actual constructor/main RED15fail/284deselected0.31s, covering current-package and id for allfourtools plus selection/maps/characters/master list/active-master errors. Each injected read asserts that Close/status already exist. Those15then pass with guarded retry, registry publication and Close. Four additional cases close directly while the initial read still fails; four prove automatic retry refuses a different known font while Grid Reload can explicitly adopt it. Focused final23pass/284deselected0.09s.

Fresh full source checks, exit0 each:

  • App cwd rtk proxy ./test.sh:441passed13.61s.
  • Scriptmix cwd rtk proxy env SCRIPTMIX_APP_REQUIREMENT=../.local/issue111-app-v0.2.9-dist/fontlab_fontlabapp-0.2.9-py3-none-any.whl SCRIPTMIX_APP_SOURCE=../.worktrees/issue111-app/src/fontlabapp ./test.sh --original-source-root ..:307passed0.43s (284old +23new).
  • Workspace cwd rtk proxy uvx ruff check .worktrees/issue111-app/src/fontlabapp/proof.py .worktrees/issue111-app/src/fontlabapp/_proof_views.py .worktrees/issue111-app/src/fontlabapp/_proof_dialog.py .worktrees/issue111-app/tests/test_proof.py fontlab-python-scriptmix/Scripts/Proof fontlab-python-scriptmix/tests/test_proof.py fontlab-python-scriptmix/tests/conftest.py fontlab-python-scriptmix/tests/test_reports.py fontlab-python-scriptmix/tests/test_portability.py:allchecks passed.
  • rtk proxy git -C fontlab-python-scriptmix diff --check and rtk proxy git -C .worktrees/issue111-app diff --check:exit0 each. All41mapping pairs pass strict originals audit; prior37rows/menu bytes unchanged; allfour original signal action expressions remain AST-identical. Initial lint flagged the new test-only class tracking list (RUF012); ClassVar annotation and proper docstring placement corrected it before final lint. No product failures waived. New fix1 freeze records every file/status/hash and explicit old/new delta.

Wait, but: these results prove the bounded source fix only. Parent reported that pre-fix native four-tool originals/full-font/stale/paint/Close checks passed, and that a broader41tool run later hit an unrelated chooser deadline. Neither is native evidence for these changed bytes. Parent owns scoped review, rebuilt artifacts and native reacceptance. No native calls, commits/pushes, owner installs, archive writes/removal, canonical App edits, Fontport/Glyport changes or agents. Full Issue111 remains active; no native/promotion TODO is ticked by this fix.

Controller Task3j acceptance

Source/fix1 reviews SPEC PASS/QUALITY APPROVED. Final installed-wheel core41 gate passes336original workflow checks,107complete preservation/history,123safety (94prior+29Proof),32writer/12postwrite/12paint/24opening errorcontrols andClose41/41. All103exercised source/dependency hashes match;importsrestored,ownedfontsclosed. Separate fresh same-wheel realchooser/export gate15checks passes. Earlier full41 andfocusedchooser calls hit5s native deadline; splitting launch/mode/open into separate bounded calls retains everyoracle andpasses. Thosefailures remainretained.

Proof4 originaloracles pass35checks,8strictcompletefont/workspace/history,29stale/ explicitReload,12realpaintfail/recovery and24nativeearlyopening controls. Native function injections alwaysrestore functions/aliases; eight diagnosedinvalidvisible panels close with actualQObjectdestruction/registryrelease andfont/historyexact. All15Gridcells, transformedAacute, fullampersandlastrow, textweights/widths and missingglyphboxes visuallyinspected. Clipboard remainsnative-excludedD8.

App441source/137installedwheel/137installedsdist tests andScriptmix307against actualwheel withno sourceoverride pass;41provenance hashes pass.60Appsourcefiles matchboth artifacts/installs;licenses/NOTICE/privacy audits pass. Exactrtkproxy commands/exitcodes/freezes/reviews in tools41-v2, proof-fix1-v1 andproof-choosers-v2 workspaceevidence. Full130stems/othercollections/archivecleanup/newtools/reporters/ docs stayactive; no originalremoved orowner-siteinstall. ControllerpreparesD12/D17.

Task3l — four complete read-only Masters reports, native pending

Independent branches start at released App541a399/v0.2.10 and Scriptmix2b1ad75/v1.0.5. Held Names editors/canonical checkouts are untouched. Complete canonical originals and native scenario DRIVE/check interfaces were read/AST-studied without execution. All40archived copies and4scenario hashes are retained in the workspace freeze; only L2 differs, in palette alias/active color safety. The canonical color copying/inactive palette is preserved.

Four menus retain every original control/default/KEY/class/global interface: Overview ordered locations/metrics/angles and explicit master double-click; Width Chart actual12series labelled lines; Glyph Weight Chart actual10groups, per-master bars/legend and units² table; Compatibility selected/whole-font tree, node patterns/own contours/anchor names/component order/auto/missing semantics and explicit failing-glyph selection. Shared reads/geometry load lazily through fly.ap; no flGlyph.fgGlyph getter, dependency or font/history write is added. Temporary italic-angle master reads restore in finally. Huge equal-value tick ranges use ULP-aware bounded generation to avoid a nonadvancing float loop.

UI builds status/Close before any fallible bind, identity, selection, master or scan read. Failed scans clear results/native handles but retain a known numeric font binding; ordinary refresh cannot adopt another font. Explicit actions check master order/current master and exact displayed structures/metadata/axis labels. The existing Proof/Names shell owns signals/registry/deletion; ProofView owns painter containment/finally. All original native action connection expressions and constants match ASTs; all41previous menu bytes/manifest rows remain exact. Four source/destination mappings append, total45. README App190/Scriptmix200lines retain prior native acceptance while marking this source milestone pending.

Fresh exact commands/results (exit0 unless stated):

  • App cwd rtk proxy ./test.sh: baseline441passed13.07s, later457passed12.84s (default Python3.12.12). The canonical test.sh is unchanged.
  • Scriptmix cwd rtk proxy env SCRIPTMIX_APP_REQUIREMENT=../../.local/issue111-app-v0.2.10-dist/fontlab_fontlabapp-0.2.10-py3-none-any.whl SCRIPTMIX_APP_SOURCE=../issue111-masters-app/src/fontlabapp ./test.sh --original-source-root ../..: baseline307passed0.56s; final382passed0.52s (Python3.11.16). This explicitly resolves the new App source while retaining the released wheel as dependency; it is not an installed-new-artifact claim.
  • App cwd rtk proxy uv run --extra test python -m pytest -q tests/test_masters.py: initial RED3failed (missing helper and package lazy-native fallback); GREEN3, expanded16passed0.02s. One expanded collection failed with NameError because Ruff had removed a previously unused pytest import; restored before acceptance.
  • App cwd rtk proxy env UV_PYTHON=cpython-3.11-macos-aarch64-none UV_PROJECT_ENVIRONMENT=.venv311 ./test.sh:457passed13.17s, arm64CPython3.11.14. Only this task-created scratch environment was then removed; final environment is ignored .local/tests311.
  • App cwd rtk proxy env UV_PYTHON=cpython-3.11-macos-aarch64-none UV_PROJECT_ENVIRONMENT=.local/tests311 ./test.sh: final458passed12.70s (441prior+17new). Fresh subprocess confirms masters_api imports without fontlab/PythonQt/FL.
  • Workspace cwd rtk proxy uvx ruff check .worktrees/issue111-masters-app/src/fontlabapp/scripting.py .worktrees/issue111-masters-app/src/fontlabapp/masters.py .worktrees/issue111-masters-app/src/fontlabapp/_masters_dialog.py .worktrees/issue111-masters-app/src/fontlabapp/_masters_views.py .worktrees/issue111-masters-app/tests/test_masters.py .worktrees/issue111-masters-scriptmix/Scripts/Masters .worktrees/issue111-masters-scriptmix/tests/test_masters.py .worktrees/issue111-masters-scriptmix/tests/test_portability.py .worktrees/issue111-masters-scriptmix/tests/conftest.py .worktrees/issue111-masters-scriptmix/tests/test_reports.py: allchecks passed.
  • Workspace cwd rtk proxy git -C .worktrees/issue111-masters-app diff --check and rtk proxy git -C .worktrees/issue111-masters-scriptmix diff --check:0each.

Retained RED/attempts: missing-menu test run4failed307passed before implementation; first full native-shaped run364passed3failed (two assertions expected the word inactive while shared painter correctly reported "not active", and an AST literal audit mistakenly evaluated an imported METRICS alias). Assertions now compare the real message and literal defaults; no product behavior was waived. Intermediate Ruff reports flagged import order, original extracted extra parentheses, broad unavailable-axis catches, public helper aliases, mutable COLUMNS ClassVar, late-bound test loop, pairwise preference, unused test locals and explicit subprocess check; corrected. A relative rg call launched from App cwd used workspace-relative paths and reported missing files; the succeeding geometry tests in that shell still passed. The lean-ctx rules/binary are absent; rtk proxy was used throughout. No environment values/private assets were printed.

Source checks cover original no-font constructors,6early failure stages/tool, persistent failed-panel Close, bound retries, switched/closed font refusal, structural/master/action staleness, whole-font scope, auto/missing layers, glyph limits, 0/None widths, nested counters, cubic12-step flattening, affine component area, pattern/order incompatibility, huge/negative/constant ticks, actual native- shaped line/bar commands, painter/create/inactive/end/report failures and recovery, signal/registry cleanup and pre-Masters dependency refusal. Final75new Scriptmix checks and17new App checks complement the complete prior suites.

Wait, but: owned doubles and geometry calculations prove source contracts only. Independent frozen-source review, built wheel/sdist/privacy/license/byte audits, unchanged native scenarios with post-launch seed baselines, real charts/screenshots, complete font/workspace/history invariance, original explicit UI actions, safety controls and actual native QObject destruction remain controller gates. No native calls, owner-site installs, source promotion, commits, pushes, tags, releases, archive mutation/removal or child agents occurred. Full Issue111 stays active.

Task3l fix1 — independent review I1/I2/I3 and M1

The independent review REQUEST CHANGES findings are reproduced and fixed. The original task-3l-freeze.json is preserved byte-for-byte; parent-retained 26-file preimage is verified against that freeze. This round changes only the shared Masters dialog, Compatibility's captured source scope, their regression tests, affected manifest hash, README delimiter and bounded milestone logs.

I1: every bound-font refresh now reads the actual current ordered master list and active master before scanning, uses that domain for the scan, and refuses publication if either changes during the scan. It never labels old-domain results with a newly read domain. Existing font identity guards remain.

I2: Compatibility records the exact ordered scanned names and Whole/Selected scope. Whole-font selection preflight checks current full name/order membership before reading tracked signatures; insertions, deletions and reordering refuse the action without changing selection until a complete refresh. Selected scope retains its original captured names and permits unrelated added glyphs.

I3: invalidation requests a chart update only when it actually clears nonempty master/series/group content. Repeated empty invalidations schedule no replacement paint. A deterministic queue driving the actual chart paintEvent with persistent switched/closed font, painter creation, draw or end faults drains within two frames for each chart; explicit refresh recovers and actual owned-double Close clears signals/callbacks. Native event-loop behavior remains parent-owned.

M1: restore README's closing YAML delimiter on its own line and remove one redundant blank line. Frontmatter is exact and Scriptmix remains200lines; App remains190. All original UI controls/action-expression ASTs are unchanged. All45manifest pairs pass; prior41rows/menu bytes remain exact.

Exact commands and observed output (all use rtk proxy):

  • Scriptmix cwd rtk proxy env SCRIPTMIX_APP_REQUIREMENT=../../.local/issue111-app-v0.2.10-dist/fontlab_fontlabapp-0.2.10-py3-none-any.whl SCRIPTMIX_APP_SOURCE=../issue111-masters-app/src/fontlabapp ./test.sh --original-source-root ../.. -k review: RED exit1,16failed23passed360deselected0.24s; GREEN exit0,39passed360deselected0.12s. This selection includes existing tests whose names match review as well as17new regression cases.
  • App cwd rtk proxy .local/tests311/bin/python -m pytest -q tests/test_masters.py -k review: RED exit1,8failed17deselected0.04s (old master domain, absent ordered-membership read, repeated paint requests); GREEN exit0,8passed17deselected0.02s.
  • App cwd rtk proxy .local/tests311/bin/python -m pytest -q tests/test_masters.py: exit0,25passed0.04s onarm64Python3.11.14. This is the complete affected App suite, not a new whole-App count; prior whole-App458 remains historical source evidence.
  • Scriptmix cwd rtk proxy env SCRIPTMIX_APP_REQUIREMENT=../../.local/issue111-app-v0.2.10-dist/fontlab_fontlabapp-0.2.10-py3-none-any.whl SCRIPTMIX_APP_SOURCE=../issue111-masters-app/src/fontlabapp ./test.sh --original-source-root ../..: exit0,399passed0.53s onPython3.11.16. Complete suite includes dependency portability, all45source/menu hashes, original constants/action ASTs and prior menus.
  • Workspace cwd rtk proxy uvx ruff check --fix .worktrees/issue111-masters-app/src/fontlabapp/_masters_dialog.py .worktrees/issue111-masters-app/tests/test_masters.py .worktrees/issue111-masters-scriptmix/Scripts/Masters/'Compatibility Check.py' .worktrees/issue111-masters-scriptmix/tests/test_masters.py: exit0,allchecks passed.
  • Workspace cwd rtk proxy uvx ruff format .worktrees/issue111-masters-app/src/fontlabapp/_masters_dialog.py .worktrees/issue111-masters-app/tests/test_masters.py .worktrees/issue111-masters-scriptmix/Scripts/Masters/'Compatibility Check.py' .worktrees/issue111-masters-scriptmix/tests/test_masters.py: exit0,3reformatted1unchanged. Final same-path rtk proxy uvx ruff check without --fix: exit0,allchecks passed.
  • Workspace cwd rtk proxy git -C .worktrees/issue111-masters-app diff --check and rtk proxy git -C .worktrees/issue111-masters-scriptmix diff --check: exit0each.
  • Workspace rtk proxy python3 - assertion check: both README first3lines equal ---, this_file: README.md, ---; App190/Scriptmix200lines, exit0. Final freeze re-reads all changed files,40original copies,4scenarios plus_vfj, original freeze and26preimage hashes and verifies prior41rows/menus and all45mappings.

Wait, but: this fixes the source review findings only. A fresh independent fix review, built artifacts and every parent-owned native original/full-font/ workspace/history/painting/initial-failure/Close gate are still required. No native call, artifact build/install, canonical/held Names change, dependency, commit/push/release/tag, original-source edit/removal or subagent occurred. The new handoff is task-3l-fix1-freeze.json; the original freeze stays unchanged.

Task3l fix2 — native chart endpoint clipping

Controller native fix1 acceptance passed43original workflows,8complete-font/ workspace/history controls,10paint,24opening,43safety andClose4, but its real recovered Width Chart screenshot exposed max713 above upper tick700. That retained failing screenshot is in workspace evidence issue111-masters-fix1-v1/masters-paint-recovery/masters_width_chart-recovered.png. Those pre-fix2 native passes do not establish visual acceptance for this change. The controller's WORK ruling authorizes correcting this inherited original defect: axis spacing may change; all chart/UI/12-step area algorithms remain intact.

The only product change is nice_ticks' endpoint logic. Nice step selection, function signature, ULP guard, validation and bounded iteration remain exact. Include the first nice tick that reaches/exceeds high, correcting an occasionally rounded-up lower floor; ensure at least two distinct endpoints for constant axes. The actual native494..713 and499..713 ranges now produce [450,500,550,600,650,700,750], preserving step50. Bar range0..625 now reaches800 with its original step200. No chart view, menu/control, area calculation, font/native/history access, dependency or source provenance mapping changed.

Tests first, exact commands/output:

  • App cwd rtk proxy .local/tests311/bin/python -m pytest -q tests/test_masters.py -k fix2: RED exit1,11failed3passed25deselected0.05s; GREEN exit0,14passed25deselected0.01s. Tests cover native494/499..713, zero/positive/negative/mixed endpoints, constant0/+500/-500, constant +/-1e300, huge signed varying ranges and tiny finite ranges. All ticks remain finite, strictly ordered, bounded and cover both endpoints; exact nice-step outputs are asserted.
  • Scriptmix cwd rtk proxy env SCRIPTMIX_APP_REQUIREMENT=../../.local/issue111-app-v0.2.10-dist/fontlab_fontlabapp-0.2.10-py3-none-any.whl SCRIPTMIX_APP_SOURCE=../issue111-masters-app/src/fontlabapp ./test.sh --original-source-root ../.. -k fix2: RED exit1,3failed10passed399deselected0.12s, actual native-shaped line drawing places max outside axis. Added the explicit0..625 bar ceiling case as well; GREEN exit0,14passed399deselected0.10s. Actual LineChart.drawEllipse centres and BarChart.drawRoundedRect data rectangles are checked against their drawn axis bounds for every plotted value, including constant/huge cases. The complete real draw methods execute; no substitute summary or painter-count-only oracle.
  • App cwd rtk proxy .local/tests311/bin/python -m pytest -q tests/test_masters.py: exit0,39passed0.05s, arm64Python3.11.14. This is the entire affected suite; no new whole-App run is claimed.
  • Scriptmix cwd rtk proxy env SCRIPTMIX_APP_REQUIREMENT=../../.local/issue111-app-v0.2.10-dist/fontlab_fontlabapp-0.2.10-py3-none-any.whl SCRIPTMIX_APP_SOURCE=../issue111-masters-app/src/fontlabapp ./test.sh --original-source-root ../..: exit0,413passed0.62s, Python3.11.16. Complete menu/hash/original-source/constant/signal-AST/portability checks pass; all45menu bytes/mappings are unchanged from fix1 and prior41 remain exact.
  • Workspace cwd rtk proxy uvx ruff check --fix .worktrees/issue111-masters-app/src/fontlabapp/masters.py .worktrees/issue111-masters-app/tests/test_masters.py .worktrees/issue111-masters-scriptmix/tests/test_masters.py: exit0,allchecks passed. Same paths with rtk proxy uvx ruff format: exit0,2reformatted1unchanged. Final same-path Ruff without --fix: exit0,allchecks passed.
  • Workspace cwd rtk proxy git -C .worktrees/issue111-masters-app diff --check and rtk proxy git -C .worktrees/issue111-masters-scriptmix diff --check: exit0each.
  • Workspace rtk proxy python3 - scoped preimage diff confirms only nice_ticks docstring and endpoint logic changed in product code. Freeze verification re-reads all26fix1preimages,40original copies,4scenarios plus_vfj and both prior immutable freezes. README remains190/200lines with exact frontmatter.

Wait, but: the retained native screenshot is proof that paint-no-exception controls alone were insufficient. This source correction still needs scoped independent review and parent-owned rebuilt artifacts, native reruns and actual screenshot inspection before acceptance. Existing overflowing-span refusals are unchanged; this is a bounded endpoint correction, not a numeric API redesign. No native/artifact/owner-site action, canonical/held Names/original edit, new menu, commit/push/release/tag or subagent occurred. Re-freeze is task-3l-fix2-freeze.json; task-3l-freeze.json and task-3l-fix1-freeze.json remain unchanged. Native and whole-issue completion remain pending.

Task3l native acceptance — integration/release pending

Final fix2 installed-artifact acceptance passes on FontLab9.0.9784: 43original workflow checks,8complete saved-font/workspace/history checks, 12real paint controls including actual axis coverage and six-event settling, 24opening faults,43stale/positive safety and actual Close destruction4/4. All67exercised source hashes match; imports/paths restore. Four fresh chart screenshots were inspected and the713upper-axis clipping is resolved. Original post-launch Overview/Compatibility seed baselines remain separately captured.

The same fix2 wheel passes the entire prior41-tool native regression: 336workflows,107preservation/history,123safety,80error controls andClose41/41; 106source hashes verify, with imports/paths restored. Combined45native gates: 379workflows,115preservation,166safety,116error controls andClose45/45. No results are inferred by adding unrun tools. These are native-verified candidate stems; the released count remains41until reviewed integration/release.

Parent source App480 and actual-new-wheel Scriptmix413 tests pass; independently installed wheel/sdist each pass163targeted tests. All63production Python files match source/install/artifacts. All45menu mappings pass; prior41rows/menu bytes remain exact. Separate chooser checks8+7belong to fix1 artifacts; their chooser and common helper source is unchanged in fix2. They are not a new fix2 chooser run. The scoped fix2 source review approved the endpoint correction. Its deferred extreme-number endpoint observation is retained in the private review; this native acceptance covers practical font fixtures, not a numeric API redesign.

Reviewed integration and release remain pending. Full130-stem Issue111/archive migration/cleanup/additional tools/docs and held7Names editors are unchanged and separate. No original source is removed and no owner environment install occurs.

Acceptance documentation changes only README/PLAN/TODO/WORK/CHANGELOG in each repository. Existing failed attempts and historical pending statements remain chronological evidence; this entry records the accepted current four-tool state. README frontmatter/line counts, existing local links/code fences, complete63-file production hashes, all45menu/manifest hashes, the16non-document frozen payloads and diff whitespace were checked directly. Meaningful doc-only commands: rtk proxy python3 - (standard-library assertions retained in controller report), rtk proxy git diff --check from each repository. No code suite or native run was repeated for documentation. Frozen reports retain exact checks and hashes outside public distributions. No production/test/provenance/NOTICE/dependency, canonical/held Names, commit/push/promotion/tag/release or agent action occurred.

Verified Masters tag receipt — 2026-10-18

Reviewed App source5bb14a5/README92657b1 and Scriptmixdd04bf0/README97b0f11 integrated through temporary main worktrees. D17 gitnextver created Appv0.2.11 (e84fb157318cfc0f2fb27f4fe67251c703237119) and Scriptmixv1.0.6 (adda1608e9212934927c625358a2e7d27ab2a3e1); all earlier tag IDs remain exact. Canonical/main/Masters refs agreed at the tag checkpoint. Held Names source is retained on its separate branch and is excluded from these releases.

Independent fresh tag downloads pass App480source tests, Scriptmix413standalone tests with the newly built stable wheel and163wheel/163sdist installed tests. Both package metadata versions are0.2.11;63production files match native bytes, 45menu mappings and license/NOTICE/privacy audits pass. The downloaded release wheel passes all four original Masters workflows again inside FontLab9784: 43workflow/8preservation/12paint/24opening/43safety and actualClose4, with67source hashes and import restoration verified. Native recovered chart screenshot inspected. No owner-site install, original removal, PyPI or GitHub release-object claim. This post-tag PLAN/TODO/WORK receipt changes no product byte or existing tag.

Task3m — metrics and outline inspector source, native pending

Four complete original inspectors are implemented only on the independent issue-111-inspectors worktrees: Spacing String Preview, Width Table, Contour Order View and Node Statistics. All40archived copies were read/AST-compared; only the four L2 copies differ, in older palette alias/active-theme handling. Original calculations, raw node-polygon winding, starts/order, counts, missing/ zero/auto rules, controls/defaults/title/key/classes/helper aliases are retained. The canonical4originals,4scenarios plus _vfj helper and full130-stem source-copy manifest are frozen by hash in the workspace handoff; none was executed/edited.

Shared inspector calculations reuse accepted Proof paths and Masters native geometry/selection. Existing owned Proof/Names/Masters shell and safe painter boundary provide complete controls/status/Close before reads, bounded complete master-domain scans, exact source/master guards, ordered Whole-font membership, failed-read/paint invalidation, visible diagnosis and disconnect-before-delete. Spacing preserves original paint_error=None success. Plain transformed raw-node/ closure snapshots avoid assuming native QPainterPath equality. Width actions also reject fractional raw advance changes hidden by rounded display values. Report-hook failures still clear values and leave a visible diagnosis; persistent empty invalidation drains its repaint queue. No new dependency/framework.

All45released menu bytes and provenance rows remain exact;4pairs append,total49. The existing63Appproduction files remain exact except the lazy additions at the end of scripting.py;3new modules bring production to66. Prior tests are retained; manifest assertions extend45to49and two Title Case categories. Scriptmix test.sh adds SCRIPTMIX_PYTHON (default3.11) for explicit host-architecture verification. README remains<=200lines and retains prior factual acceptance/install recipes. Native/artifact/review gates are pending. Node's original post-launch seed remains in the unchanged original scenario; parent owns its fresh post-seed full baseline. No canonical/held Names/old originals/root verification, owner install, FontLab session, commit/push/tag/release or subagent action was performed by this task.

Meaningful exact commands and results (workspace cwd unless stated):

  • App cwd: rtk proxy uv run --extra test --python cpython-3.11-macos-aarch64-none python -m pytest -q: baseline480passed13.31s,exit0.
  • Scriptmix cwd: rtk proxy env SCRIPTMIX_APP_REQUIREMENT=../issue111-inspectors-app SCRIPTMIX_APP_SOURCE=../issue111-inspectors-app/src/fontlabapp UV_PYTHON=cpython-3.11-macos-aarch64-none ./test.sh --original-source-root ../..: baseline413passed0.79s,exit0. That baseline script hardcoded3.11; final runs below explicitly select arm64.
  • App cwd: rtk proxy uv run --extra test --python cpython-3.11-macos-aarch64-none python -m pytest -q tests/test_inspectors.py: initial RED missing helper/native fallback collection exit2; first8passed0.01s; expanded17tests retained.
  • Scriptmix cwd: rtk proxy env SCRIPTMIX_APP_REQUIREMENT=../issue111-inspectors-app SCRIPTMIX_APP_SOURCE=../issue111-inspectors-app/src/fontlabapp UV_PYTHON=cpython-3.11-macos-aarch64-none ./test.sh tests/test_inspectors.py: RED4missingmenus/413priorpasses,exit1. Native-shaped expansion first10failures/43passes exposed shared flagged-method/list collision and missing double Qt roles/clear; fixed without reducing expected behavior. Intermediate2failures/79passes were a twice-reversed master fault and incomplete painter-font double; corrected injection/double. Direct UI review restored class ACTION/default widths/defaultClose; exact assertions added.
  • App cwd: rtk proxy env UV_PYTHON=cpython-3.11-macos-aarch64-none ./test.sh -q: final497passed (480prior+17new),exit0; final elapsed in workspace report.
  • Scriptmix cwd: rtk proxy env SCRIPTMIX_APP_REQUIREMENT=../issue111-inspectors-app SCRIPTMIX_APP_SOURCE=../issue111-inspectors-app/src/fontlabapp SCRIPTMIX_PYTHON=cpython-3.11-macos-aarch64-none ./test.sh --original-source-root ../..: final502passed (413prior+89new),exit0. All49original/destination pairs audited. One preceding run497passed/1failed honestly caught a stale new-menu hash after source edits; regenerated only4newdestination hashes, then full pass.
  • App cwd: rtk proxy uv run --extra test --python cpython-3.11-macos-aarch64-none python -c 'import platform,sys; print(platform.machine(), platform.python_version(), sys.executable)': arm64/3.11.14,exit0.
  • Scriptmix cwd: rtk proxy uv run --no-project --python cpython-3.11-macos-aarch64-none --with pytest --with ../issue111-inspectors-app python -c 'import platform,sys; print(platform.machine(), platform.python_version(), sys.executable)': arm64/3.11.14,exit0.
  • Workspace scoped rtk proxy uvx ruff check and rtk proxy uvx ruff format --check: pass, exact file arguments retained in task-3m-report.md. Initial lint correctly found public alias/import ordering/unused test fixture issues; exports restored explicitly and final lint passes.
  • Each worktree: rtk proxy git diff --check: exit0.

Other retained attempts: initial Qt5officialdoc URLs were inaccessible; official Qt6QPainter/end and table-item/setData references were read only for common semantics. Exact native metrics/bounds/width/node-count/closed declarations were confirmed in local Proteus/pygate sources; no new/guessed overload is introduced. First source lookup omitted the Proteus path and returned rg errors, corrected. Several exploratory commands used workspace instead of repository cwd (missing pytest/test.sh/report path); corrected to explicit workdirs, with no file damage. One parser test expected a space after /token delimiters; corrected to the exact original delimiter behavior rather than changing production. Intermediate Ruff reports and manifest mismatch were followed by full fresh passing checks.

Next: parent independent source review, wheel/sdist/install/privacy/license checks, unchanged4native scenarios, complete font/design/classes/metadata/ workspace/dirty-history/master preservation, Node post-seed baseline, actual painting/screenshots/Close, all45regression and reviewed promotion. Source tests and test doubles are not native acceptance. Full130-stem goal remains active.

Final boundary RED: Scriptmix ./test.sh -k final_master_domain under the exact arm64 environment above failed4/498deselected (exit1), exposing master-domain changes during final source-cache reads after the inherited master check. The inspector adapter retains the shared scan and adds a final binding/domain/Whole-font check after all snapshot reads; no released helper is changed. Final full result recorded in the handoff.

Final frozen-source verification: App497passed12.84s, Scriptmix502passed0.67s on explicit arm64CPython3.11.14, exit0 each. Scoped Ruff/check+format13files and both git diff --check exit0. Late4domain-boundary RED tests are GREEN. Only SPDX test comments were added after the final runtime suites; syntax/lint/format/source hashes were rechecked. Native/artifact/review acceptance remains pending.

Task3m Minor fix1 — explicit unexercised-case skips

Source review approved the production source with no Important/Critical issue. The one Minor reporting fix changes exactly two early-return test paths to pytest.skip: Spacing Preview has no selection read, and fidelity auditing needs --original-source-root. No product/README/NOTICE/other test changed. The initial report was copied byte-for-byte to task-3m-report-initial.md before appending; initial source freeze7d1c84a84fbea619e4531bb44810a1e40ca92c238dbb7c1371cc96d555a7601a is retained unchanged. task-3m-fix1-freeze.json records the separate test/doc delta.

Focused exact commands from Scriptmix cwd (both exit0, explicit arm64CPython3.11): rtk proxy env -u SCRIPTMIX_APP_SOURCE uv run --no-project --python cpython-3.11-macos-aarch64-none --with pytest --with '../../.local/issue111-app-inspectors-dist/fontlab_fontlabapp-0.2.12.dev1+g8cd9044cc.d20261017-py3-none-any.whl' python -m pytest -q tests/test_inspectors.py -rs Result86passed,2skipped0.19s: the selection-fault noncase and unavailable source fidelity evidence are explicitly skipped. rtk proxy env -u SCRIPTMIX_APP_SOURCE uv run --no-project --python cpython-3.11-macos-aarch64-none --with pytest --with '../../.local/issue111-app-inspectors-dist/fontlab_fontlabapp-0.2.12.dev1+g8cd9044cc.d20261017-py3-none-any.whl' python -m pytest -q tests/test_inspectors.py -rs --original-source-root ../.. Result87passed,1skipped0.20s: original fidelity is exercised, only the selection noncase skips. These are88collected inspector cases; prior502full-suite passes historically included the unexercised selection noncase as a pass. No fullApp or fullScriptmix suite was rerun for this two-line test-only change; production approved bytes and the parent's concurrent native/artifact work remain untouched.

rtk proxy uvx ruff check tests/test_inspectors.py and rtk proxy uvx ruff format --check tests/test_inspectors.py: exit0 each. rtk proxy git diff --check: exit0. Because the new testfile is untracked against its branch base, a direct full-byte comparison to the reviewed retained preimage verified that exactly the two skip substitutions changed. Standard-library audit verifies all66production files, previous45menus/rows,49original pairs and all other frozen source bytes remain exact. No commits/pushes/native calls occurred.

Task3m accepted native/artifact evidence — documentation finalization

Production source review APPROVE has no Important/Critical findings. M1 is addressed by explicit pytest.skip reporting; frozen fix1 test bytes stay exact. Controller native v3 passes all four unchanged original scenarios on the same installed wheel:41 workflow,8 complete saved-font/design/classes/metadata/workspace/ history/master preservation checks,10actual paint,24 opening faults,59 safety and actualClose 4/4. All 70 current source hashes and import/path restoration match. The original Node DRIVE[0] triangle/notification remains exact; controller captures its fresh full preservation/history baseline before refresh/selection/Whole-font operations. Seven images were visually inspected; all 15 final image bytes are identical to retained v1. Evidence: workspace verification/issue-101-ecosystem/ evidence/issue111-inspectors-v3/{summary.json,visual-inspection.json}.

Retained v1/v2 failures were controller fixture errors (quarter-width assertion and native nodes property), not product edits/failures. The native Width control requested655.25 and observed655; final668 uses the supported+13change. Fractional raw-width staleness is exercised by the unit regression only: no claim is made that the host retained quarter-unit precision. No native oracle or unrelated complete saved-field/workspace/history check was waived.

Artifact audit matches all 66 production files,72 wheel/116 sdist entries and required licenses/NOTICE/private-path exclusions. Exact original/destination49pairs and previous 45menu bytes/rows match. The approved wheel SHA256 is 1a26a3e60719b1cc3fcb78ddef2cf292fde02316455aa66595865f45291e4a09; sdist SHA256 fe17a4151e86781a70764ea2f6a861c981061cd1f5ccc97a08077c5281f7404c. Installed wheel180 tests and sdist180 tests pass; App source497 tests and actual-wheel Scriptmix AFTER M1 full 501 passed, 1 skipped0.63s pass on arm64Python3.11.14. Controller83 tests pass. The earlier source502-pass total remains chronological evidence of a pre-M1 unexercised selection case counted as pass, not the current exercised count.

Same-wheel prior 45regression exits0:379 workflow/115 preservation/166 safety/ 116 error controls/Close 45;113 current source hashes and all import/path restoration match. Evidence: workspace verification/issue-101-ecosystem/evidence/ issue111-core45-inspectors-v1/summary.json. Combined 49 native candidates pass 420 workflow/123 preservation/225 safety/150 error controls/Close 49. No new chooser run occurred in this batch; historical 15 chooser receipts with unchanged relevant code remain separate, not fresh chooser evidence.

This step changes only README/PLAN/TODO/WORK/CHANGELOG in each worktree and appends the workspace handoff report. Both README files retain correct frontmatter and 200 lines, all earlier acceptance/install facts and release-neutral current-wheel guidance. Four-tool native/artifact/source and prior 45regression TODOs are complete. Reviewed integration/D17tags/independent downloaded-tag R053 remain pending: 49 native candidates versus45 released. Full 130-stem migration/archive cleanup/ additional tools/reporters/docs and held 7 Names remain open. No original removal, owner installation, package-index publication or tag/release is claimed.

Documentation checks: rtk proxy git diff --check in both worktrees exits0. Workspace rtk proxy python3 - standard-library audits verify the exact ten-file doc-only delta against fix1, all 66 production files, unchanged tests/migration/ NOTICE/dependency/version data, all 49pairs,40archived originals/scenarios and 70+113exercised hashes, README<=200/frontmatter/links/code fences, and retention of the initial/fix1/review freezes. Exact receipts are in the acceptance-docs report/freeze. No code suite or native call was repeated for docs; the controller results above are the previously completed acceptance evidence. Artifact metadata predates this doc-only update; production bytes remain identical, and parent owns reviewed integration/tag/download acceptance. No commit/push/subagent occurred.

Publication privacy correction — Task3m

The two published wheel commands above now use checkout-relative paths to the same approved wheel. Exact initial absolute invocations remain in private verification receipts. Both relative forms were reproduced on arm64 Python 3.11: without source audit, 86 passed/2 skipped in 0.16s; with --original-source-root ../.., 87 passed/1 skipped in 0.17s (exit0 each). Only this log changed; no product, test, other documentation, native run or broad suite changed.

R053 test portability correction — new Scriptmix release required

The released v1.0.7 test used mutable git show HEAD:migration.json as its 45-row baseline. After integration HEAD contains 49 rows; Git-free downloads also lack repository metadata. The earlier precommit gate missed both acceptance surfaces. This is a standalone test-distribution defect: all 49 runtime menus and all 66 App production files remain unchanged. App v0.2.12 and Scriptmix v1.0.7 tags remain immutable; parent must release the correction as v1.0.8.

The invariant now checks a literal canonical SHA-256 from immutable Scriptmix v1.0.6 (45 rows), the current total of 49, and each released destination hash. Canonical serialization is json.dumps(rows, sort_keys=True, separators=(",", ":")); SHA-256 is 58d98d7622a78373b989e61a21e9c947ee1354a17b69b96c042091840df749e2. An independent read of the immutable tag at adda1608e9212934927c625358a2e7d27ab2a3e1 confirmed the row count and literal digest. The portable test itself never calls Git and never derives its expected baseline from current manifest data. Three new cases reject changed source provenance, changed destination provenance and changed menu bytes; they use existing pytest/tmp_path facilities.

Commands from Scriptmix cwd, all wheel paths checkout-relative: rtk proxy env -u SCRIPTMIX_APP_SOURCE SCRIPTMIX_APP_REQUIREMENT=../../.local/issue111-app-v0.2.12-dist/fontlab_fontlabapp-0.2.12-py3-none-any.whl SCRIPTMIX_PYTHON=cpython-3.11-macos-aarch64-none UV_LINK_MODE=copy ./test.sh -k previous45_manifest -rs Postcommit RED: 1 failed/501 deselected0.05s, exit1 (49-row HEAD versus45). Same environment with -k released45_fixed_manifest -rs: test-first RED3failed/ 502deselected0.08s, exit1 before the fixed assertion helper existed. Same environment with -k 'previous45_manifest or released45_fixed_manifest' -rs: GREEN4passed/501deselected0.08s, exit0. Same environment with --original-source-root ../.. -rs: full source504passed, 1skipped0.60s, exit0. The skip is Spacing Preview's nonexistent selection read; all original-source fidelity checks are exercised. There are three more exercised cases than the prior501passed1skip suite. rtk proxy uvx ruff check passes; an initial ruff format --check requested one wrap, fixed before full verification. No broad App or native rerun, product/config/NOTICE/migration edit, owner install, commit/push/tag or subagent occurred. Exact private verification paths/receipts remain outside public source. Full Git-free-copy verification follows below.

Fresh Git-free proof: all 73 nonignored public source files were copied into a new isolated scratch checkout, with no .git and no Git repository in its parent chain. The downloaded v1.0.7 original was not edited or reused as the test target. From that scratch cwd, the exact command was: rtk proxy env -u SCRIPTMIX_APP_SOURCE SCRIPTMIX_APP_REQUIREMENT=../issue111-app-v0.2.12-dist/fontlab_fontlabapp-0.2.12-py3-none-any.whl SCRIPTMIX_PYTHON=cpython-3.11-macos-aarch64-none UV_LINK_MODE=copy ./test.sh -rs Result: 503 passed, 2 skipped in 0.69s, exit0. Both skips are explicit: no spacing selection read, and no original-source-root supplied in the standalone copy. The new test source and all 49 menus match the source checkout exactly. Scoped Ruff/check+format and git diff --check pass. A full public-file privacy scan and fixed-tag hash audit verify only tests/test_inspectors.py, WORK.md and CHANGELOG.md changed; all 49 menus and all 66 App production files remain exact. No released tag or existing changelog history changed. Parent owns independent review and new Scriptmix v1.0.8 publication/download acceptance; this task made no release.

A separate interpreter probe initially placed UV_LINK_MODE after uv's options and exited2 before Python started. Re-running with the assignment before uv exited0 and confirmed arm64/3.11.14. The source and standalone suite commands above already placed the variable correctly and both exited0.

Task3m final released-tag acceptance receipt

Reviewed integration, D17 release tags and R053 acceptance are complete for App v0.2.12, 274ce60924f76f4129a8ae43f627659df2634618, and Scriptmix v1.0.8, dac2f1a81a75de735df4cce1caeb2484f6ab56cd. Canonical App issue-101-migration was fast-forwarded/pushed to the App tag; canonical Scriptmix main is restored clean at its tag after clean temporary release worktrees were removed. All 21 older tag objects are preserved. The failed immutable Scriptmix v1.0.7 distribution and its portability-fix history above remain unchanged; no tag was moved/removed.

R053 fresh App clone passes 497 source tests; stable wheel/sdist each pass 180 installed tests. All 66 runtime files match, and 72 wheel/116 sdist payload entries pass license/NOTICE/privacy checks. Stable wheel SHA256: 723d6df5dcc95b859dd06df7eb7c47c4bd86fb291a958ed3eeb612f7c102784a. Stable sdist SHA256: fb0695971a166dfcebcf0e60b5d4483b00887913547c546da5aca2391b9f5a79. Scriptmix source passes 504 tests/1 skip with original audit. Fresh v1.0.8 download passes 503 tests/2 explicit skips in 0.70s; 73 files, all 49 original/destination pairs, privacy and safe-archive checks match. Download archive SHA256: 4ecc7a2623407f9948b79cd1c6edfc1078da66b74d9f79e2aeccc9934052cbf7.

Final native R053 exits0 on FontLab 9.0.9784 using the stable installed wheel and fresh Scriptmix download: 41 workflows, 8 complete font/workspace/history checks, 10 paint, 24 opening, 59 safety and actual Close 4/4. All 70 current source hashes and import/path restoration match; all 15 images equal the prior visual receipt. The prior 45-tool full regression remains valid on identical 66 runtime bytes; combined 49 totals are 420 workflow/123 preservation/225 safety/150 error controls/Close 49. No fresh chooser check is claimed; historical 15 chooser receipts remain unchanged. Receipt authority in the workspace: verification/issue-101-ecosystem/evidence/issue111-release-v8/ {native-acceptance.json,scriptmix-v1.0.8-download.json,scriptmix-v1.0.8-tests.json}.

Released scope is now 49/130, with 81 pending (7 held Names + 74 unmigrated). All originals are retained; broader migration/archive cleanup/additional tools/ reporters/docs goals remain open. This receipt supersedes historical pending integration/tag/R053 statements above, without rewriting failed attempts. No PyPI/GitHub release-object/site publication or owner-site install is claimed.

This step changes only PLAN.md/TODO.md/WORK.md in each inspectors worktree. Post-tag metadata receipt review/commit/push is still parent-owned and pending; these six documentation changes have not been committed or pushed here. No broad suite or native call was rerun. rtk proxy git diff --check in both worktrees and rtk proxy python3 - scope/frontmatter/public-path assertions verify the exact six-file delta against immutable tags, with other files unchanged.

Task3n read-only Components — source implementation (native pending)

Adapted all five complete L1 originals: Compatibility, Count Badges, Missing Bases, Report and Where Used. Original controls/defaults/title/key/classes/helpers and full rows/cards/tree/CSV remain. App shares lazy native calculations, actual placed Proof paths and the existing owned Proof/Names lifecycle. Every source read begins after status/Close exist. Guards retain exact ordered membership/current master/ ordered masters and plain source values; selection/open/copy/paint refuse drift. MissingBases retains its exists predicate across guarded simulated selection and clears it on failure/Close. BadgeGrid success remains exactly error=None; painters end in finally, failed/empty invalidations settle, and owned signals disconnect. Report csv_text remains a pure oracle; Copy CSV is tested with a fake clipboard. All five original calculation aliases remain injectable after controls exist.

All prior49 manifest rows/menu bytes remain exact. Five source/destination pairs append (54 source tools); the Git-free invariant uses the independent literal v1.0.8 digest 5e5cc9b782a4ad26bd38ef7e803bdd3cd1d37e11a0c920d60738bc8a2840e111, plus all49 immutable destination hashes. The immutable first45 assertion stays. The one-level Components category is added to the existing path whitelist; all54original-source hashes pass the requested audit. sample-copies.json confirms one retained original per new stem; its complete denominator remains130 (not106). Only scripting.py changes among the66prior App runtime files; three helpers are added, and the remaining65production files stay byte-exact. No dependency changed. README remains within200lines. App WORK's carried Task3m navigation correction now names Scriptmix WORK.md:1171-1224 instead of saying the history is above.

Test-first RED: App components import missing, collection exit2; Scriptmix five menu-existence tests and total54 invariant fail6/exit1. Initial harness calls from the workspace root found no ./test.sh (exit127); they were reissued from the assigned repository cwd. A generator path invoked from App cwd failed before editing; the correctly rooted rerun applied it. These are harness errors, not product results. Iteration REDs caught missing category whitelist (full suite 605pass/1fail/1skip), generated duplicate helpers/exports and test-double control, selection-set and signal-blocking mismatches. Direct review caught Ruff removing public helper aliases; explicit exports and a host-free availability/delegation test now prevent that gap. Scoped Ruff initially rejected duplicate helpers, unused names and native-boundary exception style; those findings were corrected. No historical failure or immutable tag was rewritten.

Final affected suites: App tests/test_components.py contributes8passing cases; Scriptmix -k components passes107/505deselected (0.27s), exit0. Full App:505passed12.94s, exit0. Full Scriptmix:611passed1explicit skip0.84s, exit0, including all54original/destination pairs. Final separate Git-free copy: 610passed2explicit skips0.77s, exit0, no .git in its parent chain. It uses a copied current App source override with the stablev0.2.12wheel requirement; this proves source portability, not a newly built/installed App artifact. The skips remain explicit: Spacing Preview has no selection read; standalone additionally lacks --original-source-root. No tests are silently discarded.

Fresh checks: scoped Ruff check/format-check (14files), both git diff --check, Python3.11syntax/header checks, exact prior49menus and all5source-copy/scenario hashes pass. Native API references: retained FontLab getContours/findLayer/ componentGlyph stubs and PythonQt QTransform.pyi method declarations; existing native-verified Proof/Masters geometry/lifecycle is reused. The archived Qt5.15 web page was inaccessible; current official Qt QTransform documentation confirms the same matrix accessor signatures, not a claim about a Qt6runtime.

Source implementation is ready for parent review. Native/artifact/source review, strong complete-font/workspace/history/master preservation, screenshots, actual Close and prior49native regression are parent-owned and pending. No native call, artifact build, owner-site install, canonical edit, commit/push/tag, original edit/ execution/removal or subagent occurred. Released scope stays49/130; this batch's five sources await native acceptance. Seven held Names and69other stems remain outside this batch; full archive/cleanup/additional-tools/reporters/docs stay open.

Exact Scriptmix cwd commands (relative paths):

  • rtk proxy env SCRIPTMIX_APP_REQUIREMENT=../../.local/issue111-app-v0.2.12-dist/fontlab_fontlabapp-0.2.12-py3-none-any.whl SCRIPTMIX_PYTHON=cpython-3.11-macos-aarch64-none UV_LINK_MODE=copy ./test.sh -k 'component_menu_exists or immutable_released49' -rs (test-first6fail/exit1).
  • rtk proxy env SCRIPTMIX_APP_SOURCE=../issue111-components-app/src/fontlabapp SCRIPTMIX_APP_REQUIREMENT=../../.local/issue111-app-v0.2.12-dist/fontlab_fontlabapp-0.2.12-py3-none-any.whl SCRIPTMIX_PYTHON=cpython-3.11-macos-aarch64-none UV_LINK_MODE=copy ./test.sh -k components -x (final107pass/exit0).
  • Same environment with ./test.sh --original-source-root ../.. -rs (fullRED605pass/1fail/1skip/exit1 before Components whitelist; GREEN606pass1skip; final611pass1skip0.84s/exit0).
  • rtk proxy git diff --check (exit0).

From a separate Git-free scratch cwd, with copied App helpers/wheel one level up: rtk proxy env SCRIPTMIX_APP_SOURCE=../app-src SCRIPTMIX_APP_REQUIREMENT=../fontlab_fontlabapp-0.2.12-py3-none-any.whl SCRIPTMIX_PYTHON=cpython-3.11-macos-aarch64-none UV_LINK_MODE=copy ./test.sh -rs Final610pass2explicit skips0.77s, exit0. Source and standalone current production/ menu/test bytes match; no installed-artifact proof is implied by a source override.

Exact workspace-relative quality commands, exit0 after corrections: rtk proxy uvx ruff check .worktrees/issue111-components-app/src/fontlabapp/{components,_components_dialog,_components_views,scripting}.py .worktrees/issue111-components-app/tests/test_components.py .worktrees/issue111-components-scriptmix/Scripts/Components .worktrees/issue111-components-scriptmix/tests/{test_components,test_reports,test_inspectors,conftest}.py Same file arguments with rtk proxy uvx ruff format --check pass14files. Initial --fix/--unsafe-fixes passes were followed by explicit public-alias restoration, review and fresh affected/full tests; no prior49menu was formatted or edited.

Task3n fix1 — independent review F1/F2 only (source, native pending)

F1: Compatibility now exports names_font_window_selection as selected_names. Its Selected glyphs scope stays empty when no Font-window glyph is selected, even when CurrentGlyph is O. CountBadges keeps its original separate fallback. No existing selection helper/runtime/menu is changed.

F2: BadgeGrid subclasses the existing ProofView painter boundary, delegates its original complete paint method through draw(), and maps successful paint_error back to the original public error=None. Inactive painters, false end() and raising end() now diagnose and invalidate after native finalization, without escaping paintEvent. A tiny explicitly authorized _components_dialog.py wiring sets/clears failure_cleanup independently of the replaceable diagnostic hook, as existing Inspector views do; callback failure cannot retain valid paths or snapshot. Close releases all three hooks. Persistent empty failures settle. No old runtime boundary was modified. Only the two requested new sources plus that bounded F2 lifecycle wiring and owned component tests change as product.

Test-first new regression RED:5failed/1passed/612deselected0.10s, exit1, reproducing F1 and all3F2native-terminal cases plus failing error-hook cleanup. After fixes, the same selection gives6passed0.07s, exit0. One additional secondary cleanup-exception case brings the full new component suite to114passed/ 505deselected0.25s, exit0. The independent review's unchanged four-case probe also passes4/0.01s/exit0. One existing newly owned component assertion changes from its old bespoke RuntimeError string to ProofView's standard repr diagnostic; exactNone success and the original .paint method remain explicitly tested. Native-shaped fixture reloads ProofView after its richer QWidget replacement, so tests execute the actual inherited boundary. No prior49menus/manifest or older test modules change in this round.

Full App505passed12.94s, exit0. Full Scriptmix618passed1explicit skip0.89s, exit0, auditing all54original pairs with --original-source-root ../... Separate Git-free source-override copy617passed2explicit skips0.99s, exit0; no .git in its parent chain. All source tests use explicit arm64Python3.11. Scriptmix uses the stablev0.2.12wheel requirement plus the current assigned App source override; this is source proof, not a new built/installed artifact. The inherited explicit skips remain unchanged. Scoped Ruff check/format-check4files and both repositories' git diff --check pass; initial import-wrap I001 was corrected.

Exact relative commands, all final exit0: App cwd: rtk proxy env UV_PYTHON=cpython-3.11-macos-aarch64-none UV_LINK_MODE=copy ./test.sh -q Scriptmix cwd, this environment: rtk proxy env SCRIPTMIX_APP_SOURCE=../issue111-components-app/src/fontlabapp SCRIPTMIX_APP_REQUIREMENT=../../.local/issue111-app-v0.2.12-dist/fontlab_fontlabapp-0.2.12-py3-none-any.whl SCRIPTMIX_PYTHON=cpython-3.11-macos-aarch64-none UV_LINK_MODE=copy ./test.sh with -k 'empty_selection_stays_empty or terminal_failures or error_hook_failure or shared_painter_success' --tb=short (RED5fail1pass; GREEN6pass), then -k components -rs (114pass), and --original-source-root ../.. -rs (618pass1skip). Independent unchanged reviewer probe from Scriptmix cwd: rtk proxy env PYTHONPATH=tests SCRIPTMIX_APP_SOURCE=../issue111-components-app/src/fontlabapp PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 UV_LINK_MODE=copy uv run --no-project --python cpython-3.11-macos-aarch64-none --with pytest --with ../../.local/issue111-app-v0.2.12-dist/fontlab_fontlabapp-0.2.12-py3-none-any.whl python -m pytest -q /tmp/issue111-task3n-review/test_review_doubts.py --tb=short Standalone scratch cwd: rtk proxy env SCRIPTMIX_APP_SOURCE=../app-src SCRIPTMIX_APP_REQUIREMENT=../fontlab_fontlabapp-0.2.12-py3-none-any.whl SCRIPTMIX_PYTHON=cpython-3.11-macos-aarch64-none UV_LINK_MODE=copy ./test.sh -rs Workspace quality command: rtk proxy uvx ruff check .worktrees/issue111-components-app/src/fontlabapp/{components,_components_views,_components_dialog}.py .worktrees/issue111-components-scriptmix/tests/test_components.py Same arguments with rtk proxy uvx ruff format --check; each repository also runs rtk proxy git diff --check.

Initial task3n freeze/report/patches stay unchanged. Separate fix1 freeze/report records exact deltas against the parent's reviewed preimage. Parent owns scoped re-review, fresh fix1 artifacts, all native preservation/painting/Close gates and prior49regression. No artifact/native/canonical/original/owner-site/commit/push/ tag/README/PLAN/TODO changes or subagents occurred in this fix round.

Final fix1 status-diagnosis assertions additionally confirm terminal failures show Error: and a throwing diagnostic hook still sets last_error/status. Fresh full Scriptmix618passed1skip0.86s and final Git-free617passed2skips0.98s, exit0. These supersede the earlier0.89s/0.99s timings for the final test bytes only.

Task3n fix2 — measured CountBadges falsey-current fallback (source only)

Parent nativev2 found a valid CurrentGlyph named A with isNull=False but bool=False, a present Font-window font and an empty selection. Compatibility correctly kept its selected scope empty; CountBadges incorrectly displayed zero glyphs because the reused Proof->scripting selector used truthiness for CurrentGlyph. Native receipt: verification/issue-101-ecosystem/evidence/issue111-components-v2/components-empty-selection/report.json.

A component-specific selected_glyphs now reads the existing exact Font-window selection, falls back using glyph is not None and resolves/filter names with the original package.findName/is-not-None semantics. CountBadges retains valid falsey current/resolved wrappers; None stays empty; actual selection wins in font order. Compatibility's F1 exact-selection helper stays unchanged. Proof/scripting and all prior runtime/menu/manifest bytes stay unchanged from reviewed fix1.

Test-first App RED initially lacked a legacy FL fixture and failed before its assertion (exit1); corrected native-shaped mocks then reproduce [] instead of [falseyA],1failed8deselected0.02s/exit1. UI RED reproduces no CountBadges glyphs instead of A,1failed1passed619deselected0.07s/exit1. CoreGREEN9passed0.02s/exit0; componentUIGREEN116passed505deselected0.30s/exit0. The actual UI test verifies A's both-master counts, painted A card, error=None and unchanged empty font selection, plus Compatibility's empty selected scope. Other coverage retains CurrentNone, normal actual selection and filtering unresolved package.findName results. The owned selection-fault test now patches this component selector's actual selection read instead of the no-longer-used Proof alias. No older test module changes.

Fresh full suites, explicit arm64Python3.11, exit0: App506passed12.91s; Scriptmix620passed1explicit skip0.90s with all54original pairs audited; standalone Git-free619passed2explicit skips1.01s, no.gitparent. Scriptmix uses the stablev0.2.12wheel requirement plus current assigned App source override; the standalone copies current helper sources. These are source checks, not new built/installed artifact or native proof. Inherited skips remain explicit. Ruff check/format-check3files and both git diff --check pass; two initial lint findings (newly used export's redundant noqa and unused test name) were fixed.

Exact App cwd commands: rtk proxy env UV_PYTHON=cpython-3.11-macos-aarch64-none UV_LINK_MODE=copy ./test.sh -q tests/test_components.py -k selected_glyphs --tb=short (RED1fail thenGREENin full affected suite). Same environment with ./test.sh -q tests/test_components.py (9pass), and ./test.sh -q (506pass). Exact Scriptmix cwd environment/command: rtk proxy env SCRIPTMIX_APP_SOURCE=../issue111-components-app/src/fontlabapp SCRIPTMIX_APP_REQUIREMENT=../../.local/issue111-app-v0.2.12-dist/fontlab_fontlabapp-0.2.12-py3-none-any.whl SCRIPTMIX_PYTHON=cpython-3.11-macos-aarch64-none UV_LINK_MODE=copy ./test.sh with -k 'badges_falsey_current or badges_none_current' --tb=short (RED1fail1pass), then -k components --tb=short (116pass), and --original-source-root ../.. -rs (620pass1skip). Standalone scratch cwd: rtk proxy env SCRIPTMIX_APP_SOURCE=../app-src SCRIPTMIX_APP_REQUIREMENT=../fontlab_fontlabapp-0.2.12-py3-none-any.whl SCRIPTMIX_PYTHON=cpython-3.11-macos-aarch64-none UV_LINK_MODE=copy ./test.sh -rs (619pass2skips). Workspace quality: rtk proxy uvx ruff check .worktrees/issue111-components-app/src/fontlabapp/components.py .worktrees/issue111-components-app/tests/test_components.py .worktrees/issue111-components-scriptmix/tests/test_components.py Same file arguments with rtk proxy uvx ruff format --check; each repository also runs rtk proxy git diff --check.

Initial/fix1 freezes/reports/patches/artifacts stay unchanged. Separate fix2 receipt freezes exact deltas against the parent's fix1preimage. Source scope only: components.py, owned componenttests and scoped WORK/CHANGELOG. No other source, menu, shared old helper, README/PLAN/TODO/dependency, artifact/native/rootverification/ canonical/original/owner-site changes, commits/push/tags or subagents. Parent owns new fix2artifacts, scoped re-review and native confirmation. Earlier combined Report deadline handling was parent harness work and required no product change.

Parent source inspection confirms expected FontGate boolean semantics: CurrentGlyph returns pyfgGlyph (python_gate.cpp:295-313); its sequence length counts first-workShape contours (fgglyph.cxx:290-298). A named valid glyph may therefore be falsey. This fix restores the original explicitNone contract; it is not a newly discovered PythonQt validity defect. CurrentGlyph's internal fgGlyph(true) path remains subject to the known fl#8525 preservation concern; no broad API change/upstream issue is part of this fix. Prior shared Proof truthiness behavior is outside this round and remains for parent final cleanup.

Task3n controller acceptance receipts

Source/fix reviews and installed-artifact native gates pass; integration and release remain pending. Evidence paths below are relative to the workspace: verification/issue-101-ecosystem/evidence/issue111-components-v3/summary.json and issue111-core49-components-v1/summary.json; source review copies are retained in issue111-components-source-review. Nativev1/v2failed attempts remain unchanged. The direct controller fix2 review preserves earlier independent F1/F2 approval.

New5:33workflow/10complete preservation,5paint/30opening/80stale/16painter/ 6selection/Close5 pass on9784. Actual CurrentGlyph A tests false but is non-None; Compatibility scope stays empty and CountBadges paints A without selecting it. All81exercised hashes match; imports restore; eight images inspected. The full badge recovery image includes all8glyphs/3rows and all3masters. Report's original DRIVE exceeds the3.5s per-call boundary when aggregated; the controller retains every original statement/order/check across two bounded calls at the CSV checkpoint. No product workaround, timeout extension or normalized preservation is used. Prior49:420workflow/123preservation/225safety/150error controls/Close49 pass, 120current hashes and imports restore. Combined54:453workflow/133preservation/ 305safety/201error controls plus6selection/Close54. Historical15chooser receipts remain separate, not a fresh run. Full saved design/classes/metadata/workspace/ history/master identities remain checked; only original intended selection changes.

Fresh App506passed12.97s; wheel/sdist189passed0.26s each; actual-wheel Scriptmix 620passed1explicit skip0.84s with all54original pairs audited; Git-free79filecopy 619passed2explicit skips0.93s, gitprobe128. Both SOURCE/PYTHONPATH overrides are unset for actual-wheel checks. Controller118passed0.18s. All69runtime bytes equal source/wheel/sdist, prior65runtime exact plus unchanged scripting prefix/newaliases, immutable49menu/manifest baseline exact. Wheel75/sdist120files pass license/NOTICE/ privacy; all209publicsource files pass privacy, bothREADME<=200lines. Candidate wheelSHA256 edaaa3debb54283d3e2b18f037bafd2f90b454a5564f7b56b8033d0f46cf08fb; sdist00e05efa29bb27dfb608900bf078f52f8c3899e69d3d9f6c859b17e763ec6e3a.

Exact root commands (exit0): rtk proxy env UV_PYTHON=cpython-3.11-macos-aarch64-none UV_LINK_MODE=copy uv build --out-dir ../../.local/issue111-app-components-fix2-dist from the App worktree; rtk proxy python3 .local/issue111-audit-components-fix2-artifacts.py. Each install uses rtk proxy env UV_LINK_MODE=copy uv pip install --python .worktrees/issue111-components-app/.venv/bin/python --no-deps --target .local/issue111-app-components-fix2-{wheel,sdist} and its corresponding built artifact. Installed test argument arrays are retained in .local/issue111-components-fix2-installed-tests-commands.json. App rtk proxy env UV_PYTHON=cpython-3.11-macos-aarch64-none UV_LINK_MODE=copy ./test.sh -q. Scriptmix rtk proxy env -u SCRIPTMIX_APP_SOURCE -u PYTHONPATH SCRIPTMIX_APP_REQUIREMENT=../../.local/issue111-app-components-fix2-dist/fontlab_fontlabapp-0.2.13.dev1+g41f2a8391.d20261017-py3-none-any.whl SCRIPTMIX_PYTHON=cpython-3.11-macos-aarch64-none UV_LINK_MODE=copy ./test.sh --original-source-root ../.. -rs. Git-free copy uses the same wheel via ../issue111-app-components-fix2-dist, omits the unavailable --original-source-root and reports both skips explicitly. Controller rtk proxy uv run --no-project --python cpython-3.11-macos-aarch64-none --with pytest python -m pytest -q verification/issue-111 --tb=short. Both native calls use rtk proxy env FL_RESTART=1 PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 and the exact retained command arrays .local/issue111-components-v3-command.json and .local/issue111-core49-components-command-fix2.json through fl-native.sh. Both exit0; no crash. Dedicated owned-fixture sessions only; no owner-site installs.

Docs-only acceptance update changes README/PLAN/TODO/WORK/CHANGELOG in each worktree. No production/test/mapping/license bytes change. Prior source freezes, patches, review receipts and artifacts stay intact. Reviewed integration/D17tags/ independent downloaded-tag R053 are pending. Native candidates54 versus released49; full130/archive/additional tools/reporters/docs and held7Names remain open.

Task3n release download acceptance and canonical promotion

Appv0.2.13/tag+main15d400392863b2e2b288480637a0300229363323 and Scriptmixv1.0.9/tag+maina495bea38879732e76ce0d895e1dd3b444c72863 are published by gitnextver. All22older tag objects remain exact; annotated v0.2.0's peeled reference also stays exact (23old ref lines, not23distinct tags). Exact commands: rtk proxy gitnextver -d .worktrees/rel-components-app and rtk proxy gitnextver -d .worktrees/rel-components-scriptmix, exit0. App uses an isolated main worktree. Scriptmix main is in use in its canonical checkout, so the controller uses an isolated local clone with independent objects/main, sets origin back to GitHub and fast-forwards the reviewed commit there. Neither canonical branch was switched. Utility index v4->v2 conversion affects only these release indexes. Canonical promotion waits until downloaded-tag acceptance.

Fresh GitHub Appv0.2.13 clone passes506tests13.43s; a build from that clone makes stable wheel941cc4600befa92ec5e3b98cc438638dca330fe2db9dc29909980bce9ae30eef and sdist657236eaeceb58d8d4bee012213068a6d14b53339254612cc3a2112fe66670c9. Both isolated installs pass189tests(0.26s/0.25s), actual version0.2.13/module paths, arm64Python3.11.14 and lazy components import without native host modules. All69runtime files equal candidate/source/wheel/sdist;75/120payload entries pass license/NOTICE/privacy. Independent79file Git-free Scriptmixv1.0.9 downloadSHA256 2e029f89ed6ad33786c0e32772207f90476914a67a08289e603c428e6ccb6cc9 passes619tests/2explicit skips0.98s;54original source/destination hashes and every menu byte match. git rev-parse correctly exits128 outside a Git parent. Fresh clone build/test commands use the same arm64UV_PYTHON/UV_LINK_MODE recipes above; the download test uses stable v0.2.13 wheel via ../issue111-app-v0.2.13-dist, SOURCE/PYTHONPATH unset, no unavailable original-source-root flag. Its54original pairs are independently audited by the controller. Installed command arrays: .local/issue111-components-stable-installed-tests-commands.json, all exit0.

R053 native uses .local/issue111-components-r053-command.json with the stable installed wheel and freshly downloaded Scriptmix via the shared guarded runner, FL_RESTART=1/PYTHONDONTWRITEBYTECODE=1/PYTHONUNBUFFERED=1, exit0 on9784. It repeats33original workflow/10complete saved-font/workspace/history checks, 5paint/30opening/80stale/16painter/6selection controls/Close5. All81exercised hashes match and imports restore. Eleven of12images match the retained candidate bytes; the remaining WhereUsed A image was directly inspected: seven ordered composites, Aacute selected, three masters and auto labels/status correct. No exact-image claim is made for that image. Prior eight direct visual inspections remain retained. Prior49regression applies to identical69runtime/49oldmenu bytes.

Evidence: workspace verification/issue-101-ecosystem/evidence/issue111-release-v9/ release-refs.json, installed-artifacts.json, fresh-artifact-tests.json, scriptmix-download.json, native-acceptance.json and native/summary.json. Canonical App issue-101-migration and Scriptmix main are fast-forwarded only to reviewed releases and pushed; no canonical branch switch or owner-site install. Current code is54released/130stems,76pending(7heldNames+69unmigrated); alloriginals remain. Whole archive cleanup, broader examples, package cleanup, new tools/ canvas reporters, docs and final review remain open. This final receipt update changes README/PLAN/TODO/WORK only; source/test/menu/mapping/version/license bytes match stable tags. No redundant code/native suite is rerun for metadata.

Task3o source implementation — read-only Anchors, acceptance pending

Independent worktrees issue111-anchors-app and issue111-anchors-scriptmix are on issue-111-anchors, bases Appae1f3ca93da19b1cf69fce3807f4bfcf2d64dbf8 and Scriptmixe8c626510bc7772c5aa46dfd24db93a156272518. Baseline source App506passed 13.46s; actual stable-wheel Scriptmix620passed1explicit skip1.01s with54original pairs audited. All originals/scenarios were read without executing old scripts. Three L1-only sources are mapped into Scripts/Anchors with full source/destination hashes. AnchorDuplicates is an editor and remains for a later complete editor batch. Original AnchorCompatibility DRIVE adds a probe anchor H/Light after launch; controller must retain that setup, then capture an exact fresh complete baseline before rescan/selection. No seed waiver or mutation acceptance is claimed here.

New shared anchors.py keeps original frequency sorting/duplicates, rounded cloud points, auto-layer None versus missing master semantics, base/mark classification, family order and offset arithmetic. It reuses component/Proof native access and placed paths. Raw anchor snapshots retain sub-rounding drift; geometry snapshots cover only the displayed names and retain the previous domain during a selector change. _anchors_dialog.py extends existing Components/Proof/Names binding/signals/ Close; _anchors_views.py preserves both full original painters and delegates the existing BadgeGrid/ProofView exact-None terminal boundary without modifying it. All three complete original menus retain controls/defaults/public helpers/classes/ keys and test interfaces, with late binding after status/Close construction.

TDD: missing anchors API collectionRED(exit2), then5coreGREEN0.01s; sixth test now covers falsey CurrentGlyph/None/actual selection for Mark Preview. Menus/57row invariant firstRED4fail18pass(exit1). UI first stopped on missing imported pytest masters fixture (test infrastructure, corrected), then proper missing helperRED. Initial native-shaped stubs lacked addItems/findText/tree data/UserRole/transform/ zero-argument QRectF; these test-only gaps were filled in the owned anchor fixture. Two genuine selector failures then showed old display data was checked against new controls; fixed by freezing original result options, validating the previous source first and refusing unrefreshed blocked-signal changes before paint. Basic no-font/UI6pass; expanded59anchor menu/UI/fault/safety cases pass0.18s. Full source snapshot before final typing/format pass: App512passed12.94s and Scriptmix680passed1skip1.05s with57original pairs. These use stablev0.2.13 wheel plus current App source override, not a new built artifact or native proof. Final exact-byte suites, source review, standalone and artifact/native gates pending.

Coverage includes18actual-slot stale font/closure/master/order/membership/raw-anchor refusals,21initial read faults with working Close, eight inactive/false/throwing end and throwing diagnostic hook cases with painter ending/settling, explicit falsey fallback versus Compatibility exact empty scope, blocked UI choices and outline advance drift. Prior54 manifest prefix is independently literal-locked at 930fa7266be5d8e3a830355caf3e7296e3002dc3cec5267a824406e5c3acf07e; every prior menu byte is checked. Only total-count assertions and Anchors category are updated in previous tests; previous45/49 digest controls remain unchanged. NOTICE's carried Components pending wording is corrected to the released v0.2.13/ v1.0.9 acceptance, and complete new anchor provenance is appended.

Exact App command prefix: rtk proxy env UV_PYTHON=cpython-3.11-macos-aarch64-none UV_LINK_MODE=copy ./test.sh -q, focused tests/test_anchors.py --tb=short. Exact Scriptmix command prefix: rtk proxy env SCRIPTMIX_APP_SOURCE=../issue111-anchors-app/src/fontlabapp SCRIPTMIX_APP_REQUIREMENT=../../.local/issue111-app-v0.2.13-dist/fontlab_fontlabapp-0.2.13-py3-none-any.whl SCRIPTMIX_PYTHON=cpython-3.11-macos-aarch64-none UV_LINK_MODE=copy ./test.sh with -k 'anchor_no_font or anchor_complete_original' --tb=short, then -k 'anchor_' --tb=short, full --original-source-root ../.. -rs. Scoped Ruff check initially caught export aliases/import order; an explicit public re-export noqa replaces redundant aliases rejected by PLC0414. Check/format then pass for new helpers/tests/menus. No prior runtime formatting is performed. No new dependency or API beyond verified original/Components/Proof native calls. This source milestone does not commit, publish, change canonical code, remove originals or install into the owner's FontLab. Full130goal remains open.

Wait, but the first59 source cases did not exercise a second selector action after stale failure or Compatibility's recovered selected scope. New tests first show 2RED selector retries silently republishing changed source and1RED explicit rescan adopting a new Font-window selection instead of its original scope. Fix: Cloud/Mark require reopening after a previously published display is invalidated; Compatibility alone may explicitly rescan, retaining its original plain selected scope across invalidation. Initial read retries remain bound to the original font; Close releases the captured selection domain. No extra generic state framework or previous runtime change. Focused62UI/menu/fault/stale cases pass0.16s. Source review caught these before any artifact/native acceptance; failed evidence retained.

Final source-byte suites: App512passed13.02s, Scriptmix683passed1explicit skip1.01s withall57originalpairs, sourceoverrideonly. Finalstandalone83fileGit-freecopy682passed2explicit skips(seeparentretainedreceipt), sourceoverrideonly. Earlier679/2copyretainedaspre-three-fix-tests snapshot. Controller132passed0.15s,14neworiginal-anchor-adapter tests retainallstatements/oracles andexactpostseedbaseline, refusewrongmarkers/boundarychanges. Bothoriginalpaintbodies areAST-identicalafterannotations/docstrings. No new native/artifactacceptance claimed.

Task3o nativev2 exit0: original3 20workflow/6fullpreservation, paint10/open18/stale63/painter32/selection9/Close3,80current hashes/restored imports. Direct image review REJECTS Compatibility layout: late binding left2 columns, hiding3masters. Test-first new column case RED2!=4, fix1 moves dynamic headers/count/resize modes into guarded refresh; all other product bytes remain exact. Actual-wheel Scriptmix684pass1skip1.24s/all57pairs;83-file Git-free explicit-originals684pass1skip1.21s; rootcontroller157pass0.19s including REDthenGREEN visible-column negative control. New native probe will measure actual headers/positive widths/independent A-anchor counts and retain full-panel image; original DRIVE/check unchanged. App wheel/runtime unchanged, prior54 regression running against same artifact; nativev3 pending. Earlier direct review missed this UI defect; no release/promotion claimed.

Issue111 read-only Anchors candidate acceptance — 2026-10-18

Direct controller review and native fix1 re-run pass. Initial native v1 failed only the owned E activation setup; flPackage.activateGlyph does not select an editor. The documented owned editor signal fixes the fixture. Native v2 passed data checks but screenshot review rejected hidden master columns. A test-first menu fix configures the columns after font binding; both old attempts remain retained. The final image shows every master and missing cell. No original scenario expression, App runtime or previous 54 menus changed for this fix.

Installed candidate wheel on FontLab9.0.9784 passes all three original scenarios: 20workflow,6complete font/design/classes/metadata/workspace/history/master checks, 10paint,18opening,63stale,32painter-boundary,10selection/layout controls andClose3. All80exercised hashes match and import paths/modules restore. Compatibility's owned H/Light probe has its exact post-seed baseline. Valid falsey current E, empty selected scope, independent anchor arithmetic, visible master widths/counts and H's missing-family display are load-bearing. Eleven existing images match v2 exactly; corrected Compatibility images were inspected. Clipboard excluded.

Same-wheel prior54 passes453workflow/133preservation/305safety/201error plus 6selection/Close54,135matching hashes and restored imports. Combined57 native: 473workflow/139preservation/368safety/261error plus16selection/layout/Close57. SourceApp512; actual-wheel Scriptmix684/1skip, all57originalpairs; standalone 83-file Git-free with explicit originals684/1skip. Installed wheel/sdist195each; 72runtime files match,78wheel/124sdist entries pass licence/NOTICE/privacy audit. Controller157pass; scoped Ruff passes. Every previous54manifest row/menu hash is unchanged. Exact commands and failed RED cases are retained in parent evidence.

Release and independent downloaded-tag R053 remain pending. Released54/130; 57native candidates, held7Names and66other unmigrated stems remain separate. All original/archive inputs and broader cleanup/newtools/reporters/docs stay open. No owner-site install, package-index publication or GitHub release object claimed.

Issue111 Anchors release and independent acceptance — 2026-10-18

Reviewed main releases Appv0.2.14 (4f240f67cce47a91b200587fffde3c49f42cb9f2) and Scriptmixv1.0.10 (9aad183619a7e36379fa29b326ca1821cf2aae52) are published. Exact commands: rtk proxy gitnextver -d .worktrees/rel-anchors-app and rtk proxy gitnextver -d .worktrees/rel-anchors-scriptmix, both exit0. Only the reviewed release CHANGELOG was dirty; App used an isolated main worktree and Scriptmix an independent main clone to preserve the owner's live checkout. All24older distinct tags and the protected annotated v0.2.0 dereference remain unchanged (25tag refs). No package-index or GitHub release object is claimed.

Independent fresh GitHub App clone:512tests pass13.34s; stable built wheel and sdist:195installed tests each pass0.26s on arm64Python3.11.14, host-free imports from actual targets. Wheel075983f6dcf7b79ef2274e5252a5f6afc149cbe58457b763d110e5f2fbf5e68e; sdistdabc95cd0dfc5fc61bed6c87ad3891297d71f34a6a4ee178823f710cfcde1a75. All72runtime bytes and57menus match the accepted candidate;78wheel/124sdist entries pass licence/NOTICE/privacy checks. Fresh83fileGit-free Scriptmix archive SHA64d35e4ea1702fde0235d841b2404453f1529ff139f4f80f1a9339ce418c4746: 683tests pass2explicit skips1.13s; all57original pairs audited separately.

Stable-wheel/downloaded-menu R053 on FontLab9.0.9784 repeats20workflows, 6complete preservation,10paint,18opening,63stale,32painter,10selection/layout controls andClose3. All80current hashes match; paths/modules restore. All14 screenshots are byte-identical to the accepted candidate images. Corrected Compatibility master columns/missing cells and nondefault falsey E/H outcomes remain load-bearing. Same-byte prior54 already passes; combined57 native totals 473workflow/139preservation/368safety/261error plus16selection/layout/Close57. No further native run is implied by the receipt-only metadata update.

Evidence: workspace verification/issue-101-ecosystem/evidence/issue111-release-v10. Post-tag README/PLAN/TODO/WORK/NOTICE receipt delta is reviewed separately before canonical promotion. Released57/130;73remain(7heldNames+66unmigrated). All original and archive inputs remain; whole migration/additionaltools/reporters/docs stay open. No owner's site-packages or user documents were changed.

Task3p started directly in issue111-readonly-tail-app/scriptmix at reviewed canonical eb63aca/b362995. Fresh baselines App512passed13.34s/Scriptmix684passed1skip1.18s, all57originalpairs; immutable57digest96639ca3078fb00fd90919b87e2217679e30d723e86fac361f327af527bc46b9. Both next originals/scenarios fully read, no execution/edits: cleanup C4 source a2d640ec1a01d13a1a2332d75b5eefd748bc1b1047140856edecddccedf919c7 (4samecopies), interpolation L1 source5018a343e9da00ba9abaf422a8805861e7d772e24a0e00eeee6a8c7d970182c9 (9samecopies; L2onlylosesQColor/paletteprotections). Bindingbrief readonly-tail-brief.md; no sourcechangesyet. NodeCoordinates source/scenario alsofullyread; splitintoTask3q because livepolling andfakeclipboard/native-closecheckpoint needdifferent lifecycleacceptance. Allsourcebehavior remains inwhole130scope. Sourceinspectionincorrect names.py/features.py probesreturnedmissingpaths; actualscripting.names_font_glyphs verifiedreadsCurrentFont.glyphs/unicodes withoutunsafe flGlyph.fgGlyph getter. Native willprovecompleteunchangedfonts, notassumesideeffectfreedom.

Issue111 Task3p read-only reviews — source work in progress

Retain Select Unreferenced Glyphs from the byte-identical C4 family and Interpolation Preview from the L1 family with the defensive palette fixes. Keep every original candidate rule, helper/result interface and diagram/control. Use the established Anchors/Components/Proof lifecycle through narrow review subclass overrides. Four new helper/view modules and six appended lazy aliases leave all prior runtime bytes intact except the scripting facade suffix. No new dependency is introduced. All57prior manifest rows/menu bytes stay exact; two source mappings bring the candidate total to59, while57/130remain released.

Unreferenced-glyph reads reuse verified FontGate encodings instead of unsafe flGlyph.fgGlyph. Source snapshots retain features, class flags/records, ordered Unicode values, all-layer component references and recipes. Missing glyphs and encoding-order races fail closed. Included FEA files still refuse the scan. Interpolation retains complete placed endpoint contours, node flags, unrounded blend, all controls, compatibility messages, quadratic/cubic paths and full original dashed endpoint/mixed-outline/on-curve-dot painter. Bound choices are populated only after all controls/status/Close exist. Cached result corruption, stale font/master/membership/reference/geometry and blocked option changes refuse publication/actions. Published invalidation requires reopen; native acceptance is still pending, including actual screenshot review and complete preservation.

TDD: missing modules first fail collection, then20core cases pass0.01s. An extra RED restored the original current-glyph fallback after Font-window read errors. The first missing-module import accidentally invoked the package's native getattr; tests use explicit import_module thereafter. SourceApp532pass12.97s. Two missing menu tests first RED; initial UI fixtures first lack new modules, then NoFocus; add the native-shaped constant. Core helpers plus real menus now pass23 scoped UI cases0.10s: no-font/late choices/Close, ten actual-slot stale cases, initial scan faults, full painter/failure, corrupted cached results and blocked slider paint. Painter fixtures first lacked path drawing; add real-shaped path operations/bounds and pen methods. A mistaken attempt to assign read-only rect was removed. The original generic slider double emitted while blocked; a scoped slider now honors native blockSignals behavior. These are fixture corrections, not native host or product bug claims. Ruff preserves public helper re-exports.

Exact prefixes: rtk proxy env UV_PYTHON=cpython-3.11-macos-aarch64-none UV_LINK_MODE=copy ./test.sh -q in the App worktree; rtk proxy env SCRIPTMIX_APP_SOURCE=../issue111-readonly-tail-app/src/fontlabapp SCRIPTMIX_APP_REQUIREMENT=../../.local/issue111-app-v0.2.14-dist/fontlab_fontlabapp-0.2.14-py3-none-any.whl SCRIPTMIX_PYTHON=cpython-3.11-macos-aarch64-none UV_LINK_MODE=copy ./test.sh in Scriptmix, with -k readonly_tail --tb=short or --original-source-root ../.. -rs. Earlier full Scriptmix source state703passed1skip1.17s; the final source suite must be repeated after subsequent cases/formatting. New59mapping invariant first RED57!=59, then append only the two exact source/menu SHA pairs. Keep literal 45/49/54controls and add independent57digest; only previous current-count checks advance to59. Standalone Git-free/review/artifact/native2/prior57/release/R053 are pending. No new commit, canonical promotion, owner install or original removal.

Whole130migration,7heldNames,64otherunmigrated stems and full archives/newtools/ actual glyph-canvas reporters/docs remain open. Live Node Coordinates follows in its own batch with real timer/lifecycle evidence and fake clipboard only.

Task3p nativev1 exit1, no crash: Cleanup listed/selected787vs independent395,392extra/0missing, everyextra explicitly referenced inretainedVFJfeaturecode; both completefont/workspace/history checks pass, Interpolation5originalchecks pass, Close2 destroys/releases, paths/modules restore. No originalscenario/oracle weakened. Savednativebaseline independentlystillpredicts395, rulingoutfont-open loss. PrimaryC++pyfontgate/fgotlayout.cxx114-122 returns featureTEXT fromsequence_item; keys223-233 givesTAGS andget_feature245-260 takesatag. OriginalC4sample wronglyre-feeds code asatag, so itsfeature_source dropsreferences. Thisis sampleAPI misuse, notahostdefect/newupstreamissue. CorrectedNative-shapedFeatures double firstRED7fail3pass; fix1 usesfeatures.keys(), then21core/23UI pass0.01/0.10s. Existingfeature_source interface andallcandidate rulesretained, noFontportdependencyneeded. OldNativev1/installedartifacts/preliminaryfreeze retained. WrongC++Proteus/pyfontgate path andfirstcentral-helper comparison path probes returnedmissing; correctedactualrootpyfontgate andexplicitpart4paths. Fouroriginalscenario/helperfiles byte-identicalcentral;6newrootadaptertests pass, fullcontroller163pass0.18s. Artifactv1passed76runtime82/130payloadlicenseprivacy and215+215installed tests; actualwheelScriptmix707+1. Fix1artifacts/native2 repeatpending; no59released/canonicalchange.

Issue111 read-only glyph reviews: accepted candidate — 2026-10-18

Direct source review and the native fix1 gates pass for both complete tools. The unchanged Rafi oracle caught an original-sample bug: fgOTLayout iteration returns feature code, while get_feature expects tags. The initial787candidates included392referenced glyphs; the independent original/VFJ and native saved baseline both predict395. Correct the reader to iterate explicit keys(). The native-shaped regression first fails, then passes; retain an explicit SIM118 exception because this native object is not a Python dict. C++ source: pyfontgate/fgotlayout.cxx114-122,223-233,245-260. No FontLab host defect is claimed. All original sources/scenarios stay unchanged; no candidate/oracle weakening.

Installed fix1 wheel on FontLab9.0.9784:10original workflow checks,4complete font/design/classes/metadata/workspace/history/master checks,5paint,12opening, 39stale,16painter-boundary,6selection/default-layout andClose2 pass. All86current source hashes match and module/path restoration passes. Rafi's actual list and selection are exactly395; O50/O25 numerical oracles and a80 render pass. The real falsey current E and empty Font-window selection preserve whole-font cleanup scope and E-only interpolation. Native probes change actual owned feature source, node x22to35 and advance554to567; stale results refuse and settle. A scratch VFJ adds an unencoded H copy through ordinary file loading, avoiding native fgGlyph insertion. Original/archive inputs are never overwritten. All seven images were inspected, directly or as exact copies of inspected v2 images.

Same-wheel prior57:473workflow/139preservation/368safety/261error plus16selection andClose57,145matching hashes/restored imports. Combined59 native: 483workflow/143preservation/407safety/294error plus22selection/layout/Close59. App533source tests pass13.00s; actual fix1wheel Scriptmix707pass1skip1.01s with all59originalpairs; standalone86fileGit-free actual-wheel706pass2skips1.16s. Both installed wheel/sdist pass216tests0.27s each on arm64Python3.11.14 with host-free helper imports from their actual targets. All76runtime bytes match; 82wheel/130sdist entries pass licences/NOTICE/privacy. Previous72runtime remains 71exact files plus the unchanged scripting facade prefix; previous57menus/rows and literal45/49/54/57invariants stay exact. No dependency was added.

Wheelb4ac3d262cefbd95519829e89ca133e32788214b0c8b8e0f60894c8a3efb0654; sdist5172a0f824b6ec8373a1665f274e15a8a91f21495c79169eb63dff56c8f55cde. Rootcontroller176tests0.21s and scoped Ruff pass. Five enabled-failed controls first RED, then fail actual aggregation correctly. Owned fixture no-overwrite, original routing/full-workspace, mutation/instrumentation and selection negatives are exercised. No real clipboard, owner documents/preferences/Output or live site-packages are changed. Current published scope57/130;59native candidates await reviewed integration/D17 and independent downloaded-tag R053. Held7Names, 64otherunmigrated stems, archives/newtools/actualcanvasreporters/docs stay open. Evidence: workspace issue111-readonly-tail-v1 failure, v2 correction, v3 full controls and issue111-core57-reviews-v1, under the standard verification evidence folder. The initial failed native trial and pre-fix artifacts are retained.

Issue111 glyph reviews release and independent acceptance — 2026-10-18

Published Appv0.2.15 (f819f3f72ecaa06428b2b60e4785f5699a58e568) and Scriptmixv1.0.11 (de5473904637daca77b14d8eff60665f7fcf22ee) pass R053. Exact commands rtk proxy gitnextver -d .worktrees/rel-reviews-app and rtk proxy gitnextver -d .worktrees/rel-reviews-scriptmix exit0. Only reviewed release CHANGELOG files were dirty in isolated main checkouts. All26older distinct tags, including protected v0.2.0 and its annotated dereference, remain unchanged (27older tag refs). No package-index or GitHub release object claimed.

Fresh GitHub App clone533tests pass13.40s; actual installed wheel and sdist 216tests each pass0.27s on arm64Python3.11.14. Host-free helpers import from actual targets and distribution metadata reports0.2.15. Stable wheel e53ee6962585b201059b1a0f2055c05c7c9e7da8769bc914d7e9c8024c01bdc8; sdistd20fd72aee45036b76c2f17b1d28c8e7feeb3dc6b3daf0fa706d56c6bb42c98b. All76runtime bytes and59menus equal the accepted candidate;82wheel/130sdist entries pass licences/NOTICE/privacy. Fresh86fileGit-free Scriptmix download SHAcfcb7cb8c078be9e49e06ad680a47c0410170399bfd8431dee0edc6641dec13c: 706tests pass2explicit skips1.20s, all59original pairs audited separately.

Stable-wheel/downloaded-menu native acceptance on FontLab9.0.9784 repeats 10original workflows/4complete preservation/5paint/12opening/39stale/16painter/ 6selection-layout/Close2,86matching current hashes and module/path restoration. All7images exactly match the reviewed candidate. Correct Rafi395candidate list and selection, O50/O25 and actual a80/E rendering, real falsey-current E and owned feature/node/advance drift remain load-bearing. Same-byte prior57passed; combined59native483workflow/143preservation/407safety/294error plus22selection/ layout andClose59. The old native787candidate failure and pre-fix artifacts stay retained. No further native run is implied by post-tag receipt metadata changes.

Evidence: workspace verification/issue-101-ecosystem/evidence/issue111-release-v11. Post-tag README/PLAN/TODO/WORK/NOTICE metadata is reviewed before canonical promotion. Released59/130;71pending(7heldNames+64unmigrated). All original/archive inputs remain and whole migration/additionaltools/actualglyphcanvasreporters/docs stay open. No owner documents/preferences/Output/clipboard/site install changed.

2026-10-18 Task3q: isolated live-nodes worktrees from reviewed59 release. Native active-context calibration passes: valid H/E are falsey; cache initially null while active A exists. Use CurrentGlyph is-not-None. App baseline533pass 12.96s; first8new core tests RED missing module, then8pass0.01s. Menu tests first exposed a test contour.nodes double recreating nodes; make it persistent as native nodes are. Nine real-slot UI tests pass0.15s with owned timer/clipboard. Full source/artifact/native acceptance still pending; no new release or installs.

Task3q nativeoriginalv1 exit0:7unchanged workflow checks,2complete font/format/ workspace/history/master checks,Close1,80sourcehashes/restored imports. Both PNGs inspected; values H76,158,520; firstdistance82.0 and next477.2. Nativev2full controls exit1:17positive controls include realtimer,geometry+13/staleCopy, falsey E focus, emptyselection,read/render/clipboard failure+recovery, openingbinding/ data faults andrealdestruction/fullpreservation. Switchcontrols failed because MCPset_active_font doesnotchange actualactiveGlyphwindow; return/controlhistory checks correctlyfailed. Mastercontrol was also tightened to choose a different master, not just the last list item. Nativev3 exit1 retainedassertionwhen attempted notifyGlyphDoubleClick activation also stayed in oldactivefont. No crash/product change or weakened oracle. Independentcalibration plum/cosm provesMCP toolreports successbut activecurrentpackage staysold after switching; C++ endpoint onlysets workspacecachedcurrent/activepackage, whileactiveview overridesread. Native Window>Windows action routing now undercalibration before v4. Earlier receipts retained; no newrelease/canonicalpromotion/originalremoval.

Task3q correction: nativev1/v2 source hash count is81, not80. Switchcontextv2 calibration exits1 with AttributeError: MainWindow C++ slot doUpdateWindowsMenu is not exposed as a Python attribute. Native menuWindows popup/hide signal path under calibration; no product/runtime change or owner state touched. All owned fonts closed in finally.

Task3q source/fidelity gates:8newcore tests; App541pass12.98s; Scriptmixfull716pass1skip1.06s before five more boundary tests, then14newUI pass0.09s. Actual-wheel Git-free88files720pass2explicit skips1.22s, originalpairs60separate/sourcecovered. Installedwheel224pass0.28s/sdist224pass0.29s actualtargets, nohostimports. Fourcore AST bodies exact exceptannotations/docstrings; prior76runtime exact exceptscripting append,59manifest/menuimmutable. Switchcontextv3 familyName attribute absent (it belongs packageinfo); title_name verifiedbinding fixesmatch. v4 calibration showsnativefontWindowactivationworks, but reopeningGlyphcanrevertcontext; v5 fontWindow-only route passes4actualfont-ID switches209/3/209/3. Boundarycontrols nowprepare eachboundH first, pauseownedtimeronlytoisolate intentional switch/closebetweenpolls, then restartandrequireexpiry; survivorfullsnapshot beforetimerrestart. Earlierfailedcalibrationsretained.

Task3q v4fullnative exit1: original7/preservation2/Close1 stillpass;23of24additionalcontrols pass, including verifiedactualfontswitch/return/closure andcomplete survivorfont/workspace/history. Onlychangedmastercontrol fails: reopeningE resetsmasterRegular after a silentpackage.setMaster. Earlierloosemasterpredicatehadpassed; tightenedpredicatecorrectlyrejects it. Primarypyflglyph activeLayer setter + inspector layeractivation sequence inspected; controller nowsetsownedE.activeLayer, setMaster(target,True), notifyLayerActivated, requiresdistincttargetafterevents, thenrestoresownedlayer/master beforefullpreservation. No productchange. UpstreamMCPactivationdefect filed https://github.com/Fontlab/fl/issues/8526 afterexistingissue search; nativeWindowmenu4switch calibrationv5 passes. OriginalNone/clipboard/Closeoraclesunweakened. Final77runtimeartifactwheelbc28583326f3a7821851317b3152c099266ba656cb4726e2816aaaeaf3a576ea/sdist73ae63826df5dc7485c9d8e065f433bbd18613c7e2460da01f7915f8412b1539 audit83/132entries. Finalinstalled224+224pass0.29/0.28s; actualfinalwheelScriptmix721pass1skip1.08s; Gitfree720+2skips1.22s. Prior59fullsamefinalwheel regression RUNNING. Allfailureevidenceretained.

Task3q v5 exit1: all realmaster/fontboundary controls pass, but exact preservation catches one E/Light shape.active false-to-true field from the test's own native layeractivation. No field is masked. Controller captures/restores those actual shape.active flags, then v6 exits0:7original workflows/2complete preservation/ 24additional timer/focus/Copy/open/read/render/clipboard/recovery/switch/close/ full-survivor checks andactualClose1.81hashes andpaths/modules restoration match. E/Light actualx88/396,y0/32;distance309.7/angle5.9deg independentlymatchesVFJ. Originaltwoimages exactv1;newH/Eimages inspected,remainingtwoHshots equivalence checked separately. Before/aftercompletefont/workspacebyteparsedobjects exact; dirty/Undo/master unchanged. No nativefontwrites byproduct or realclipboarduse. Prior59samefinalwheel exits0:483workflows/143preservation/407safety/294errors, 22selection/layout/Close59;153hashes/restorationpass. Combined60=490workflows/ 145preservation plus24newcontrols andClose60. Everyoldermenu/mappingbyteexact. App541source12.94s;224installed perwheel/sdist0.29/0.28s; actualfinalwheel Scriptmix721pass1skip1.08s;88fileGitfree720pass2skips0.99s;root179pass0.21s, scopedRuffpass;77runtime83/132payloadslicence/privacy. FourcoreASTbodiesexact. UpstreamMCPactivation#8526filed;all failednativev2-v5/calibrationsretained. Reviewed source accepted for feature integration; D17/downloadedtagR053pending. Still59/130released;alloriginals/archives/held7Names/broadergoalretained.

Task3q D17/R053 COMPLETE: reviewed feature825aa653/f941a6cb pushed; isolated main release worktree/clone contain only reviewed CHANGELOG release delta. rtk proxy gitnextver -d rel-live-nodes-app and rel-live-nodes-scriptmix exit0, pushing Appv0.2.16 f1e28cc654f476d78b324a101e01302e4f3e67cd and Scriptmixv1.0.12 f6c249601eb4b4acae8b29a58c7f6a8126446412. All28olderdistincttags(29refs incl protected annotated dereference) unchanged on remote. FreshAppclone541pass 13.41s;224installed perwheel/sdist0.28s,arm64Python3.11.14/metadata0.2.16, host-free imports under actualtargets.88filefreshGitHubGit-freeScriptmix720pass 2explicit skips1.26s;all60originalpairs independentlyaudited.77runtime/60menus exactcandidate. Stablewheelc6649db0f499db719f3e8bd63720c2963a996617975a01b99b6e3c5675f9d70f; sdistda4c157277935890d525e3f7bf62f1f4551a88deec0d396d7d498aacac58264e; 83/132payload licence/privacy. Scriptmixtar291945caa5d265bf85bfc9fe55491d31b9c26e1cd8885af55751cbd76c7a1db4. Independent stablewheel/downloadedmenu nativeR053 passes7original/2fullpreservation/ 24additionalnative/Close1,81hashes,restoredpaths/modules;all6imagesexactinspected candidate. Prior59sameproductionbytespasses483workflow/143preservation/407safety/ 294error+22selection/Close59;combined60=490/145+24newcontrols+Close60. Directreview of24sourcefiles frozenf779500115f136ba11d1ad623ed224acd885a3d3d4e21228c4c51632094551a1; no independentagent review claimed. D12 canonicalpromotion is authorized after these gates; finalremote refs are retained in workspace issue111-release-v12. Released60/130;70pending(held7Names+63unmigrated). Alloriginals/archivesremain; noownersiteinstall or realclipboard; fullIssue111 remains ACTIVE.

Task3s 2026-10-18: isolated compactMasterSwitcher source starts from reviewed60. App541/actualstablewheelScriptmix721+1skip baselines pass. Newcore5tests RED missing module then5pass0.01s;11UIcontrols pass before new61stmanifest row. Fixture tuple-return assumption corrected; no product fault hidden. New source reuses MastersDialog with narrow master-label guards and late owned buttons. Original font-master semantics calibrated; editor-layer switching not claimed. Full source/artifact/native/prior60/release gates pending; all originals retained.

Task3s native candidate verification (2026-10-18): complete Master Switcher passes 5 unchanged original checks, 2 complete preservation checks and43 additional native controls on FontLab9.0.9784. Plum3/Club25 buttons retain exact labels, exclusive checked/bold current state, visible three-column layout, real native Ctrl+number key events (macOS Command mapping), outside-current-master navigation, unknown-target refusal, replacement, no-font diagnosis, source/label/order faults, actual font switch/closure and Close destruction. All font/workspace/history snapshots restore exactly. Native v2 failed only the harness binding injection: it patched scripting.current_package after Proof had captured its import, calls0. v3 patches _proof_dialog.current_package; all43 controls pass. Earlier receipts retained.82 source hashes and module/path restoration pass. Four PNGs inspected: three unique images; the opening and Plum buttons are byte-identical. The Club panel is875x664logical pixels with all25full labels and nine rows visible. App546source tests12.76s; wheel229focused0.33s/sdist2290.29s; actual-wheel Scriptmix734+1explicit skip1.03s; Git-free90files733+2explicit skips1.37s; controller183tests0.29s; scoped Ruff passes. Initial local test commands lacked installed distribution metadata (and first used the wrong source env name), then were rerun with actual isolated wheel/Python3.11arm64; no test weakened. Original location_label/master_order ASTs match after removing annotations and docstrings, including nested helper docstrings. The first overly literal audit retained nested annotations and failed, corrected without changing product bytes. All60old rows/menu bytes and77old runtime files remain exact except appended scripting facade.79runtime wheel85/sdist135payload licence/privacy pass.235public files and README200lines each pass privacy/Python3.11syntax audit. No new dependency, owner site install or original/archive removal. Prior60same-wheel full native regression is running; review/D17/fresh-tag R053 remain pending. Current released scope60/130. Round Advances stays held at strict full-font history gate fl#8512.

Task3s final candidate review: prior60 same-production-byte native regression exits0:490workflow/145complete preservation/747additional checks/Close60, 158source hashes and module/path restoration pass. New Master Switcher candidate adds5original/2preservation/43controls/Close1, so combined61=495workflows and147 complete preservation checks. Final candidate wheel/sdist audits pass79runtime and85/135payload files; wheel a7790ab15e2d85d3d037660f0c5d8503105d15a9ee6b1433fcb2a08b1470edb3, sdist c206ea67c54736dbda1d1dd9389fb4294a4d47f4e0db0b82d0e1a15fc5d14871. 229installed tests each pass0.28/0.27s. Direct source review, exact original AST comparison, lifecycle/source/identity guards, actual key events and three unique rendered images pass; no independent reviewer agent claimed. All prior runtime bytes/menus preserved except append-only facade. No new dependency or owner-site install. Reviewed feature integration is accepted; D17 and independent downloaded tag R053 remain required before counting61released. Earlier failed receipts stay.

Task3s release acceptance (2026-10-18): authorized gitnextver releases Appv0.2.17 and Scriptmixv1.0.13 exit0. Fresh GitHub clone/download, build and isolated arm64 Python3.11.14 installs pass: App546tests13.43s, wheel229/sdist229tests0.27s each, Git-free90file Scriptmix733pass2explicit skips1.39s, all61original source/menu pairs separately verified. Stable79runtime/61menus exactly match native candidate; wheel85/sdist135payloads pass licence/privacy. WheelSHAe160ad037d5abe72a458e7cfcc49bc12e5be9fac4c7f917bb03fe57321b94f8a; sdistSHA5f6f3040d3eeac52f9a9ae9c876f7bcdbd28939d2de1d5cc5b4b3da6864f95cc; Scriptmix archiveSHA dc3debb52b8324c69a88e13ab27f805c1e042e34a7fc4a9c745944a7914c5771. Independent downloaded-tag native R053 exits0:5original/2complete preservation/ 43controls/Close1,82source hashes and module/path restoration. All four images freshly inspected (three unique): same geometry and labels; file/pixel comparison fails only inside selected bold text. Cause not established; no image equality claim. The initial exact-image assertion failure and comparison are retained. Source freeze122b1d57282a1c5bb03c078186d8d5f894eca5ae11f8ceea23b12d9103178b55; prior60same-runtime native passes490workflow/145preservation/747additional checks and Close60. Combined61=495workflow/147preservation; previous60control checks747 plus43newcontrols. Direct source/artifact/native review performed; no independent reviewer agent claimed. Reviewed D12 canonical integration follows these gates. Released61/130;69pending=held7Names+62unmigrated, including RoundAdvances held at full-font history fl#8512. All originals/archives remain; no owner-site install. Broader examples/archive/package cleanup/newtools/canvasreporters/docs stay open.

Task3t guide UI source candidate: complete Font Guides Panel, Grid Generator and Metric Reference Lines retain all original controls and H-selected native drives. Shared Masters shell supplies late font binding/status/Close; common guide-row formatting and bounded unit spins remove repeated UI code. GridPreview keeps original draw/set_content bodies on existing ProofView painter containment. Sourceguards include selection, masters, rawguide coordinates, metricvalues, geometry and all control options. Automatic dependant previews remain complete; entire unsafe batches disable Apply and the backend independently refuses them. App561tests12.99s; Scriptmix743tests1skip1.07s including9newactual constructor/ controls/backend/no-op/stale/immutable61 checks pass. Original61rows/menus frozen; new3candidate rows bring manifest64, not releasedcount64. NamedGuides category added to the explicit menu-depth validator after its expected RED. BaseQt-shaped combo lacked addItems; added only to the scoped owned fake. An initial UI generator f-string expression used an invalid escaped quote and failed before any writes; corrected persistent generator. Missing helper/view load failures retained. RootGUIDESpersistence predictor5tests andactualrunner capture/cleanup4tests first RED thenGREEN. It predicts every newguide record and preserves all other fields, including unknown fields/workspace. ExacttargetHdate is captured independently through native QDateTime.toUTC before Apply; no date fields are stripped. Compiled getter verified pyflglyph.h157/cpp359; official Qt5.15 QDateTime docs consulted. Nativeoriginal3/fullsavedreopen acceptance and extraGUI controls/artifacts/prior61/ review/release/R053 still pending. Current released61/130; wholegoal remainsactive.

Task3t history correction measured: protocolv2 UpdateAll-before-final-notify mutates40unrelatedauto dates andfailsRedo; retained, rejected. Explicitlystamp onlyeditedH inUTC beforefinalnotify instead passesexactfullfontUndo/Redo plus dirtyNone/UndoFalse restoration, deliberately crossing1.1s. Productnowinitializes eachnativeobjectvia checkInitHistoryState(0), constructsallguidesbeforemutation, stampsonlyeditedglyphs inUTC andrecordsonefinalnamedhistory step in finally, so appendfailurestilloffersnativeUndo. No manualdate rollback/normalization. 15coretests updated RED/GREEN; another partial-append/error test makes16focused. NativeGUIv3 onfix1wheelpasses27unchangedoriginalchecks,21complete persistence checks (7each),Close3,92sourcehashes/restoredimports. Fullsavedpayloads exactly predictguides; oneUndo restoreswholefont/workspace/nativecleanstate andnoextra Undostep, Redoexact, fullreopenpasses. Actualtargetdateverifiedinsideindependent clockwindowaroundrealAppwriter; Python-owned functionwrapperrestored, nativeQt classes untouched andoriginalDRIVE/checkunchanged. Wrapperclosure/globalreuse regression firstREDthenGREEN; rootclock/nativeoracle11focusedtests pass. Initialv1/v2 originaltwo-notify failures andallprotocol variants retained. First3previewimages inspected: completeFontGuides/H-grid/metricbaseline outputs. FurtherUIcontrols stillrequired. Newstale-selectiontestcatchesfont-guide label leftvisibleafterinvalidation; narrowfixclearslabel/context andneutralpreviewframe. Nativefix1artifacts nowpre-fix foronlythislastcleanup; newartifact gate required. Canonicalreleased61/130 unchanged; fullgoalACTIVE.

Task3t candidate fix3 gate (2026-10-18): native v4 passed original27, complete-persistence21, opening18/safety90/painter16 controls, Close3 and92hashes. Further actual-control v5 adds43positive controls: two selectedglyphs H/zero, vertical/current, H/current andV/all grids, five metric levels with differing per-master fixture values, emptyselection-of-metrics no-op and prior owned guide history/title restoration. Full167additional controls pass; original27/complete21/ Close3/92hashes and restored imports/paths pass. All14v5images inspected directly. Original painter draw AST exact; five pure/read helpers exact after annotation/ docstring removal. Metric reader retains computation with lazy native lookup. All64source/destination hashes pass; prior61menus/rows and79runtime files exact, except append-only facade. Public151App/94Scriptmix files pass3.11syntax/privacy. Fix3 wheel60b1f775f3dc27a7f5ef2c7e211fc812f1942b1c59510150943bbefb07e7eb95, sdistc759a236cde8efb540d5dff4717e3de75b2cc5ddd0a7fada06ea66b6f321168f: 83runtime bytes exact,89/141payload licence/privacy pass. Installed245tests each wheel/sdist0.30s; sourceApp56213.05s; actual-wheel Scriptmix744+1explicit skip1.06s, Git-free744+1skip1.33s, root2000.25s. Ruff scopedallpass. Commands: App cwd rtk proxy uv run --extra test --python cpython-3.11-macos-aarch64-none python -m pytest -q exit0. Earlier rtk proxy uvx hatch run test exit1 (no configured test alias); no passing tests claimed for that command. Root rtk proxy env PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 uv run --no-project --python cpython-3.11-macos-aarch64-none --with pytest python -m pytest -q verification/issue-111 exit0. Artifact build rtk proxy uv build --out-dir <isolated-fix3-dist> exit0; audit/install commands retained in .local receipts. Native exact command: rtk proxy env FL_RESTART=1 verification/issue-104/fl-native.sh --mutating --lane issue111-guides -- uv run --quiet --project fontlab-remopy python verification/issue-111/run_reports.py verification/issue-101-ecosystem/evidence/issue111-guides-v5 --app-src .local/issue111-app-guides-fix3-wheel --scriptmix-src .worktrees/issue111-guides-scriptmix --verify-guides --verify-close --scripts guides_font_guides_panel.py guides_grid_generator.py guides_metric_lines.py exit0. Prior61same-runtime regression running. First wrapper command exit2: filename appended after an option ended argparse's --scripts list; corrected command puts it before --verify-live-nodes. No scenario/mutation occurred in that failed run. Full command retained .local/issue111-core61-guides-command.json. Feature commits, release and downloaded-tag R053 remain pending. Canonical61/130; fullgoalACTIVE.

Task3t COMPLETE/released: reviewed Appv0.2.18/Scriptmixv1.0.14 pass independent fresh download/build/install/native R053. Stable27original/21complete history/ persistence/167additional controls/Close3,92hashes/restored imports and14exact inspected images. Prior61identical-runtime regression passes495workflows/147 preservation/790controls/Close61; combined64=522/168/957/Close64. FreshApp562tests, installed245eachwheel/sdist; downloadedGit-freeScriptmix744+1explicit skip and all64originalsource/destination pairs pass. Stable83runtime/89wheel/141sdist license/privacy audits pass; no runtime difference from candidate. Source freeze fb69ce9089000ffbcc925c7a2e9de94d52569e979b375a9bdd4974c5d6d94508 covers245publicfiles. D17 commands rtk proxy gitnextver -d .worktrees/rel-guides-app and rtk proxy gitnextver -d .worktrees/rel-guides-scriptmix exit0; all33olderremote refs unchanged. R053 repeats exact v5 command with out=issue111-release-v14/native, app-src=.local/issue111-app-v0.2.18-wheel andscriptmix-src=.local/issue111-scriptmix-v1.0.14,exit0. Posttag updates onlyREADME/PLAN/TODO/WORK/NOTICE. No runtime/menu/test/manifest delta. Released64/130;66pending=held7Names+59unmigrated. Alloriginals retained; broader examples/archive/cleanup/newtools/realcanvasreporters/docs and fullgoal ACTIVE.

Task3u guide rewrite source stage: isolated issue-111-guides-rewrite worktrees based on reviewed4f14ab5/2e0ba8a. BaselineApp56213.50s andScriptmix744+1explicit skip1.34s pass. C++pyfllayer.h178 binds2boolremoveGuides; nativefllayer.h701 thirdvector defaultsTrue, bodyfllayer.cpp6312-6333 explicitlyretains hints. Reviewedoriginal guide copies/filter/merge/scaling core passes21native controls on clean reopens of ownedPlum: exactentirefont applied/UTCstamp/no-op/oneUndo/ nativecleanstate/Redo/reopen forclear,listedit,copy. Nativecolour/tags onretained andtargetguides preserved; hints/allotherfields exact. NewactualAppsourcebackend also passes same21controls and restores original module/path maps (backend-v1). Appguide_records/guide_rewrite preconstructall native clones/newguides before anymutation, reusemeasuredhistoryprotocol, refuseentireunsafe targetbatch and nonfiniteeditedcells.18focusedtests pass0.02s; firstREDmissingmoduleexit2, secondcollectionfailurefrompackage__getattr__ corrected by explicitsubmodule import. Original Anydirection label retained. Full panels/artifacts/sourcefidelity/ originalnativeGUI/postseedbaselines/lifecycle/prior64/release/R053 remainpending. Exactnativecommands rtk proxy env FL_RESTART=1 verification/issue-104/fl-native.sh --mutating --lane issue111-guides-rewrite -- uv run --quiet --project fontlab-remopy python .local/issue111-guides-rewrite-carrier.py and samewithbackend-carrier.py exit0. Core rtk proxy uv run --extra test --python cpython-3.11-macos-aarch64-none python -m pytest -q tests/test_guide_rewrite.py exit0. Currentreleased64/130; no67claim ororiginalremoval. FullgoalACTIVE.

Task3u source panels nowcomplete: Clear Glyph Guides keeps direction/name/scope and detailed removal rows; Copy retains source/target checkboxes, merge/replace, width scaling and complete add/remove previews; List retains firstselectedglyph, editablecoordinates/angle/name/current-allmasters/Add/Delete/Revert and onebatchApply. Dynamicmastercheckboxes bindafterstatus/Close; rowactions andparsedmasterlabels checkcompletefont/selection/source beforewrites.18Appcore and11actualwidgets tests pass; fullApp58012.95s, sourceScriptmix755+1skip1.37s. FirstGUItests RED7missing helpererrors+manifestcountfailure; ownedAlignTop double/nameimport corrected. New67candidate rows preserve released64 digest2685650af3e45013fd9c63a0718fc64c8b13c16f80f65b11cbd65c21893e5f1c. Newpostseedfullfontoracle capturesbaselineAFTERunchangedoriginalseedingcode, includespriorUndo title andindependentUTCwriteclock;4focusedcontroller tests pass. Source/artifact/nativeGUI/lifecycle/refusal/prior64/release/R053 stillpending. Released64/130 unchanged; broaderfullgoalACTIVE.

Task3u nativeGUIv1 exit0:19unchanged originalworkflow/21completepostseedfont/ workspace/history-title/Undo/Redo/reopen checks/Close3;96hashes/restoredpaths and modules.9originalscreenshots inspected. Source review then caught missing advance widths in Copy's snapshot (oldguide source reads geometry=False): newtestfirstRED wroteusingstalescaleratio. NarrowRewriteDialog.source_values adds plain source/ targetwidths without changing83oldruntime files.12widgettests nowpass0.05s. Fix1artifactsv2 nativepasses19/21/114opening-source-context-refusal controls/ Close3,includingactualtargetwidthchange, unsafeA/mixedbatch andstaleAdd/Delete. Nativev3 adds36positivecontrols: two-glyph all-master verticalfilter, explicit replace/unscaled andmerge/scaled angledguides withindependentsix-digitvectors, all-masterListAdd/Delete/Revert preservingonlyfirstselectedH andretainedcolour/ tags/rawgeometry/hints. All150controls pass;13images inspected (9exactv1+4new). Original19/complete21/Close3/96hashes/restoration pass unchanged. Additionalnative badlaterrow nan/inf/nonnumeric/unknownmaster controls are prepared, not yet run. Prior64samefix1-runtime regression running via .local/issue111-core64-guides-rewrite-command.json; noparallelFontLab runs. First64originals not yetfinalsharedgate. Fix1wheel e20c96a0f3378c7879832c360aa3343407e8a405242afd497b8a256fdeab0878, sdist a481d3d7dd06139209f1e673723735941682e84c22cb9fe6a9444fe4e2872a29: 87runtimebytes exact,93wheel/146sdistpayloadlicense/privacy pass. Current580App 12.71s,263installedwheel0.28s/sdist0.31s, installed-wheel GitfreeScriptmix756+1 explicit skip1.56s and67originalpairs pass. Root208tests0.25s. Public156App/98 Scriptmixfiles3.11/privacy pass; README200each. Sourcefidelity direction/matches/ scaled ASTexact, prior64menus/rows and83oldruntimeexactexceptappendedfacades. Initialsourcecopysteamlookup mixedsame-name native scenarios withsamplecopies; correctedseparateinventory: each8centralidenticalmenus+1C2palette-onlyvariant, 8same-nameoriginalscenariosseparately. No inputchanged. Sourcefidelity andimage receipts retained. Fullnativeinvalidrow/control gate, prior64, directfreeze, release andfreshdownloaded-tag R053 remainpending. Canonicalreleased64/130; alloriginals andfullbroadergoalremainACTIVE.

Task3u prior64same-fix1-runtime regression exit0:522original/168complete preservation/957additional controls/Close64;178hashes/restoredimports pass. Final4invalid-laterrow controls running as nativev4; v3all150controls pass. No productruntime changes afterwidthsnapshotfix; finalsourcefreeze includesdocs.

Task3u COMPLETE/released: reviewed Appv0.2.19/Scriptmixv1.0.15 freshdownload/ build/install/native R053 passes19original/21completepostseedfont/history-title/ Undo/Redo/reopen/162additionalcontrols/Close3,96hashes/restoredimports and13exact inspectedimages. Invalidlaterrow nan/inf/nonnumeric/unknownmaster refusals allpass with completefont/history unchanged. Prior64identical-runtime regression passes 522workflow/168preservation/957controls/Close64;combined67=541/189/1119/Close67. FreshApp58013.44s;263installedwheel0.30s/sdist0.31s; downloadedGitfreeScriptmix756+ 1explicit skip1.45s andall67separateoriginalpairs pass. 87runtime/93wheel/146sdist licence/privacy pass; no runtime/menu/manifest difference from reviewedcandidate. Sourcefreeze254files7ad9e0d9ba003a4a823e4a8042a6ec7b9748c87d23b8d7024540d4006704fb3d. D17 rtk proxy gitnextver -d .worktrees/rel-guides-rewrite-app and rtk proxy gitnextver -d .worktrees/rel-guides-rewrite-scriptmix exit0;35oldertagrefs unchanged. R053 repeats v4 exactnativecommand with out=issue111-release-v15/native, app-src=.local/issue111-app-v0.2.19-wheel and scriptmix-src=.local/issue111-scriptmix-v1.0.15,exit0. OnlyREADME/PLAN/TODO/WORK/NOTICE change after immutabletags. Released67/130; 63pending=held7Names+56unmigrated. Alloriginals and fullbroadergoalremainACTIVE.

Task3v Anchor9 source-only/calibration stage: clean isolated issue-111-anchor-editors worktrees at reviewed2c8027f/40e0a3e. BaselineApp58013.08s andScriptmix756+1explicit skip1.38s pass. Sourcecopies and originalscenarios live underL1 (notcentral); rebuild_checks marks auto-composite deltas informational, notacceptance. Original warnings do notwaive wholefontUndo. Actualbound anchorpoint isflPinPoint.point; newpin boolproperty isanchor, notheader-styleisAnchor (pyflpinpoint.cpp114/117). CodeGraph existsroot+Cpp; usecodegraphbeforefurther source searches (CLIavailable). Nativehistoryv1 firstHcontrol passesall6checks; minimalA.topx+17 leaves14residues in7automaticcomposites afteroneUndo, despiteclean nativehistorystate. Reopen/Redo exact. Carrierstoppedbeforelowercasea becauseMacfilesystemaliasesA/a folders; failedv1 retained. v2 usesu0041/u0061 filenames: H andh passall6; A,a,n,o fail completeUndo with14/14/3/13residues, Redo/reopenexact/nativehistorystateclean. v2 thenStopIteration onm(noexistingtopanchor); thisneedscreationcalibration, notclassification aswriterbug. v3separatelychecksCosmItalic.o. Allrunsownedfonts, per-objectcheckInitHistoryState(0), onefinalnotify, targetUTCstamp; noautolayer notification/manualrollback/fieldmasking. ActualAresidues includeAacute/Agrave Regular topanchor298->315 andAbreve/Acircumflex/Adieresis/Aring/Atilde accent xOffsets+17 plus7shiftedlastModifieddates. Allreceipts andfailedattemptsretained. Verifiedexistingupstreamfl#8512 OPEN via ghissueview/search; evidencecommentpending source-specific investigation/finalcalibration. NoAnchorproductcode/menus changed. Currentreleased67/130 unchanged; fullgoalACTIVE.

Task3v calibration completion: CosmItalic.o minimalpointedit leaves19residues after Undo(v3), nativehistoryclean. Addednewm.top pin(v4) applies/Undoexact butRedo and reopeninferappearance5 fromomitteddefault0. Sourceflpinpoint.cpp110-125/349-354 confirmsname-derivedappearance andflpinpoint.h17-30 values (Up5/Down6/Left7/Right8/ Circle1); publicC++detectAppearanceisnotPython-bound. Explicitappearance5 onnewtop (v5) makesall6completefont/history/Redo/reopenchecks pass without changingexisting pins. Thisiscreationstabilization, not a waiver/masking ofsavedfields. Nativefulloriginaln->h/m, all3mastercopy core nowpasses8strictchecks atcorrected history/explicitnewappearance:18anchors/6layers, onlyexpectedtargets/dates, no-op, oneUndoentirefont/nativecleanstate, Redo/reopenexact. Source n/allotherfields kept. Thus CopyfromGlyph has an independentlysafe originalscope; other8Anchor editors stillrequireunsafe-scopehandling. NoAnchorproduction implementationcounted yet. Updated matchingexistingfl#8512with minimalA+17 realanchor/componentUndo residues, cleanflaghazard, controls andsourceinvestigationdirection: https://github.com/Fontlab/fl/issues/8512#issuecomment-6245891526 . No privatepaths/assets. Current67/130released;63pending. FullgoalACTIVE; nineAnchororiginals retained.

Task3v Copy Anchors candidate: original source n -> h/m all3masters now passes 11unchanged L1 checks and7complete font/workspace/history-title/Undo/Redo/reopen checks on installed fix2 wheel (native9784). Native v5 controls130/130: 6opening+56source/context/refusal/lifecycle+68positive across8cases, Close1; 93hashed sources and import/path restoration. Source/default/width/mode/empty/ self/prior-history behavior retained. Existing automatic dependants refused whole batch before mutation (fl#8512); existing-point moves to origin refused because minimal h.bottom282,0 ->0,0 Undo passes butRedo restores282,0 (new fl#8527). Original arithmetic remains visible, including zero-source fallback and negative source widths; newly created native pin appearance stabilized using verified C++ name defaults. Native v3 fractional fault injection changed no native point (strong rounding), so two stale-point controls were invalid; v4 uses+17 with actual-change assertion and all53source controls pass. v4 positive zero-target case found the real originRedo defect; both failed runs retained, not waived. Core17tests pass; actual-widget14tests and controller23tests pass. Fresh prior67 regression active. Candidate not released or canonically promoted; count remains 67/130. Originals remain. FullgoalACTIVE. Commands: rtk proxy ./test.sh -q (App591,12.84s,exit0 before6additional tests); rtk proxy env SCRIPTMIX_APP_REQUIREMENT=<fix1-wheel> SCRIPTMIX_PYTHON=cpython-3.11-macos-aarch64-none ./test.sh --original-source-root <workspace> (760+1explicit skip,1.33s,exit0 before10additional widget tests). rtk proxy env FL_RESTART=1 verification/issue-104/fl-native.sh --mutating --lane issue111-anchor-copy-v5 -- uv run --quiet --project fontlab-remopy python verification/issue-111/run_reports.py verification/issue-101-ecosystem/evidence/issue111-anchor-copy-v5 --app-src .local/issue111-app-anchor-copy-fix2-wheel/lib/python3.11/site-packages --scriptmix-src .worktrees/issue111-anchor-editors-scriptmix --verify-anchor-copy --verify-close --scripts anchors_copy_from_glyph.py exit0. rtk proxy python3 .local/issue111-run-core67-anchor-copy.py active; exact argv retained in .local/issue111-core67-anchor-copy-command.json.

Task3v final candidate checks: App597 (12.82s), Gitfree Scriptmix770+1explicit skip (1.52s) with all68original-source hashes checked, installed wheel/sdist 280each (0.32s), root controller214 (0.26s), focused Ruff and Git whitespace checks pass. All11native screenshots inspected. Prior67 installed-runtime regression passes all scripts, full preservation and native controls; exact receipt is anchor-copy-prior67-acceptance.json. All87prior runtime files remain exact except appended lazy scripting facades; all67prior menu/manifest rows remain byte-exact. Candidate production89files. Native default-origin Redo defect is filed and verified OPEN as fl#8527; existing point moves to origin refuse before history and remain visible in preview. Release and independently downloaded-tag R053 remain pending; current released count67/130 unchanged. Exact commands/outputs: issue111-anchor-copy-installed-artifacts.json and issue111-core67-anchor-copy-command.json in local retained command evidence.

Task3v fresh-tag visual rejection retained: Appv0.2.20 e3782103 / Scriptmixv1.0.16 5128865c pass numerical R05311/7/130/Close1,93hashes/restoration, freshApp597, GitfreeScriptmix770+1skip and280installed perwheel/sdist. However settled blocker layout overlaps: tablebottom426,labeltop415. These tags remain unchanged; they are not canonically promoted or counted as released. Candidate visual acceptance was premature for the three newly captured refusal shots. Corrected owned dialog adjustSize()+single explanation/short footer measures426<439..470<483 for origin/unsafeA/mixed, actualscreenshots inspected. New automatic native geometry controls enforce these gaps; complete installed fix validation running. Replacement release must use newAppv0.2.21/Scriptmixv1.0.17, then freshR053. Source/runtime of all67prior tools remains byte-exact; same-runtime prior67 regression remains valid because only the isolated new copy-dialog module changed. rtk proxy env FL_RESTART=1 verification/issue-104/fl-native.sh --mutating --lane issue111-anchor-layoutfix -- uv run --quiet --project fontlab-remopy python .local/issue111-anchor-copy-layoutfix-probe.py exit0. Freshsource/publicartifact/native numerical checks and bothfailedvisualcandidate receipts are retained under issue111-release-v16. Count67/130, fullgoalACTIVE.

Task3v layout correction accepted at installed candidate: all11original checks, 7fullfont/history/Undo/Redo/reopen and133controls pass, including all3settled non-overlap geometry assertions. All14screenshots inspected; normal previews retain identical geometry/text, with two2x31cursorblink differences only. SourceApp59712.95s, actual-wheelScriptmix770+1skip1.23s andcontroller2140.28s pass. Only the new copy-dialog module changes runtime after the prior67 run; all87previousruntime and all67menus remainexact. Newtags/R053 still pending.

Task3v final acceptance: replacement Appv0.2.21 (e85aa126b98268bafa21ed71a2e5f73eb94a78f6) and Scriptmixv1.0.17 (03d761a2c74a0a0c81ba32a17ca5d14302dd6f02) downloaded and independently built/installed. NativeR05311original/7completefont-history- Undo-Redo-reopen/133controls/Close1,93hashes andimport/path restoration pass. All14images match inspected fixed candidate except four2x31caret rectangles; all3blocker geometry assertions pass. FreshApp59713.14s; GitfreeScriptmix770+1 explicit skip1.65s/all68sourcepairs; installedwheel/sdist280each0.65s; controller 2140.28s. Sourcefreeze1a41b64e7da0a4353e768a238d12688b05f7f88b76cad607c2b71facb643010c. Stablewheel498083df1cf22a1c0559e30b934aa167a005a31fcd59c58abcd1e579a004efee, sdistc209167a797b63c35c399a37cacff14229df66a07778db99a1baca7405a0d455. D17 exactcommands rtk proxy gitnextver -d .worktrees/rel-anchor-copy-app and rtk proxy gitnextver -d .worktrees/rel-anchor-copy-scriptmix exit0. All39older remote tagrefs remain unchanged, including the rejected visual candidates and protectedv0.2.0.89production/68menus; prior67same-runtime541/189/1119/Close67 and189hashes pass. Combined68=552workflow/196preservation/1252controls/Close68. Posttag change restricted to README/PLAN/TODO/WORK/NOTICE; no runtime/menu/test/ manifest delta. Released68/130,62pending=7heldNames+55unmigrated. All originals and the entire wider goal remain open. No PyPI/GitHub-release-object claim.

2026-10-18 A6 verified selection context fixtures

Base9316e02; isolated issue-111-selection-context branch. Only shared test_names and test_proof fixture ancestry changed, plus one real shared-helper Glyph-window refusal test in test_names. Model the controller-measured activeFontPanel: FontWindow→QStackedWidget→QTabWidget→YFrameWindow. Preserve all pre-existing test assertions. No guard mock, native Qt class patch, production/menu/manifest edit.

Initial actual guarded-App-wheel run754pass/16fail/1skip because both old fixtures lacked activeFontPanel. Updating test_names alone left15failures from test_proof; controller then authorized that second shared fixture. Full final suite771passes, 1historical explicit skip,1.83s; no failures waived. App618tests pass separately. SHA-verified combined coverage includes complete451-statement/122-branch App scripting.py,97%rounded, above80%; no exclusions. The installed guard module is byte-identical to App candidate9bbaffa4430847f36b1ba633e7742bdb12a4558ac08cc789e0301292329212de.

Exact command here, exit0:

rtk proxy env PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 COVERAGE_FILE=/Users/adam/Developer/vcs3/github.fontlabcom/fontlab-scripting/.local/issue111-models-selection-scriptmix-final.coverage uv run --no-project --python cpython-3.11-macos-aarch64-none --with pytest --with coverage --with /Users/adam/Developer/vcs3/github.fontlabcom/fontlab-scripting/.local/issue111-models-selection-artifacts/fontlab_fontlabapp-0.2.22.dev2+g0f4e0a470.d20261018-py3-none-any.whl python -m coverage run --branch --include=*/fontlabapp/scripting.py -m pytest -q tests --original-source-root /Users/adam/Developer/vcs3/github.fontlabcom/fontlab-scripting
rtk proxy uvx ruff check tests/test_names.py tests/test_proof.py
rtk proxy git diff --check

From App candidate: rtk proxy uv run --with coverage python /Users/adam/Developer/vcs3/github.fontlabcom/fontlab-scripting/.local/issue111-models-selection-combine.py exits0 after source/installed SHA check and reports whole-module coverage. Receipt .local/issue111-models-selection-combined-coverage.json at workspace root. Native positive/negative selection, preservation, review and integration remain controller gates. No canonical changes/commits/pushes/releases occurred.

Guard-v1 native positive control exposed transient PythonQt parent-wrapper id reuse. App candidate now retains ancestor wrappers during traversal; Scriptmix fixtures/menus/runtime stayed unchanged for the correction. Fresh corrected actual-wheel full suite771passes1skip1.87s. New AppsourceSHA 05f734e4e7c8c9d7fc1a1039cb89632c6290478f3ee9f6bc2d21360bd39cca7b; combined whole-module coverage96.5458%, no exclusions. Correction report at workspace .local/issue111-selection-guard-fix-report.md; native-v2 pending.

Controller native-v2 now passes five positive/refusal/preservation checks. All68existing original scenarios plus actual Close destruction/registry cleanup pass on the same installed guard bytes, runner exit0 in101seconds with no crash. Durable receipts: issue111-selection-guard-v2 and issue111-selection-guard-all68-v1 under workspace verification/issue-101-ecosystem/ evidence. These test-fixture changes do not alter any menu/runtime/original.

2026-10-18 — additional foreground reporter acceptance

The separately tracked two reporter menus pass actual native simultaneous painting, peer ownership, Close and no-font diagnostics on the final date-fixed App artifact. All earlier geometry/pixel/clipping/context/lifecycle evidence remains byte-applicable; reporter runtime is unchanged from independent review. The shared App Guide Clear Redo date defect is deterministically reproduced, filed as fl8529 and corrected in three forward writers. Seventy-two forced boundary checks pass without post-Undo/Redo writes or date filtering.

Complete same-artifact prior68 regression passes552originalworkflow checks, 196preservation/history checks, all68Close and extended safety/painter/opening/ source/refusal controls. No failures waived; original failed date receipts stay. The three new common regression receipts are SHA-recorded in additional-tools. All68migration rows/menu payloads remain unchanged; additional reporters do not increase the130sample denominator. D17/release/downloaded-tag R053 is pending.

FullApp742, actual-wheelScriptmix775/1historicalskip, extractedApp740/2sibling-only skips, controller281/18subtests pass. All9App changed modules exceed80%statement/ branch/aggregate,97.10%total; two complete new menus have100%coverage. No new dependency or live-user install. Exact full68 runner argv is retained at workspace .local/issue111-reporters-datefix-all68-command.json, exit0. Actual menu command from workspace: rtk proxy env FL_RESTART=1 verification/issue-104/fl-native.sh --mutating --lane issue111-reporters-datefix-menus -- uv run --quiet --project fontlab-remopy python .local/issue111-reporters-datefix-menus-native.py,exit0.

Release accepted: App v0.2.23 (570400a) / Scriptmix v1.0.18 (fca5571). Fresh remote tags match all 93 runtime modules, all 70 menus and unchanged 68-row migration manifest. App 742 and actual stable-wheel Scriptmix 775 tests pass (one historical skip). Native fresh-tag six forced date-boundary cases and both actual menus pass; all four panel images match inspected candidates. Published release assets independently download with identical hashes; all 42 prior tag refs remain unchanged. Final menu ZIP contains 70 menus and 5 public license/provenance/readme files, exactly matching tracked source. An initial ZIP attempt rejected untracked test bytecode and remains privately retained. The current additional-tools records reference the complete release receipts. Released sample count stays 68/130, plus two additional foreground adaptations. All other issue111 work remains open. Durable issue111-reporters-release-v1 records exact D17 commands/results, source freeze and asset hashes.

Z3 isolated read-only source slice — 2026-10-18

Created issue-111-readonly-release at exact reviewed main1d0086d. Copied only the two new menu leaves and their focused consumer tests. Reconstructed additional records and two manifest/reporter test hunks; original68 migration/menu payloads and two reporter records remain exact. Candidate Z2 receipts are identified as candidate evidence; isolated-artifact/native/regression/release gates stay pending. Root owns verification and final evidence. No new dependency or live install.

Final isolated source consumer suite787passed/2optional skipped on arm64Python3.11. Installed App candidate wheel 7f5221ab242686c893097409ef0d895938d26ff7f8c6ba0a7aed92b58947549d; both whole new menus100percent statement/branch/aggregate coverage. Original68 menu bytes, migration.json and two reporter records exact to reviewed1d0086d. Four actual-native isolated-wheel controls pass68checkinstances. Prior68 running; release and downloaded-tag gates remain pending. No global rescue baseline change. Commands: root issue111-Z3-scriptmix-{scope,coverage,coverage-result}.json and issue111-Z3-isolated-consumers.log; coverage run full suite exit0 and metric validator exit0. Focused Ruff and git diff --check exit0.

Historical source audit correction: explicit --original-source-root initially failed because authorized D24 removal made _old absent. A small test-only original_source resolver now follows preserved rescued paths; exact source hashes and original constants/interfaces remain enforced. No migration body/hash or production module changed. Full actual-wheel consumers now788passed/1optional skip including all source audits (previous default787/2skip retained). Initial RED missing-path and final GREEN receipts retained; Ruff5testfiles/diffcheck pass.

Controller same-wheel full prior68 regression passes552original workflows, 196complete persistence checks, Close68 and44loadedApp modules. All owned fonts close and import state restores exactly.211screenshots present;197exact to prior P checkpoint and14different regions reviewed (owned paths, refresh clocks, native focus/emphasis only). All five App modules and two menu modules pass standard fixed-baseline quality gates after full867App/788consumer tests,1optional skip. No rescue/global baseline advance. The normal main revert commits restore exact last-accepted trees while preserving held angle tags/assets/source. Isolated source/artifact/native/review gates pass; version/tag/push/R053 remain.