Skip to content

fix: restore colour-scheme opt-in and harden extension lifecycle - #178

Open
FanaticPythoner wants to merge 4 commits into
masterfrom
fix/issue-110-unwanted-tag-style-changes
Open

FanaticPythoner wants to merge 4 commits into
masterfrom
fix/issue-110-unwanted-tag-style-changes

Conversation

@FanaticPythoner

Copy link
Copy Markdown
Owner

Restore explicit colour-scheme activation so foreground-only custom
highlights retain their configured colours without injected backgrounds.

Highlight configuration:

  • default useColourScheme to false in both settings namespaces and runtime
  • delegate settings snapshots to config.shouldUseColourScheme()
  • cancel pending highlights and prune decoration state for hidden editors
  • skip delayed highlights for closed or no-longer-visible editors

Runtime lifecycle and tree interactions:

  • add an activation scheduler for timeouts, intervals, and immediates
  • dispose the previous runtime before reactivation and make teardown
    idempotent across deactivation and subscription disposal
  • cancel scheduled work, clear scan/document state and highlight caches,
    settle progress sessions, and dispose output channels and tree resources
  • guard queued commands, context changes, tree mutations, and asynchronous
    completions against disposed runtimes
  • settle pending tree UI turns during teardown without revealing nodes
  • cancel stale active-editor tracking and recheck editor and settings
    state before passive reveals
  • return indexed tree elements directly and preserve reveal error
    propagation through command boundaries
  • dispose line-flash decorations without writing to closed editors
  • add generation queries to repeated exports to avoid cached documents
  • dispose tree change emitters and pending expansion-state writes once

Search and cleanup:

  • track every active ripgrep process and cancel concurrent searches
  • guard process completion and pattern cleanup against repeated events
  • stop consuming output after process completion begins
  • remove the inert ripgrepMaxBuffer setting from both namespaces, runtime
    options, legacy migration, localization, documentation, and fixtures
  • remove unused detection and colour/icon parameters, helper functions,
    imports, and obsolete runtime state

Release and packaging:

  • restrict the canonical VSIX matrix to nine native targets
  • remove web target handling from ripgrep mappings, package staging,
    PR preview labels, and bundle checks
  • require one matching ripgrep executable and its metadata per target
  • derive stable and nightly build targets from targets.json
  • exclude .forge from Git, npm, and VSIX packages
  • exclude development-container files from npm packages and omit
    packaging ignore files from the opposite distribution format

Documentation and dependencies:

  • document colour-scheme opt-in, native platform coverage, the Node
    extension-host requirement, and incremental ripgrep output parsing
  • correct the foregroundColourScheme setting name in README
  • add missing Simplified Chinese diagnostic and current-scan commands
    and translate remaining manifest command and setting strings
  • refresh browserslist, baseline-browser-mapping, caniuse-lite,
    electron-to-chromium, node-releases, and update-browserslist-db
  • refresh brace-expansion, fast-uri, js-yaml, qs, side-channel, and undici,
    including associated lockfile integrity and dependency metadata

Regression coverage and evidence:

  • cover manifest/runtime opt-in, authoritative snapshot policy, and
    foreground-only custom highlights while retaining explicit palettes
  • cover scheduler cancellation, synchronous clocks, repeated disposal,
    hidden-editor highlights, and pending tree UI teardown
  • cover stale tracking, reveal failures, closed-editor line flashes,
    repeated export generations, and activation resource cleanup
  • assert concurrent ripgrep cancellation and single pattern cleanup
  • enforce localization coverage, 72 settings per namespace, native target
    membership, executable metadata, and packaging exclusions
  • align release, Marketplace, and PR preview fixtures with native targets
  • extend performance harnesses with editor visibility events and disposal
  • add the two-scenario highlight latency and RSS comparison artifact
  • refresh the regex-registry equivalence report

Fixes #110

