Repository navigation
Releases: woolkingx/containTAB
Releases · woolkingx/containTAB
Release list
containTAB 0.3.0
[0.3.0] - 2026-06-13
This release records the full private-development line from 0.2.2 through
0.3.0, including the intermediate 0.2.3 development builds.
Added
- Handbook architecture atlas for data owners, object methods, runtime flow, proof gates, UI behavior, schemas, bug notes, decisions, and logic flow.
- Schema-owned runtime objects for global config, container extension metadata, default container strategy, assignment decisions, and tab/container state.
GlobalConfigstorage object with one-time migration from legacypref=*settings into theconfigobject.ContainerExtensionstorage object for containTAB-owned container lifetime and UI icon metadata.- Default-container strategy support for by-tab, by-domain, and by-host creation.
- Default-container tests for short domain-prefixed by-tab sequence names.
- Manifest identity tests for the private Firefox extension ID.
- Fingerprint subsystem files and schemas for per-container fingerprint work, kept behind disabled/experimental gates.
- Theme mode setting with
system,light, anddarkchoices. - Dark theme SCSS palette and a three-tier cascade: explicit dark, explicit light, or system
prefers-color-scheme. applyTheme()runtime helper for writingdocument.documentElement.dataset.theme.- Native popup Settings runtime with save rollback and reset side-effect handling.
- Container edit UI for name, containTAB-owned icon, and lifetime.
- Multiline rule pattern inputs for semicolon-delimited host patterns.
- Rule import subpage with explicit paste/import feedback.
- In-popup confirmation for rule and container delete actions.
- Popup help content for hostname-only matching, semicolon OR rules, glob syntax, fragment syntax, and the no-regex rule model.
- Smoke parity gate for popup runtime/smoke DOM shape.
- Runtime UI design gate checks for smoke HTML/CSS/JS, style-guide CSS, runtime SCSS, and
ContainersSection.jsregression contracts. - Extension identity gate verifies the canonical Firefox ID
containtab@woolkingx.localacross source, build, release zip, and bundled Lacuna policy packages. - Lacuna storage identity known-issue documentation and proof-gate notes.
- Work plans for container edit UI, runtime-owner implementation, handbook topology cleanup, popup/lifecycle fixes, theme mode, schema-runtime convergence, UI token structure, settings-native runtime UI, Lacuna identity research, runtime UI projection SOP, and 0.3.0 release prep.
Changed
- Public version moved from
0.2.2/intermediate0.2.3to0.3.0. - Popup runtime moved from ad hoc UI behavior toward handbook/smoke-driven projection.
- Popup UI rebuilt around the smoke-canonical subpage model.
- Rules is now the popup home tab.
- Rule add/edit/import, container create/edit, and Settings flows use dedicated subpages where applicable.
- Container edit is a subpage flow again, not a modal.
- Add rule container field starts empty; typed new container names create the Firefox contextual identity before writing the rule.
- Add rule and edit rule use a combobox-style container field: type a name or choose from dropdown.
- Runtime typography is normalized to a 15px base with larger tokens reserved for explicit titles.
- Settings rows use a fixed control column so select values and action buttons do not drift by content width.
- Default container strategy display uses
bytab. - Default container strategy moved from raw templates to named modes.
- Auto-created default containers use short domain-prefixed sequence names (
github-01,youtube-01) instead of timestamp-like long names. - Rule and container tables now project from data through filter/sort into rendered rows.
- Container list sorts by container name with
No Containerlast. - Rule rows resolve current container names from identity state, so renamed containers are reflected in the rule table.
- Row metrics, nav icon sizing, container/rule icon sizing, switch states, radius tokens, and reduced-motion handling were aligned with the smoke UI.
- Rule transfer stays user-activated through Settings and opens the import subpage rather than hidden backend behavior.
- Rule export CSV now uses portable
host,containerName,enabledrows; import paste uses the same format and resolves names to the current profile's identities. - Theme and container defaults were synced through handbook schema/docs surfaces.
- Private extension identity was pinned to
containtab@woolkingx.local. - Firebox/Lacuna policy and bundled XPI identities were aligned to the canonical private ID.
check-extension-identitynow reads the package version when finding the release zip.- Runtime popup tests expanded around rule flow, container flow, settings flow, help, filters, import, delete confirmations, and smoke parity.
- Build/release docs now describe file-install packages rather than the original add-on update chain.
Fixed
- Default container naming now uses
<domain>-01style sequence numbers instead of long timestamp-like names. - Default container lifetime creation uses the configured lifetime path.
- Settings writes now use await+rollback behavior on failure.
- Reset applies the active theme after preferences are restored.
- Bottom nav icon height is locked so image/SVG icons do not resize the nav.
- Container lifecycle cleanup is gated by owner preference and no longer relies on unsafe name regex cleanup.
- Tab lifecycle no longer cleans rules or container metadata through unsafe broad startup assumptions.
- Host input Enter now passes the correct lifetime toggle path when adding a rule.
- Rule import feedback and user activation were restored after runtime UI changes.
- Rule import remains backward-compatible with old
cookieStoreIdrows while preservingNo Containerround trips without exposing profile-local IDs in new exports. - Rule deletion now uses in-popup confirmation.
- Rule lifetime controls, rule icons, and container icon metadata are aligned with the popup smoke model.
- Popup filters update on every input event, not only Enter.
- Container filter matches container name only; rule filter matches both container and rule pattern.
- Container rename no longer leaves stale names in the rule table.
- Create container and edit container behavior are separated; edit updates existing identity, create creates a new identity.
No Containeris no longer prefilled in add-rule container input.- Settings select values no longer truncate due to content-width sizing.
- Dialog/action button typography was reduced back to the 15px base scale.
- Runtime/source/smoke drift that previously allowed modal/subpage and typography regressions is now blocked by gates.
- Lacuna packaging identity drift is documented as a known issue; source and bundled policy IDs are aligned to the canonical extension ID.
check-extension-identityno longer hardcodes the old package zip version.- Sass deprecation warnings and legacy JS API usage were cleaned up in the build path.
Documentation
- Handbook now treats the smoke prototype as the UI behavior truth surface.
- UI popup docs, style docs, proof gates, schemas, logic flow, bug notes, decisions, and index navigation were updated for the runtime UI projection.
- Schema docs now cover container naming, global preferences, default container strategy, container extension metadata, assignment decisions, fingerprint config, tab state, and runtime architecture.
- Lacuna storage identity is documented as a known issue: same-ID installs should preserve storage, but formal signing / UUID / profile namespace behavior still needs future live-profile proof.
- CHANGELOG and README were refreshed for the 0.3.0 private release and the
0.2.2to0.3.0change line.
Verification
npm run check:ui-designnpm test -- src/ui/__tests__/popup-smoke-parity.test.js src/ui/__tests__/popup-ui.test.jsnpm run lintnpm run buildnpm run check:extension-identityweb-ext-artifacts/containtab-0.3.0.zipreadback: manifest version0.3.0, extension IDcontaintab@woolkingx.local.
Asset
- ZIP SHA256: 8c6a8109ec23a21f54e12de13d32122de6db6039d9103e5e8fd713186e4dcbec
v0.2.2
What's Changed
Build
- Declare
type: modulein package.json (ESM) - Rename webpack configs →
webpack.{common,dev,prod}.cjs - Add
resolve: { fullySpecified: false }to babel-loader rule - Eliminate
MODULE_TYPELESS_PACKAGE_JSONwarning
Tests
- Add
@vitest/coverage-v8reporter - Test count: 232 → 362
v0.2.0
What's New
Fixed
- Empty
cookieStoreIdsilently skipped rule match — now creates container on match - In-memory tab count lost on restart — replaced with live
browser.tabs.query - Popup height collapsed in Firefox — uses
window.screen.height / 3
Changed
- Unified test runner: jest → vitest (232 tests)
- Rule input: container dropdown → text input for container name
- Help: inline toggle → dedicated sub-screen
- Rule list sorted by container name, then host
- Documentation reduced from 11,488 to 1,837 lines (-84%)
Added
- Lifetime toggle button on each rule row (temp/keep)
- Pure functions extracted to core:
isRedirectable(),canNavigateTo(),targetContainer(),hasRules() - ETP Standard mode recommendation in README
Removed
- Dead code:
ExtendedURL/,filterByKey,v2/ - jest, babel-jest, jest-environment-jsdom dependencies
Full Changelog: v0.1.2...v0.2.0
v0.1.2
Fixed
- Build pipeline:
npm run buildnow passes lint + test + webpack + web-ext .gitignore: excludedist/from eslint scan- Core tests: removed
import from 'vitest'(jest uses globals) - HostStorage test: fixed API call to match rewritten
get()signature - Jest config: exclude
.cleanup/from test discovery - Icon scaled to fill canvas (no more oversized padding)
v0.1.1
v0.1.0 — containTAB initial release
Fork of Containerise 3.9.0, full rewrite.
Highlights
- Pure function core (matcher, lock, naming, url) — 54 tests
- Drill-down popup UI (Rules / Containers / Settings)
- One-tab-one-world isolation model
- Dark mode via
prefers-color-scheme - Temporary container lifecycle (
untilLastTab)
See CHANGELOG.md for details.