# Changelog

## Unreleased

## 0.4.4 - 2026-10-28

### Added

- Added the issue #166 transparent assisted cover-letter workflow: an explicit action prepares a bounded visible Pi editor prompt without submission or response capture, and a separate paste/import action uses exact preview plus distinct persistence and workspace-mutation confirmations.
- Added a separately versioned assisted cover-letter reference and immutable artifact path whose authority remains `model_assisted_non_authoritative` through persistence, restart reconstruction, readiness derivation, viewing, and clearing; existing `user_authored` behavior remains separate and unchanged.

## 0.4.3 - 2026-10-27

### Added

- Added synthetic executable Pi 1.0.4 boundary probes and a research report for issue #66. The probes make no provider call or product change and keep production assisted cover-letter drafting blocked because the public host contract cannot prove final-prompt integrity, exclusive isolation, lifecycle correlation, or generic RPC human mediation.

## 0.4.2 - 2026-10-26

### Added

- Added a documentation-only specification, threat model, synthetic black-box acceptance map, and bounded later implementation plan for issue #66 assisted cover-letter drafting. No provider/model integration, response capture, persistence, or production behavior is implemented by this release.

### Changed

- Updated the exact lockfile-pinned Pi development suite from 1.0.2 to 1.0.4; the four Pi-provided runtime packages remain wildcard external peer dependencies.
- Pinned the development-only transitive `undici` resolution to 8.12.3 to remediate the reviewed low-severity advisories and preserve the zero-vulnerability full-audit publication gate. Runtime package dependencies remain unchanged.

## 0.4.1 - 2026-10-04

### Fixed

- Fixed native Pi input, editor, selection, confirmation, and exact workspace-mutation dialogs opened from the Career TUI so they own the foreground instead of rendering underneath the custom Career modal. After the native dialog completes or is cancelled, the same in-memory Career route and selection are restored with refreshed data; local document preview and cancellable Resume rescan remain inside the modal.

### Changed

- Hardened post-publication registry verification for npm propagation and trusted-publisher metadata by retaining a finite 235-second scheduled retry bound and accepting only the reviewed canonical GitHub OIDC UUID in its bare or `oidc:`-prefixed representation. This does not add publication retry behavior.

## 0.4.0 - 2026-10-04

### Added

- Implemented application-workspace Gate 1 behind user-only no-argument TUI/RPC `/career-workspace`: explicit strict config-v1-to-v2 migration, one existing owner-only disjoint application root, marker attach/detach, immutable application manifest and append-only status/workflow-original-vacancy/selected-original revisions, and read-only crash/drift reconciliation.
- Added canonical complete editor previews plus separate confirmation, config/inode compare-and-swap, exact config/root locks, no-clobber hard-link publication, bounded limits, private modes, sync/settlement, idempotency, payload-free failures, and synthetic macOS/Linux filesystem coverage for Gate 1.
- Added the separately authorized application-workspace transaction for user-authored Markdown/plain-text cover letters: an unchanged exact preview, distinct persistence confirmation, and ordinary workspace-mutation approval precede immutable no-clobber artifact/state publication; view and clear preserve validated history, and no assisted drafting, Core/provider/network call, or submission occurs.

### Changed