Restore explicit colour-scheme activation so foreground-only custom
highlights retain their configured colours without injected backgrounds.

Highlight configuration:
- default useColourScheme to false in both settings namespaces and runtime
- delegate settings snapshots to config.shouldUseColourScheme()
- cancel pending highlights and prune decoration state for hidden editors
- skip delayed highlights for closed or no-longer-visible editors

Runtime lifecycle and tree interactions:
- add an activation scheduler for timeouts, intervals, and immediates
- dispose the previous runtime before reactivation and make teardown
  idempotent across deactivation and subscription disposal
- cancel scheduled work, clear scan/document state and highlight caches,
  settle progress sessions, and dispose output channels and tree resources
- guard queued commands, context changes, tree mutations, and asynchronous
  completions against disposed runtimes
- settle pending tree UI turns during teardown without revealing nodes
- cancel stale active-editor tracking and recheck editor and settings
  state before passive reveals
- return indexed tree elements directly and preserve reveal error
  propagation through command boundaries
- dispose line-flash decorations without writing to closed editors
- add generation queries to repeated exports to avoid cached documents
- dispose tree change emitters and pending expansion-state writes once

Search and cleanup:
- track every active ripgrep process and cancel concurrent searches
- guard process completion and pattern cleanup against repeated events
- stop consuming output after process completion begins
- remove the inert ripgrepMaxBuffer setting from both namespaces, runtime
  options, legacy migration, localization, documentation, and fixtures
- remove unused detection and colour/icon parameters, helper functions,
  imports, and obsolete runtime state

Release and packaging:
- restrict the canonical VSIX matrix to nine native targets
- remove web target handling from ripgrep mappings, package staging,
  PR preview labels, and bundle checks
- require one matching ripgrep executable and its metadata per target
- derive stable and nightly build targets from targets.json
- exclude .forge from Git, npm, and VSIX packages
- exclude development-container files from npm packages and omit
  packaging ignore files from the opposite distribution format

Documentation and dependencies:
- document colour-scheme opt-in, native platform coverage, the Node
  extension-host requirement, and incremental ripgrep output parsing
- correct the foregroundColourScheme setting name in README
- add missing Simplified Chinese diagnostic and current-scan commands
  and translate remaining manifest command and setting strings
- refresh browserslist, baseline-browser-mapping, caniuse-lite,
  electron-to-chromium, node-releases, and update-browserslist-db
- refresh brace-expansion, fast-uri, js-yaml, qs, side-channel, and undici,
  including associated lockfile integrity and dependency metadata

Regression coverage and evidence:
- cover manifest/runtime opt-in, authoritative snapshot policy, and
  foreground-only custom highlights while retaining explicit palettes
- cover scheduler cancellation, synchronous clocks, repeated disposal,
  hidden-editor highlights, and pending tree UI teardown
- cover stale tracking, reveal failures, closed-editor line flashes,
  repeated export generations, and activation resource cleanup
- assert concurrent ripgrep cancellation and single pattern cleanup
- enforce localization coverage, 72 settings per namespace, native target
  membership, executable metadata, and packaging exclusions
- align release, Marketplace, and PR preview fixtures with native targets
- extend performance harnesses with editor visibility events and disposal
- add the two-scenario highlight latency and RSS comparison artifact
- refresh the regex-registry equivalence report

Fixes #110
@github-actions

github-actions Bot commented Sep 12, 2026 •

Copy link
Copy Markdown

PR VSIX: unavailable

No installable bundle matches cf574b861b95.

Reason: CI concluded with failure.

Workflow run

Settings compatibility:
- centralize grouped and historical flat Todo Tree setting mappings
- apply VS Code user, workspace, folder, and language precedence;
  resolve same-scope ties as current, grouped Todo Tree, then flat keys
- merge object settings without mutating source values and preserve
  explicit false, zero, empty arrays, and empty objects
- generate 108 Todo Tree settings entries from current schemas and
  retained historical metadata; check alias consistency before packaging