- Updated the exact lockfile-pinned Pi development suite to 1.0.2, including compatibility coverage for Pi's structured working-directory prompt section and default interactive-mode entry point; the four Pi-provided runtime packages remain wildcard external peers. Pi 1.0.2 removes the vulnerable development shrinkwrap selection of `brace-expansion@5.0.9`, and the strict full audit and publication-readiness check pass with `brace-expansion@5.0.12`.
- Preserved first-run and v1 compatibility: ordinary setup may safely bootstrap only private `career/`, absent/v1 ordinary mutations continue writing canonical v1, only confirmed workspace-root configuration migrates to v2, and every later writer preserves v2 plus its optional application-root binding while freshly rejecting root overlap.
- Documented that Gate 1 performs no Core/runtime/provider/model/network/child/session-append action and does not implement assisted workspace artifacts, deletion, broader application files, repair, adoption, archive, or sync. The separate `/career-save` workflow is unchanged.
- When a persistent application is attached, `/career-vacancy`, `/career-match`, `/career-analyze`, `/career-workbench`, and `career_run context` use workspace files as the only current vacancy/Resume authority: cancelled vacancy saves change neither workspace nor session, match uses the effective Resume, analyze uses only the selected original, and workbench/assistance never auto-submit.
- Attached `/career-application` shows and updates workspace lifecycle only through a previewed file mutation, and `/career-application clear` detaches without a competing session-only status or vacancy.
- TUI `/career` is application-first: Applications and Resumes are the only top-level destinations, while Setup, job description, Analyze, Match, Workspace, and Ask Pi are contextual routes/actions. The existing `/career-*` commands remain direct compatibility routes with breadcrumb-aware Back/Escape behavior; Left/Right or Tab switches destinations, and `a` still attaches only after confirmation without activating assistance. Overlay navigation does not call Core or a provider.
- One Career view model now owns views, items, selection, detail, and attach. TUI overlay and RPC hierarchical select/confirm dialogs are only renderers of that model; those slash commands only choose the starting view, leftover command-specific menus are gone, and opening/browsing never attaches or calls Core.
- Setup and library views can add a resume root after confirmation (`n` in TUI, Add root in RPC). The action writes config only, reloads the shared model, and does not attach, call Core, or create files.
- TUI Career overlay now renders a centered, margin-separated, theme-compatible rounded Unicode modal frame with connected separators, consistent interior padding, explicit breadcrumbs/current state/recommended action/safe alternatives, concise contextual hints, and local help. ANSI/Unicode rows and exact previews are measured against the padded inner width, while a terminal-derived row budget preserves the frame and footer and scrolls only content; long catalogs keep selection visible and detail/help support Up/Down scrolling.
- Overlay/RPC Career UI can create an application, rescan or remove a library root, run analyze/match, edit a vacancy, update status, and open Gate 1 workspace management from the shared view model. Opening and browsing still never attach or call Core; those actions stay confirmation-gated.
- Overlay empty states, session-created applications, analyze/match result rows, Ask Pi, detach, and vacancy clear stay on the shared view model so `/career` can run as an in-Pi application without leftover command menus.
- Attached applications can select and immutably bind one eligible original Resume from Library, Analyze, or Match (`o` in TUI) through the existing exact preview and separate confirmation flow. Attached Analyze/Match no longer fall back to an unbound library Resume, and assisted variants remain ineligible.
- Legacy Applications rows can finish identity-only migration without a matching session or attachment after separately entering exact labels, reviewing exact canonical bytes, and confirming no-clobber publication; list/open, cancellation, drift, and losing concurrent plans remain no-write.

## 0.3.0 - 2026-08-14

### Breaking

- Removed Windows support. Package metadata now permits installation only on macOS/Linux, and direct local/Git extension initialization registers no command/tool and fails with stable payload-free `unsupported_platform` guidance before runtime route work, acquisition, compatibility probing, or private stdin.

### Changed