- map historical scan-mode, toolbar-button, and scheme settings;
  retain Todo Tree view-placement and output-buffer setting metadata
- remove obsolete current-namespace tree preferences and Todo Tree
  deprecation notices; share schemas and localized setting descriptions
- accept capture-group highlight types, theme colors, and CSS color
  strings in default and custom highlight schemas
- resolve toolbar buttons individually and keep add/remove-tag writes
  at the configured scope

Settings import and public identity:
- replace activation-time settings rewrites and version-gated migration
  prompts with direct reads and explicit Import Todo Tree Settings
- copy recognized settings into unset destinations at their original
  scopes, including exact single and combined language override blocks
- preserve source, unrelated, unknown, and retained historical settings;
  leave existing destinations intact and make repeated import idempotent
- serialize import requests, observe destination propagation, and report
  source changes, cancellation, and write failures with typed errors
- remove Todo Tree command/context aliases and the todotree-export
  provider while retaining the existing view/container identifiers
- replace the old compatibility suite with identity and migration tests
  covering mapped keys, scope precedence, empty values, object merging,
  retries, delayed propagation, cancellation, and added folders

Runtime and scan handling:
- scope scan state, timers, document queues, and Git polling guards to
  each activation; reset transient tree overrides during initialization
- derive open-file membership from editor tabs, including hidden and
  diff tabs; prune closed-tab queues and refresh open-file results
- refresh tag-group lookup before snapshots and scans, rescan existing
  editors after regex edits, and rebuild snapshots on folder changes
- restore optional glob-scoped workspace file watching for external
  creation, edits, and deletion; invalidate affected document caches
  and dispose replaced or disabled watchers
- wait for all cache-reset operations, aggregate failures, clear icon,
  highlight, document, and submodule caches, and rebuild rendered state
- cover reactivation callbacks, regex/group edit ordering, hidden tabs,
  final-tab closure, cache-deletion failures, and watcher ownership

Detection and highlight data:
- reuse resource snapshots and scan contexts across default, Markdown,
  embedded-language, and custom-regex detection
- centralize regex-source construction, cache capture metadata by regex
  source, and cache comment-trim patterns per scan context
- collect comment matches with flatMap instead of repeated growing-array
  copies and find newline offsets with indexOf
- use Map, Set, null-prototype records, and own-property checks for tag
  groups, highlight/subtag ranges, counts, exports, and glob handling
- cover UTF-16/newline boundaries, 8,000 separated comment blocks,
  snapshot-controlled regions and regexes, trim-pattern caching, and
  prototype-named tags through grouping, highlights, and counts

Codicons and generated assets:
- replace gutter letter badges with 639 bundled SVG glyphs resolved
  through 934 Codicon and product-icon aliases
- replace the old name-only tables and downloader with an asset compiler
  that checks archive integrity, version, SVGs, and alias targets
- include source provenance, content/code licenses, and generation docs
- derive icon filenames from SVG SHA-256 digests, share canonical
  assets, escape Codicon color substitutions, and reject unknown names
- cover every bundled alias, distinct RGB values, inherited-property
  rejection, and regeneration after icon storage is removed

Tree export:
- disambiguate same-line matches with columns and notebook source IDs
  while preserving prototype-named paths and multiline todo text
- replace treeify with an iterative text formatter that handles
  prototype-free records, shared subtrees, and multiline branches,
  and rejects invalid containers and cycles with typed errors
- add JSON and text export regressions for reserved names, duplicate
  positions, notebook cells, invalid nodes, and shared references

Native Methodical QA:
- add isolated VSIX installation and native workbench execution through
  Xvfb, CDP, and X11 with owned profiles, shared data, logs, and cleanup
- define a 4-theme, 9-mode, 8-profile highlight matrix for each settings
  namespace, totaling 576 cases, plus a focused Codicon overlay
- cover palette opt-in/out, explicit backgrounds, opacity, font styles,
  theme colors, disabled highlighting, subtags, and Codicon gutters
- compare independent expected ranges, computed styles, overlay/gutter
  counts, geometry within one CSS pixel, and fixture color contrast
- verify requested Codicon SVG digests and native image decoding;
  retain screenshots, DOM, ruler canvases, settings, source fixtures,
  editor identity, and the installed VSIX digest
- add customer probes for contributed commands, filters, navigation,
  scan/view controls, diagnostics, exports, cache reset, and notebook
  edits, same-line cells, and closed-editor cleanup
- add live grouped/flat settings, schema negative controls, import,
  precedence, watcher, JSONC, combined-language, and added-folder flows
- add X11 focus/keyboard helpers, OCR readiness, capture acknowledgments,
  and notification/render readiness checks
- generate indexed screenshot and ruler galleries with source hashes;
  constrain replacement evidence to successful matching flows and VSIXs
- add customer/settings/migration fixtures, a pinned upstream settings
  inventory, and native QA execution and evidence documentation

Build, benchmark, and evidence maintenance:
- remove regexp-match-indices, its regexp-tree dependency, and treeify
  from package metadata and the lockfile
- simplify webpack to the JavaScript build and remove unused TypeScript
  loader rules and registry patterns
- track retired regex consumers separately from missing coverage and
  fail the equivalence CLI on hardcoded regexes, uncovered sources,
  or behavior differences
- isolate historical bundles and regex-index dependencies in VM
  contexts; resolve upstream dependencies from their installation
  and preserve host-native RegExp behavior
- use the selected baseline identity and separate current/baseline
  settings fixtures in performance scenarios; model editor tab groups
- isolate smoke-run editor data and remove ELECTRON_RUN_AS_NODE from
  editor launches
- align manifest, language-matrix, parity, regex, packaging, and
  workflow tests with the generated settings and asset contracts
- remove obsolete Codicon build exclusions and trailing ignore
  whitespace

Documentation and localization:
- document settings precedence, source-preserving import, retained
  historical settings, current command IDs, and export-scheme changes
- correct subtag inheritance, customHighlight naming, gutter support,
  prototype-tag configuration, highlight wording, and regex argument
  documentation
- rename the import command in English and Simplified Chinese and
  remove unused duplicate namespace and deprecation strings
Upstream parity:
- add and export ensureUpstreamDependencies for source loading and
  compiled-bundle preparation, including cached bundle reuse
- install locked dependencies in the pinned upstream checkout once per
  loader instance, recording readiness only after installation succeeds
- replace the build-only node_modules existence check with shared
  initialization that propagates failures and permits subsequent retries
- condense loader documentation and clarify the OpenSSL requirement

PR VSIX cleanup:
- name the staging upload step and expose its artifact ID as a
  test-build job output
- require a nonempty artifact ID for cleanup while retaining always()
  across publish outcomes

Regression coverage:
- add bootstrap tests for installation ordering, dependency reuse,
  cached bundles, nonzero exits, spawn errors, and successful retries
- assert the staging upload output binding and exercise cleanup with
  and without an artifact ID across successful, failed, cancelled,
  and skipped publish results
The workflow now resolves publish targets from the immutable checkout and writes
`targets` output only after target-list verification.

Workflow:
- move platform target resolution after immutable workflow checkout
- parse and verify `scripts/release/targets.json` through
  `verifyTargetMap` before emitting `targets=`
- keep immutable targets when trusted manifest data is missing, malformed, or
  drifted

Tests:
- add `runPlatformTargetResolution` workflow-step harness with staged manifests and
  isolated output targets
- add coverage for manifest drift, malformed trusted content, missing build manifest,
  invalid target lists, and output-write failures
- assert workflow step ordering and resolved `targets` propagation into platform build
  inputs

This branch has not been deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Unwanted Tag Style Changes

1 participant