- Updated the exact external runtime and managed compatibility boundary to `@revazi/career@0.2.0` / Core 0.2.0 after reviewing the six-target package, registry integrity, SLSA provenance, and unchanged v1 operation/schema semantics. Pi-career validates the exact ordered six-package v2 launcher manifest while delegating native selection and integrity algorithms to the launcher.
- Decoupled immutable `7ed36c4…` after-study evidence from later source: frozen bytes/trees/deltas remain exact, while current measurements may improve only with unchanged shape/invariants/budgets and no workflow regression relative to that snapshot.
- Consolidated the model-visible Career Skill while preserving safety invariants and avoiding workflow regressions; the frozen before/after evidence records an aggregate reduction from 25,652 to 21,552 workflow tokens (15.98%).
- Added a Git-history/source-tree/hash-bound before/optimizing/after token-optimization benchmark phase with Pi Skill discovery/full-load context, actual managed serialization parity, direct tool-call/result/detail/editor surfaces, and independent workflows; semantic/privacy gates prevent savings by dropping required context.
- Added user-only TUI/RPC `/career-save` for exact preview and separately confirmed no-clobber saving of current Markdown/text materializations on supported macOS/Linux systems, with private managed-directory markers, strict assisted/non-authoritative v2 sidecars, in-memory idempotency, and immediate exclusion-verifying rescan; PDF saves fail closed.
- Changed assisted-sidecar scanning to quarantine malformed, missing-in-managed-root, duplicate-key, edited, or hash-mismatched artifacts instead of allowing fallback to original analysis/matching eligibility.
- Expanded the frozen synthetic token benchmark across managed match, suggestion/replacement review, materialization, and evidence/change/document detail hydration outputs, all under explicit common-output budgets.
- Added mocked release-automation regressions for checked-in hosted-gate invocation, bounded registry propagation, exact npm publish/SLSA attestation formats, fail-closed responses, and publication-to-release ordering.
- Generalized the trusted-publishing checklist and recorded immutable `v0.2.0` coordinates, incident boundaries, and no-blind-rerun recovery guidance.
- Expanded synthetic PDF compatibility coverage with pinned Chromium 150 tagged/untagged fixtures, an embedded OFL-licensed Lato subset, a CSS multi-column layout, and fail-closed image-only/malformed/oversized inputs without OCR.
- Added a reproducible two-page ReportLab 4.4.10 searchable-PDF fixture with pinned generator-wheel provenance, exact extracted text, compressed content, and an embedded Lato subset.
- Added turn-terminating non-PDF variant review and a bounded TUI `/career-review` flow that requires warning/discard acknowledgment, exact per-change inspection, explicit inclusion, and a later handle/ID-only editor handoff; PDF handles fail closed before selection or materialization.
- Added a final paged cross-change review and separate prepare choice before `/career-review` can place selected canonical IDs in the editor, with a back path that preserves the in-memory selection for revision.
- Replaced the final selected-change JSON object with compact labeled records that keep exact IDs, sections, line bounds, before/after text, and both evidence sets visible.
- Added constant-state final-review navigation that can reopen any selected exact record directly before the separate prepare-or-back decision.

## 0.2.0 - 2026-08-10

### Added

- Primary compact `career_run` tool with internal Career Core operation/schema discovery, ephemeral resume/result/review/variant handles, complete bounded in-memory results, compact analysis/match/review/materialization projections, and section/item detail hydration without nested `input_json`.
- `/career-tools` keeps the three raw Career Core compatibility tools available for explicit advanced use while removing them from normal active model context.
- Frozen synthetic `o200k_base` context benchmark: the active `career_run` contract is 302 tokens against the recorded 1,041-token prior raw-tool surface, with common synthetic managed results below 250 tokens.
- Local searchable-PDF résumé ingestion through a bounded, network-disabled worker, with explicit library notices for encrypted, image-only, malformed, oversized, or otherwise unextractable PDFs.
- `/career-workbench` prepares a bounded, visibly reviewable ordinary Pi editor prompt for complete score explanation, reviewed improvement suggestions, a question-led factual interview before reviewed replacements, direct reviewed exact replacements, or vacancy-specific variant review while keeping originals immutable. The command makes no provider/model call; only the user's later ordinary Pi submission invokes the selected provider. Non-PDF materialization requires explicit canonical change-ID selection in a later turn; PDFs stop at manual targeted changes.
- `/career-application` adds branch-aware company/role/status identity, scopes vacancies and result cards by immutable application ID, and names otherwise unnamed Pi sessions without creating workspace files.
- `/career-analyze` and `/career-match` expose complete successful Core results plus focused sections through a transient read-only pager, without storing or exporting full result JSON.
- `/career-setup` records or derives a suggestion-only preferred resume-variation directory. Workbench prompts recommend that privacy-reduced destination first after a separate user request, while creating no directory or file and granting no automatic write authority.

### Changed

- Replaced package-owned native artifacts with a local-first external resolver: bounded absolute `CAREER_CLI_PATH`, PATH `career`, package-local `@revazi/career`, then bounded acquisition of exact `@revazi/career@0.1.1` unless `PI_OFFLINE=1`.
- Expanded the reviewed external-runtime acquisition boundary through exact `@revazi/career@0.1.1`, deriving npm and its command shell from validated real installation/system paths, executing no PATH-selected shim, and cancelling the detached npm process group.
- Exact managed Core 0.1.1 operation-catalog/schema-bundle compatibility now completes before private stdin opens. The reviewed Career package launcher owns native target/libc/provenance/mode/size/format/SHA-256 verification; pi-career caches routes only in memory and never retries an already-started operation on another route.
- Removed `runtime/` from source/package artifacts and replaced bundled-runtime/package checks with runtime-resolution, exact Career package, offline failure, and native-free tarball coverage.
- Workbench prompts now use `career_run` handles and native proposal payloads rather than model-visible schema discovery and manually reconstructed Core envelopes.
- Setup and library flows now rescan immediately, display indexed PDFs and actionable scan notices, and explain the searchable PDF/Markdown/text success path instead of silently showing an empty library.
- Reorganized the README around the recommended first-run flow, exact slash-command behavior, release-version boundaries, runtime acquisition, and privacy/persistence expectations.
- Streamlined post-release documentation, added npm/CI/license badges, and recorded immutable `v0.1.0` package coordinates.
- Workbench review prompts now require verbatim preferably single-line source targets, avoid automatic discard-repair retries, reuse unchanged discovery/schema results, and keep prose concise instead of repeating complete review-embedded baselines.

## 0.1.0 - 2026-08-06

### Added

- Standalone Pi package with the stable `career_core_discover`, `career_core_resume`, and `career_core_job` tools.
- Self-contained reviewed unsigned and not-notarized native Career Core runtimes for `darwin-arm64` and `linux-x64-gnu`, pinned to Core commit `a3cdb4c6d7f966397e93ea4664071975bca7228c` with manifest/provenance/hash/size/mode/contract verification and fail-closed target selection.
- Bundled discovery-led `career-core` Agent Skill with no separate CLI prerequisite or stale oversized-result fallback.
- Reproducible checked-in TypeScript bundle, strict runtime/package-content verification, offline no-model and real bundled-operation smokes, isolated Pi install acceptance, and optional bundled-runtime fixture compatibility.
- Native CI execution for every claimed target without a separate Core checkout or provider credentials.
- Deterministic `/career-setup`, `/career-library`, `/career-vacancy`, `/career-match`, and `/career-analyze` workflows with bounded symlink-free text libraries, branch-aware consented session cards, conservative ranking, cancellation ownership, and RPC/TUI support without provider/model calls.
- Public-repository author, ownership, issue-form, private vulnerability-reporting, Dependabot, and pull-request hygiene.
- Synthetic process-boundary coverage adapted from Career Core commit `100774ed8bb3b39c019d64ce105af1e3f209144f`.
- Public `pi-career@0.1.0` npm package, unsigned annotated `v0.1.0` Git tag, and GitHub Release channel with no crate publication or custom release asset; exact version/full-commit installation remains canonical.
- Exact locked normal/build `career-cli` dependency evidence for both native targets, selected third-party MIT/copyright payloads, Rust 1.97.1 Standard Library evidence, target dynamic imports, the required Unicode License V3 text, deterministic package checks, and documented sole-maintainer `v0.1.0` sign-off with no independent legal-review claim.
- Strict production and complete development/host-Pi audit gates, both clean at the explicit low threshold, with bounded duplicate-key-rejecting JSON, trusted-tool enforcement, tool-shadowing tests, and npm environment override sanitization.

### Changed

- Strict package checks enforce exact public npm registry/access metadata, reject optional or bundled runtime dependency declarations, allow only approved documents, verify the extracted native license inventory, prove no Pi package contents or `node_modules`, enforce exactly four wildcard external peers, and run extracted load/runtime/install smokes.
- Pi development packages are updated to `0.84.0` (`typebox` `1.3.7`), retiring the temporary nonzero audit acceptance. `audit:production` and `audit:full` now both gate from low severity and invoke npm from the real Node installation rather than `PATH`; `check:publish` is a direct Node, no-publication readiness orchestrator combining both clean audits with strict package proof. npm tree/severity environment overrides are removed, duplicate decoded JSON keys are rejected, and package extraction uses verified absolute `/usr/bin/tar`.
