diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index b4eeab7..984a508 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -13,6 +13,7 @@ jobs: build-test: name: Build and test runs-on: windows-latest + timeout-minutes: 25 steps: - name: Checkout @@ -30,7 +31,16 @@ jobs: run: dotnet build AppLensDesktop.sln --configuration Release --no-restore - name: Test - run: dotnet test AppLensDesktop.sln --configuration Release --no-restore + run: dotnet test AppLensDesktop.sln --configuration Release --no-build --no-restore --logger trx --results-directory artifacts/test-results + + - name: Retain Windows test evidence + if: always() + uses: actions/upload-artifact@v4 + with: + name: windows-test-results-${{ github.sha }} + path: artifacts/test-results/*.trx + if-no-files-found: warn + retention-days: 14 - name: Test Windows initial snapshot shell: powershell @@ -40,3 +50,30 @@ jobs: shell: powershell run: .\tests\Script.Tests\Test-StoreConfiguration.ps1 + - name: Build unsigned Store candidate + shell: pwsh + run: | + $candidate = Join-Path $env:GITHUB_WORKSPACE 'artifacts/release-candidate' + dotnet publish src/AppLens.Desktop/AppLens.Desktop.csproj -c Release -p:Platform=x64 -p:GenerateAppxPackageOnBuild=true -p:AppxPackageSigningEnabled=false "-p:AppxPackageDir=$candidate/msix/" "-p:AppxPackageTestDir=$candidate/install/" + if ($LASTEXITCODE -ne 0) { throw 'Unsigned candidate build failed.' } + $bundles = @(Get-ChildItem "$candidate/install" -Recurse -Filter '*.msixbundle') + if ($bundles.Count -ne 1) { throw 'Expected exactly one unsigned candidate bundle.' } + [ordered]@{ + commit = '${{ github.sha }}' + run = '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}' + status = 'Unsigned candidate; installation, sharing and certification are not verified' + file = $bundles[0].Name + bytes = $bundles[0].Length + sha256 = (Get-FileHash $bundles[0].FullName -Algorithm SHA256).Hash + } | ConvertTo-Json | Set-Content "$candidate/candidate.json" -Encoding utf8 + + - name: Retain unsigned candidate for acceptance + uses: actions/upload-artifact@v4 + with: + name: installed-unsigned-candidate-${{ github.sha }} + path: | + artifacts/release-candidate/install/**/*.msixbundle + artifacts/release-candidate/candidate.json + if-no-files-found: error + retention-days: 14 + diff --git a/.gitignore b/.gitignore index ab58c1a..04e500c 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,6 @@ desktop.ini /AppLens-*.md /AppLens-*.json /AppLens-*.html +/Installed-*.md +/Installed-*.json +/Installed-*.html diff --git a/AGENTS.md b/AGENTS.md index 4e55599..e23a752 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,8 +1,10 @@ # AppLens Agent Instructions -Installed (formerly AppLens) v1 is a lightweight Windows client for guided screen-share sessions: -scan -> review/filter apps and storage -> approve supported uninstalls -> verify -results -> save a local report. Keep communication concise and plain-English. +Installed (formerly AppLens) v1 is a lightweight Windows client for workflow-consultation intake: +open -> read-only scan -> review PC specifications and installed tools -> share a +report with the consultant. Optional client goals, services and constraints are +statements, not scanned facts. Existing confirmed uninstall/history features remain +secondary. Keep communication concise and plain-English. The Store product is Installed (9PBPFLL6JVVV). Keep AppLens repository, namespaces, legacy storage paths and DPAPI purpose identifiers stable; renaming those can @@ -20,9 +22,11 @@ break history compatibility. AppLens-Tune remains a separate deferred component. - Scans are read-only. System changes require explicit confirmation, supported mechanisms and recorded outcomes. Preserve Windows approval/policy controls; do not add automatic remediation, forced deletion or automatic restarts. -- Keep the approved local-only privacy design: no accounts, telemetry or uploads; +- Keep the approved local-only privacy design: no accounts, telemetry or automatic uploads; Windows current-user protection for new history without plaintext duplicates; - readable reports redacted by default. Preserve legacy evidence unchanged. + readable reports redacted by default. User-reviewed reports may be handed to + Windows sharing; the user chooses the app and recipient. Never claim delivery + from opening the share UI. Preserve legacy evidence unchanged. ## Working rules diff --git a/PRIVACY.md b/PRIVACY.md index 064bb0f..b2322d4 100644 --- a/PRIVACY.md +++ b/PRIVACY.md @@ -1,11 +1,32 @@ -# AppLens-desktop Privacy Notice +# Installed desktop privacy notice -AppLens-desktop is local-first and operator-controlled. Scanner and default diagnostic scans collect local workstation inventory and readiness evidence without changing the machine. +Installed (the AppLens Windows client) collects PC specifications and installed +application information locally. A read-only scan starts when you open the app; +you can cancel it or start another scan. The scan does not change system settings. -Tune actions can change system state only after explicit user approval, through narrow executor paths, and with blackboard records for the proposal, approval, execution result, and follow-up verification. The app does not upload data, create accounts, or run background monitoring. Reports are exported only when the user chooses to export them. +Collected information includes Windows version, manufacturer/model, processor and +graphics names, memory and disk readings, installed app names/versions/publishers, +installation identities and locations, computer name and Windows username. +Optional workflow goals, services and constraints are text you supply. Do not +include passwords or access keys. The client does not collect credentials or run +the deferred AppLens-Tune diagnostics. It has no accounts, telemetry, automatic +uploads or background monitoring. -Scans may include installed app names, app versions, computer name, Windows username, OS details, top processes, startup entries, selected service states, storage hotspot paths/sizes, repo placement paths, and local tool summaries for WSL, Docker, and Ollama when available. +Reports include the complete captured inventory, optional notes and recorded +actions even when display filters hide rows. Known computer/user identifiers and +the current user's profile path are redacted by default; you may explicitly +include them. App names and notes can still contain sensitive information. -Default exports redact user, computer, and profile path details. Users may explicitly choose to include raw local details when exporting. +Download report writes a readable file only to a destination you select. Send +report first shows a review, then hands that report to Windows sharing. You choose +the sharing app and recipient; their handling of the report is subject to their +own practices. Installed does not choose a recipient or verify email delivery. +The app supplies a streamed attachment without writing an additional export file; +Windows and the selected sharing app may cache or retain the shared content. -For production Microsoft Store submission, replace this file with a hosted privacy policy URL owned by CSI. +Supported uninstall actions require separate confirmation. New action history is +protected for the current Windows user; older development history is preserved. +Exported/shared reports are readable and are not protected by that history +encryption. See the [full privacy draft](docs/AppLens-Privacy-Draft.md) for history +and retention limitations. The release requires a verified hosted policy and +contact details; this repository notice is not evidence of Store publication. diff --git a/README.md b/README.md index 262c38a..ea28900 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@
- CSI's local control board for managing workstation apps, agents, evidence, and approvals. + Understand a client's PC and installed tools before designing their workflow.
@@ -16,11 +16,14 @@
## Overview
-AppLens is CSI's mobile-OS-inspired local control board. It gives a workstation one place to see apps, agents, evidence, proposed actions, and operator approvals.
+AppLens is CSI's local technical intake tool for workflow consultations. A client
+opens the Windows app, reviews their PC specifications and installed tools, then
+shares the report with their consultant. The Store product name is **Installed**.
-The first Store release is now centered on a quick client-session workflow:
-install AppLens, scan, review a sortable app table, approve supported uninstalls,
-and verify the result. Its approved launch target is **Windows 11 x64**; Windows 10
+The first Store release centers on **open → scan → review → send a workflow intake
+report**. Optional client goals, services and constraints complement the scan.
+Existing confirmed uninstalls and verification remain available. Its approved
+launch target is **Windows 11 x64**; Windows 10
and native ARM64 support are deferred. The scripts/platform work below has a
broader scope than this Store client. See [Product Vision](docs/AppLens-Product-Vision.md) for the
current product direction and proposed client design. The broader platform below
@@ -46,15 +49,19 @@ AppLens is local-first and operator-controlled:
- read-only scans by default
- approval-gated actions
- no automatic remediation without an explicit grant
-- no telemetry, accounts, or cloud upload
+- no telemetry, accounts, or automatic upload
- user-controlled report export
+- reviewed report sharing through the user's chosen Windows sharing app
- default report redaction for user, machine, and profile-path details
## AppLens-desktop
AppLens is the WinUI 3 inventory client. It provides storage and device readings,
a searchable/sortable app table, confirmed Windows/vendor uninstall routes,
-verification, local action history, and full JSON/Markdown/HTML downloads.
+verification, local action history, and full JSON/Markdown/HTML downloads. It
+starts a read-only scan on opening and puts workflow intake facts first. Send
+report reviews a frozen export before opening Windows sharing; it does not verify
+email delivery. Download report is available when a sharing app is unavailable.
See the [uninstall route contract](docs/AppLens-Uninstall-Routes.md) and
[Store readiness](docs/Store-Readiness-Checklist.md) for verification limits.
diff --git a/docs/AppLens-Privacy-Draft.md b/docs/AppLens-Privacy-Draft.md
index f77d860..8b17371 100644
--- a/docs/AppLens-Privacy-Draft.md
+++ b/docs/AppLens-Privacy-Draft.md
@@ -1,9 +1,12 @@
# Installed privacy policy — publication draft
-Installed collects information locally when you start a scan. This includes installed
+Installed starts a read-only local scan when you open the app; you can cancel it
+or start another scan. It collects installed
app names, versions, publishers, installation identities and locations, reported
sizes, removal information, local disk capacity and usage, Windows/device details,
processor and graphics names, memory usage, uptime, computer name and Windows username.
+Optional workflow goals, online services and constraints are statements you enter,
+not facts verified by the scan. Do not include passwords or access keys.
Installed v1 does not collect top-process rankings or run the deferred AppLens-Tune
diagnostics. It does not include accounts, telemetry, automatic uploads, cloud
@@ -17,13 +20,17 @@ completion can leave an unknown outcome; review it in Windows and run a fresh sc
Uninstalling an app can delete that app's data. Installed does not provide an undo
facility for third-party uninstalls.
-Reports are saved only when you choose a local destination. They contain the full
+Downloaded reports are saved only when you choose a local destination. They contain the full
captured inventory and recorded actions, including entries hidden by display
filters. Computer/user identifiers and profile paths are redacted by default.
-You can explicitly include personal identifiers. Redaction is not a guarantee
+Reports also contain your optional notes. You can explicitly include personal identifiers. Redaction is not a guarantee
that a report contains no sensitive information; review it before sharing.
-Installed does not send the report to a consultant or AI service. Any sharing you
-perform afterward is your choice and is subject to the recipient's practices.
+Send report shows a review before handing a frozen report to Windows sharing.
+You choose a sharing app and recipient and complete sending there. Installed
+neither chooses the recipient nor verifies delivery. It supplies the attachment
+as a stream without creating an extra export file; Windows and the selected app
+may cache or retain the content. Sharing is subject to that app's and recipient's
+practices. Download report remains available for manual attachments.
Local history and saved reports remain on your device until removed by you or by
Windows' applicable app-data handling. Exported files are separate from the app.
diff --git a/docs/AppLens-Product-Vision.md b/docs/AppLens-Product-Vision.md
index 76c838a..b3b8dc3 100644
--- a/docs/AppLens-Product-Vision.md
+++ b/docs/AppLens-Product-Vision.md
@@ -1,7 +1,24 @@
-# AppLens v1: executable task list
+# AppLens v1: workflow consultation intake
-Build a lightweight Microsoft Store app for a guided screen-share session:
-**scan -> review apps and storage -> approve removals -> download results for AI review.**
+Build a lightweight Microsoft Store app that answers a consultant's request for
+the client's PC setup: **open -> scan -> review -> send a workflow intake report.**
+
+The consultant uses the report to architect workflows around the client's hardware,
+operating system, installed applications and runtimes. It supplies observations,
+not an automatic compatibility verdict. Optional goals, online services and
+constraints are labeled client statements. Missing readings and coverage stay
+visible; installed software does not prove licensing, sign-in or working access.
+
+The Windows client begins a read-only scan on opening. Review report shows a
+plain-language summary with the complete export available to inspect; Send report
+opens review before handing the frozen file to Windows
+sharing. The client chooses a sharing app and recipient. Download report remains
+available for email attachments and AI review in Markdown, JSON and HTML. No email
+credentials, fixed recipient or automatic delivery are introduced. Existing
+confirmed removal and history features remain available as secondary workflows.
+
+Multi-device collection over SSH and remote execution remain future scope. This
+change does not add Linux collector parity or publish a Store package.
## AppLens v1 implementation boundary
@@ -14,7 +31,8 @@ Build a lightweight Microsoft Store app for a guided screen-share session:
- Use a silver, restrained metallic client with crisp edges, matte-black type,
one main app table, and secondary device details/action history.
- Keep scans read-only and local. No accounts, telemetry, automatic uploads,
- automatic remediation, forced deletion, or automatic restarts.
+ automatic remediation, forced deletion, or automatic restarts. Explicit,
+ user-reviewed Windows sharing is a handoff to the user's selected app.
- Preserve existing AppLens-Tune in `future/AppLens-Tune/`; core v1 must have no
runtime or build dependency on it. Keep shared infrastructure in the backend.
Defer startup/service optimization, top-process rankings, deeper diagnostics,
diff --git a/docs/AppLens-Release-Validation.md b/docs/AppLens-Release-Validation.md
index 87a9adf..3cd8006 100644
--- a/docs/AppLens-Release-Validation.md
+++ b/docs/AppLens-Release-Validation.md
@@ -1,5 +1,52 @@
# AppLens release validation — COP-241
+## Intake maintenance checks — 2026-11-06
+
+All 25 focused local redaction/intake/scan tests pass after correcting short-name
+redaction and marker collisions. Eight new regression cases cover the correction.
+Git ignore checks cover both Installed export naming conventions and legacy
+AppLens reports while retaining source/docs. First-scan cancellation copy and
+the active submission plan were corrected. See the current
+[handoff](AppLens-v1-Handoff.md#intake-maintenance--2026-11-06); earlier Windows CI
+and package evidence below belongs to the prior revision. The updated revision
+requires fresh Windows CI; installed Windows 11 acceptance and WACK remain open.
+
+## Native Windows CI and package inspection — 2026-11-06
+
+[PR #14](https://github.com/CSI-Platform/AppLens/pull/14) remains a draft.
+[Windows CI](https://github.com/CSI-Platform/AppLens/actions/runs/42317507257)
+passed the native build, all 149 tests, script snapshot checks, Store configuration
+and unsigned candidate packaging. Downloaded artifact/bundle checksums matched;
+actual payload inspection confirmed official identity, x64 only, Windows 11
+minimum, bundled .NET/ProtectedData, compiled resources, runFullTrust only and no
+Tune or workstation evidence. Debug symbols were omitted with a tooling warning.
+
+Candidate and full inspection details are in the current
+[handoff](AppLens-v1-Handoff.md#windows-ci-candidate-verified--2026-11-06) and local
+`artifacts/release-intake-42317507257/`. This closes the Linux-host build/test gap;
+it does not establish installed client behavior. Windows 11 install/launch,
+sharing receipt/cancellation/fallback, clean-PC lifecycle/accessibility/privacy
+and WACK remain release blockers. No merge or Store publication occurred.
+
+## Workflow intake release gate — 2026-11-06
+
+The new intake flow has 60 passing local checks (43 selected backend, 17 desktop
+presentation) and a successful C# source/API compilation check. Three existing
+tests and native XAML compilation require Windows. These local results do not
+establish installed launch, sharing or Store acceptance.
+
+Release configuration evaluation confirms Windows 11 x64 only, bundled .NET,
+Store-managed Windows App SDK, unsigned MSIX and the existing official identity.
+The current NuGet audit found no known vulnerable direct/transitive packages in
+the four core projects. Privacy, support and Store listing drafts now describe
+automatic read-only startup scanning, optional client notes and reviewed sharing.
+
+The source branch is prepared in GitHub. After an initial automatic approval
+review rejection, the owner explicitly authorized the draft PR and Windows CI,
+including test-result and unsigned-candidate artifact uploads. See the current
+[handoff](AppLens-v1-Handoff.md) for commit and branch details. Final Windows
+acceptance, candidate inspection, clean-PC lifecycle and WACK remain release gates.
+
## Installed name and Store identity — 2026-09-23
The owner reserved Installed and approved applying the name and official identity.
diff --git a/docs/AppLens-Store-Submission-Plan.md b/docs/AppLens-Store-Submission-Plan.md
index f09f627..c5b3ad7 100644
--- a/docs/AppLens-Store-Submission-Plan.md
+++ b/docs/AppLens-Store-Submission-Plan.md
@@ -1,5 +1,15 @@
# AppLens Store submission preparation
+## Current intake candidate — 2026-11-06
+
+[Draft PR #14](https://github.com/CSI-Platform/AppLens/pull/14) implements the client
+flow: open -> read-only scan -> review specifications, tools and optional notes ->
+choose a Windows sharing app, or download the report to attach manually. Consult
+the [handoff](AppLens-v1-Handoff.md) for the exact tested revision and candidate.
+The official identity below is applied. Windows CI and package inspection passed;
+installed Windows 11 acceptance and WACK remain open. The prior preparation and
+test records below are historical evidence, not acceptance of the intake flow.
+
## Installed name and Store identity — 2026-09-23
The owner reserved Installed and approved applying the name and official identity.
@@ -40,7 +50,8 @@ Updated 2026-09-18 for COP-241. This is a local review packet, not a submitted
Store draft. The [release validation](AppLens-Release-Validation.md) retains the
completed tests. The owner approved Windows 11 x64 first and then delegated
privacy and local release-preparation decisions. The local candidate now builds;
-final Partner Center identity is still needed. Submission/publication remain held.
+the official Partner Center identity was applied on September 23 as recorded above.
+Submission/publication remain held.
## Confirmed distribution and customer experience
@@ -76,13 +87,13 @@ merge, Store submission and publication remain in force.
| --- | --- |
| Launch platforms — decided | Windows 11 x64 first, approved 2026-09-16. Desktop project, manifest, bundle settings, configuration check and listing now require build 22000+ and x64. Windows 10/native ARM64 runtime checks are deferred; their old cross-builds remain historical evidence. |
| Distribution — decided | Microsoft Store, reaffirmed 2026-09-18, with the website as an installation entry point. Complete the simple install/desktop-icon/update experience. No separate direct-download distribution channel is planned. |
-| Partner Center identity | From AppLens → Product management → Product identity: Package/Identity/Name, Package/Identity/Publisher, Package/Properties/PublisherDisplayName, plus reserved display name and Store ID. These are identifiers, not account credentials. Current CSI.AppLensDesktop / CN=CSI / CSI are placeholders. |
+| Partner Center identity — applied | Installed / 9PBPFLL6JVVV and the official package/publisher values above are applied and verified in the November 6 candidate. Preserve them and verify the exact final package before submission. |
| Publisher account | Confirm the publishing entity and account verification. For the CSI business release, review the company-account requirement in policy 10.14; do not invent legal details or assume the account is verified. |
| Version and commercial settings | Approve initial version (source is 0.1.0.0), free/paid price, markets and release timing. Utilities & tools is the proposed category; en-US is the current package language. Complete the actual IARC questionnaire; do not invent an age rating. |
-| Privacy design — decided | Current-user Windows protection for new history; no plaintext index; readable, redacted-by-default exports; no accounts, telemetry or uploads. Preserve earlier development evidence. Implemented under the owner's 2026-09-16 delegation; see verification below. |
+| Privacy design — decided | Current-user Windows protection for new history; no plaintext index; readable, redacted-by-default exports; no accounts, telemetry or automatic uploads. User-reviewed reports may be handed to the user's chosen Windows sharing app. Preserve earlier development evidence. |
| Privacy and support facts | Supply verified public publisher/contact details and approved hosting destinations for the [privacy](AppLens-Privacy-Draft.md) and [support](AppLens-Support-Draft.md) drafts. Set the effective date when publication is authorized. Final-profile recovery and retention tests remain. |
| Artwork and screenshots | Review the original [AppLens artwork](../src/AppLens.Desktop/Assets/AppLens-Artwork.md), and capture the views below on a test machine with no private data. No existing internal screenshot is approved for publication. |
-| Local package preparation — authorized | The privacy/auth delegation covers local candidate builds; no renewed build approval is needed. The inspected unsigned package still uses a placeholder identity. Supply final identity and agree the test PC's signing/trust setup before installation. The development probe installer is not a final-package installer. |
+| Local package preparation — authorized | Candidate builds and PR/CI artifact uploads are authorized. The inspected unsigned package uses the official Installed identity. Agree the test PC's signing/trust setup before installation; the development probe installer is not a final-package installer. |
| External actions | Hosting, Partner Center changes/uploads, certification submission and publication each remain outside this preparation. If later authorized to submit but not publish, use the manual publishing hold described below. |
Microsoft documents the three manifest identity values in
@@ -95,8 +106,8 @@ requirements. See [package requirements](https://learn.microsoft.com/windows/app
Use [Store-Listing-Draft.md](Store-Listing-Draft.md) for the description, features,
limitations, runFullTrust explanation and reviewer steps. No account or server is
-needed to use AppLens. Reports may be shared by the user; the app does not perform
-AI analysis, transmit a report or generate AI content.
+needed to use AppLens. Reports may be handed to Windows sharing after review;
+Installed does not verify delivery, perform AI analysis or generate AI content.
Proposed search phrases: app inventory; installed apps; disk usage; uninstall;
local report. Review them with the final listing. Do not advertise universal scan
@@ -149,7 +160,7 @@ Native desktop control is not exposed by this Codex session's computer-use tool.
The owner must operate the Windows/Narrator steps, or resume them in a session
with native control. Secure-desktop approvals always require the owner.
-1. **Freeze the candidate.** Once final identity is supplied, use the already
+1. **Freeze the candidate.** Preserve the official identity and use the already
authorized `tools/Build-StoreCandidate.ps1`. Record Git commit, package
version, architectures, SHA-256, dependency manifests and build logs in a new
`artifacts/` directory. Inspect actual bundle contents; project properties alone
@@ -164,8 +175,15 @@ with native control. Secure-desktop approvals always require the owner.
close and reopen normally without a terminal. Verify an update between controlled
test versions with the same identity preserves launch access and readable history.
These local checks do not establish actual Store update delivery.
-3. **Complete the customer flow.** Scan → search/filter → cancel a fixture removal
- → approve the exact owned fixture → independently check its absence → inspect
+3. **Complete the customer flow.** Open → automatic scan → review specifications
+ and installed tools → add optional notes → review the redacted report → choose
+ a controlled sharing target. Verify the received attachment matches the reviewed
+ content in Markdown, HTML and JSON, including rows hidden by a table filter.
+ Check first-scan cancellation, rescan, share cancellation, repeated sharing and
+ Download report when no suitable sharing target is available. Opening Windows
+ sharing alone does not establish receipt. Then verify the secondary removal flow:
+ search/filter → cancel a fixture removal → approve the exact owned fixture →
+ independently check its absence → inspect
refreshed table/history → save and read a redacted JSON report with matching
full inventory/actions → close/reopen and check history. Download Markdown and
HTML once for final-package readability. Confirm only protected records are
diff --git a/docs/AppLens-Support-Draft.md b/docs/AppLens-Support-Draft.md
index 6b3319a..40f194e 100644
--- a/docs/AppLens-Support-Draft.md
+++ b/docs/AppLens-Support-Draft.md
@@ -1,17 +1,23 @@
# Installed support — publication draft
-Installed v1 is a local Windows app for inventory, storage review, supported removal
-actions and report download. It is not a background optimizer.
+Installed v1 is a local Windows app that prepares PC specifications and installed
+tools for a workflow consultation. Supported removal and history features are
+also available. It is not a background optimizer.
## Using Installed
-1. Select Scan this PC.
-2. Review storage and the app table. Search or filter the rows as needed.
-3. Review the exact app and scope before confirming an uninstall. Complete any
- Windows or vendor approval dialog.
-4. Check action history and refresh results. A Settings handoff or process exit
- alone is not proof of removal.
-5. Select Download report and choose Markdown, JSON or HTML. The complete capture
- is included even when table filters are active.
+1. Open Installed. A read-only scan starts automatically; Scan this PC refreshes it.
+2. Review your PC summary and installed tools. Optionally add your workflow goal,
+ online services and constraints in the panel below the app table.
+3. Select Review report. Inspect the summary and expand Complete report if needed.
+4. Select Send report, review it, then choose a sharing app and recipient in
+ Windows. Finish sending in that app; Installed cannot confirm email delivery.
+5. If your email app is unavailable in Windows sharing, select Download report
+ and attach the file manually. Markdown, JSON and HTML all contain the complete
+ capture even when table filters hide rows.
+
+For an uninstall, review the exact app and scope before confirming. Complete any
+Windows or vendor approval, then inspect action history and refreshed results.
+A Settings handoff or process exit alone is not proof of removal.
Unknown size means the installer did not report a usable value. It does not mean
zero space. Observed disk changes can include other activity.
diff --git a/docs/AppLens-v1-Handoff.md b/docs/AppLens-v1-Handoff.md
index e7009f4..fc2b4bd 100644
--- a/docs/AppLens-v1-Handoff.md
+++ b/docs/AppLens-v1-Handoff.md
@@ -1,4 +1,144 @@
-# AppLens v1 handoff to COP-241 — updated 2026-09-18
+# AppLens v1 handoff to COP-241 — updated 2026-11-06
+
+## Intake maintenance — 2026-11-06
+
+Fixed confirmed report corruption when short computer/user names matched letters
+inside specifications and app names. Names now match complete identifier tokens;
+profile paths remain redacted, and replacement markers are inserted in one pass
+so a later replacement cannot corrupt them. Added eight regression cases covering
+short and Unicode names, paths/domains, marker collisions and all three exports.
+The five direct cases reproduced four failures before the fix; all 25 focused
+redaction/intake/scan checks now pass locally. Existing raw opt-in remains tested.
+
+Root-level Installed report exports are now ignored alongside legacy AppLens
+exports. First-scan cancellation no longer claims to retain a completed scan.
+The submission plan now reflects the applied identity and reviewed sharing flow.
+No package identity, report schema, history format or dependencies changed.
+
+These fixes follow the verified candidate below and require Windows CI on the
+updated PR before using a replacement candidate. Prior artifacts are retained.
+The Windows shared-standards paths in AGENTS.md remain inaccessible from this
+Linux workspace. Hands-on Windows 11 acceptance and WACK are still outstanding.
+
+## Windows CI candidate verified — 2026-11-06
+
+Status: ready for hands-on Windows acceptance; customer release remains blocked.
+[Draft PR #14](https://github.com/CSI-Platform/AppLens/pull/14) is open and unmerged.
+The owner explicitly authorized the PR and CI artifact uploads; no Microsoft
+Store publication was authorized by that confirmation or performed.
+
+[Windows CI run 42317507257](https://github.com/CSI-Platform/AppLens/actions/runs/42317507257)
+passed against PR head `2241eba06fe4c0f8d32f070ad167e9db5395eb4c`, using merge
+snapshot `01d6b825de10802fcf41e69ce2c2bc6950722c6f`. GitHub comparison confirms
+identical files between those two snapshots. The runner was Windows Server 2025,
+build 26100; this is build/test evidence, not Windows 11 client acceptance.
+
+- Native Release build: zero warnings/errors; all 149 tests passed (130 backend,
+ 19 presentation), including the three checks blocked on Linux.
+- Windows script snapshot checks and Store configuration evaluation passed.
+- Packaging produced `AppLens.Desktop_0.1.0.0_x64.msixbundle`, 48,812,752 bytes.
+ SHA-256: `B4DFA245FBF684C2718F6D74A57812102142D282DE27B6E6B1FD17908A440AF8`.
+ A packaging warning notes that debug symbols were not generated because
+ `mspdbcmf.exe` was unavailable; the app bundle was produced successfully.
+- Downloaded artifact ZIP digests and the inner bundle digest match the CI record.
+ Actual manifest inspection confirms one x64 application, official Installed
+ name/publisher identity, version 0.1.0.0, Windows minimum 10.0.22000.0 and only
+ runFullTrust. It depends on Microsoft.WindowsAppRuntime.1.8, minimum
+ 8000.836.2153.0. The executable, .NET runtime, ProtectedData assembly and compiled
+ resources are present. No Tune assembly, test evidence, database/history files
+ or exported workstation reports are packaged. Bundle and inner package are unsigned.
+
+Local retained evidence and bundle:
+`artifacts/release-intake-42317507257/` (`inspection.json`, `candidate.json`, actual
+packaged manifest, TRX files and both original ZIP artifacts). CI artifacts are
+[unsigned candidate](https://github.com/CSI-Platform/AppLens/actions/runs/42317507257/artifacts/13551298098)
+and [test evidence](https://github.com/CSI-Platform/AppLens/actions/runs/42317507257/artifacts/13551033208);
+they expire on 2026-11-21. The unsigned bundle is a Store candidate, not a normal
+end-user installer.
+
+Still required: launch/cancel/rescan and report review on Windows 11; controlled
+share-target receipt, cancellation/repeated sharing and missing-target fallback;
+clean-PC install/shortcut/update and accessibility/privacy retention checks; WACK
+on the exact final candidate. The source has not been merged or Store-published.
+These results apply to the exact revision above; the maintenance section records
+later changes. The previous candidate and its inspection evidence are preserved.
+
+## Intake release preparation — 2026-11-06
+
+Status: draft PR and Windows CI authorized; customer release awaits acceptance.
+All 155 pre-change source
+files were compared by Git blob hash with current GitHub `main` at
+`02e6e534c8c6e45c712d0cd0731039f13335b3e8`; every file matched. The GitHub connector
+created commit `195edb6a29e2daa2486aec314f82bb21f2aef104` on
+[`codex/workflow-intake-20261106`](https://github.com/CSI-Platform/AppLens/tree/codex/workflow-intake-20261106).
+It contains the intake implementation, corrected privacy/support/listing copy and
+Windows CI steps that retain TRX results and an unsigned candidate with a SHA-256.
+No experiment data or local machine reports were included.
+
+Automatic approval review initially rejected creation of the draft pull request.
+The owner then explicitly approved opening the draft PR and running Windows CI,
+including publishing source changes and retaining test results and an unsigned
+candidate in the public repository. This approval does not merge the PR or
+publish to the Microsoft Store. The prepared PR targets `main`.
+
+Additional local checks passed: workflow YAML and manifest XML parse; evaluated
+Release Store properties require Windows 11 x64, bundle .NET, use Store-managed
+Windows App SDK and produce unsigned MSIX. Official identity and runFullTrust-only
+capabilities are unchanged. The current NuGet vulnerability audit reported no
+vulnerable packages across all four core projects, including transitive packages.
+Prior 60 passing checks remain applicable; no product behavior changed during
+this release-preparation pass. Native Windows build, full tests, actual share
+receipt, clean-PC acceptance and WACK remain unverified.
+
+Local evidence: `/tmp/applens-intake-tests/release-dependency-audit.json` and the
+retained test records below. Windows CI and artifact results must be recorded
+before treating the candidate as ready for hands-on acceptance.
+
+## Workflow intake implementation — 2026-11-06
+
+The owner clarified the primary use: a client sends their PC setup to a consultant
+who uses it to architect workflows. Implementation in the supplied Linux source
+copy at `/home/cody/HULK/projects/applens/AppLens-main` targets the existing Windows
+11 client. Store identity, namespaces, protected history and removal mechanisms
+remain intact. No publication, email delivery or Linux scanner changes occurred.
+
+The client now starts one read-only scan on opening, shows PC specifications and
+installed-tool counts, accepts optional goals/services/constraints, and offers
+Review report and Send report. Review uses a readable summary with the complete
+export available underneath. Sharing freezes the reviewed report, passes a
+streamed file to Windows sharing, and leaves app/recipient selection to the user.
+It never reports verified delivery. Download report remains the email-attachment
+fallback. Markdown, HTML and JSON retain full inventory and coverage, independent
+of table filters. Schema 2.1 adds client context and a derived workflow intake
+summary; client statements are distinct from observations and workload readiness
+is not inferred. JSON redaction now preserves field names; HTML/Markdown redact
+before escaping, and Markdown notes cannot introduce active links or images.
+
+Verification on Linux with a temporary .NET 10 SDK:
+
+- 43 selected backend checks passed, including all 12 new intake checks covering
+ partial/unknown readings, context, redaction, literal notes and frozen reports.
+- 17 desktop presentation checks passed. Two existing presentation checks and one
+ backend metadata check require `shell32.dll`; their attempted runs failed on
+ Linux. The backend failure also reproduces in the untouched source baseline.
+- All desktop C# sources compiled against actual Windows API references in a
+ temporary compile-only harness with XAML field declarations. XAML XML and event
+ handler names were checked. This is not a native WinUI build or launch.
+- The real desktop build stops at `XamlCompiler.exe` on Linux (exec format error).
+ Full Windows regression, rendering, startup and share-target behavior remain
+ unverified. The referenced Windows shared-standards files were unavailable here.
+
+Evidence is under `/tmp/applens-intake-tests`; the untouched 155-file baseline is
+under `/tmp/applens-intake-before`. These are local temporary evidence paths. No
+usable Git metadata was exposed in this source copy, so no commit/push was made.
+
+Before client delivery, run the normal Release build and complete test suite on
+Windows 11. Exercise initial scan, cancellation/rescan, optional notes, partial
+readings, readable/complete review, redacted/raw exports, cancelled and repeated
+sharing, unavailable email targets, and saved attachments. Confirm actual received
+file contents using a disposable local test target. Store and clean-PC acceptance
+remain subject to the release requirements below; no installable release was
+produced by this Linux session.
## Current release preparation — 2026-11-04
diff --git a/docs/AppLensDesktop-Build.md b/docs/AppLensDesktop-Build.md
index b7ece0e..8ea8d4e 100644
--- a/docs/AppLensDesktop-Build.md
+++ b/docs/AppLensDesktop-Build.md
@@ -1,8 +1,9 @@
# AppLens desktop build
The active WinUI 3 client scans installed apps, disks and basic device information,
-presents a sortable table, supports confirmed removal routes, and saves reports
-locally. It has no build/runtime dependency on future/AppLens-Tune.
+presents a workflow intake summary and sortable table, supports confirmed removal
+routes, and saves or shares reviewed reports. It has no build/runtime dependency
+on future/AppLens-Tune.
## Build and run
The approved first-release target is Windows 11 x64 (minimum build 22000).
@@ -26,9 +27,15 @@ A direct project build without Platform can use a different output directory.
Debug explicitly before using that launcher to review source changes.
## Using the client
-Alt+S starts a scan; Alt+D opens Download report after completion. Tab/Shift+Tab
+Opening the app starts one read-only scan. Alt+S starts a new scan; Alt+D opens
+Download report after completion. Tab/Shift+Tab
move through controls and row actions. Choose Markdown, JSON or HTML before
-downloading. The Windows picker starts in Downloads; choose another folder if
+downloading or sharing. Optional client goals, online services and constraints
+are included as unverified client statements. Review report shows a plain-language
+summary and an expandable complete export. Send report requires review, then opens Windows
+sharing so the user chooses an app and recipient. If no suitable email/share app
+is available, download the report and attach it manually. Opening sharing is not
+proof of delivery. The Windows picker starts in Downloads; choose another folder if
needed. Cancelling keeps the results. Exports include the complete scan even when
filters hide rows, and personal identifiers are redacted by default.
diff --git a/docs/Store-Listing-Draft.md b/docs/Store-Listing-Draft.md
index d827129..4b5840f 100644
--- a/docs/Store-Listing-Draft.md
+++ b/docs/Store-Listing-Draft.md
@@ -9,13 +9,15 @@ Installed. Reserved Store ID: `9PBPFLL6JVVV`; publisher: Copper State Intelligen
The repository, assemblies and legacy storage paths retain the AppLens name.
## Short description
-Review installed apps and disk usage, approve supported uninstalls, and download a local report.
+Share your PC specifications and installed tools to plan a workflow with your consultant.
## Description
-Installed puts your Windows 11 app inventory and storage usage in one simple table.
-Run a local scan, search apps or publishers, and sort by name or reported size.
-See installation scope, removal restrictions, disk capacity and free space, plus
-secondary Windows, processor, graphics and memory details.
+Installed prepares a local snapshot of your Windows 11 PC for a workflow
+consultation. Open the app to collect PC specifications, storage and installed
+tools. Add optional goals, online services or requirements, review the report,
+then choose how to share it with your consultant through Windows sharing.
+Installed software does not prove a license, sign-in or working service access;
+unknown readings and scan coverage remain visible.
Uninstall eligible desktop and current-user Store apps after confirming the exact
installation. Windows or the vendor may request administrator approval. Installed
@@ -24,11 +26,13 @@ App data can be deleted by an uninstall; save your work and review the confirmat
Download the full inventory and action history as Markdown, JSON or HTML for
review or sharing. Personal identifiers and profile paths are redacted by
-default, with an explicit option to include them. Installed saves locally; you
-choose whether and how to send the report.
+default, with an explicit option to include them. You choose the sharing app and
+recipient. If your email app is unavailable, save the report and attach it manually.
## Features
- Local app inventory and disk total/used/free readings.
+- PC specification summary and optional workflow context.
+- Review before sharing, with Markdown, JSON and HTML report downloads.
- Search and size/name/publisher sorting; scope/type/removal filters.
- Explicit supported uninstall actions, Windows approval, and result verification.
- Local action history and downloadable reports.
@@ -55,8 +59,8 @@ availability before submission rather than implying the x64 package blocks it.
- Review final screenshots and artwork before submission.
## Screenshot subjects
-The finished app table, largest-first storage review, exact-target confirmation,
-and download/history controls. Use reviewed screenshots without personal data;
+The PC summary, optional workflow context, reviewed report and sharing controls,
+plus the app table and secondary removal/history flow. Use reviewed screenshots without personal data;
internal development captures are not automatically Store listing assets.
## Certification notes
@@ -67,7 +71,11 @@ Installed itself remains unelevated; Windows handles explicit administrator
handoffs. Explain and demonstrate each supported removal route in certification.
### Reviewer walkthrough (final identity/build to be supplied)
-No login, account or server is required. Launch Installed and select Scan this PC.
+No login, account or server is required. Launch Installed; a read-only scan starts.
+Inspect the PC summary, add disposable sample workflow notes, then review and
+save a redacted report. Send report opens review before Windows sharing. Cancel
+without sending, or use a controlled test target to inspect the received file.
+Opening the sharing chooser is not proof of delivery.
Search by app/publisher, choose Largest first, and inspect an app's scope/details.
Unknown sizes mean unavailable metadata, not zero disk usage.
diff --git a/docs/Store-Readiness-Checklist.md b/docs/Store-Readiness-Checklist.md
index e40140f..401f1f7 100644
--- a/docs/Store-Readiness-Checklist.md
+++ b/docs/Store-Readiness-Checklist.md
@@ -1,7 +1,8 @@
# Microsoft Store readiness
-The active v1 flow is inventory -> storage/app table -> approved removal ->
-verification -> local report. AppLens-Tune is preserved outside the core build.
+The active v1 flow is open -> read-only scan -> review PC/tools and optional
+workflow context -> share or save a report. Supported removal and history remain
+secondary. AppLens-Tune is preserved outside the core build.
The implementation plan is [Product Vision](AppLens-Product-Vision.md); changing
work status is tracked in Linear, not duplicated here.
For completed source checks and a condensed keep/defer list of hands-on work,
@@ -51,6 +52,11 @@ this is a tooling limit, not a renewed owner pause.
- [ ] Complete the installed customer flow on a clean standard-user Windows PC,
including native/package dependencies and offline scan/export.
+- [ ] Verify automatic initial scan and cancellation, optional workflow notes,
+ summary/full-report review, redacted and raw exports, cancelled/repeated
+ Windows sharing, a controlled received-file comparison, and the attachment
+ fallback when the email app is not listed. Check focus, text scaling and
+ small-window layout for the new summary, notes and review controls.
- [ ] Complete and verify desktop-shortcut creation and double-click launch,
reopening without developer tools, and a controlled same-identity update
preserving launch access and readable history.
diff --git a/src/AppLens.Backend/InventorySnapshot.cs b/src/AppLens.Backend/InventorySnapshot.cs
index 32f881e..0368385 100644
--- a/src/AppLens.Backend/InventorySnapshot.cs
+++ b/src/AppLens.Backend/InventorySnapshot.cs
@@ -3,7 +3,7 @@ namespace AppLens.Backend;
/// A snapshot to help your consultant design a workflow around this PC and its installed tools. Reported sizes are estimates, not guaranteed reclaimable space. Disk changes are observations, not attribution.Installed inventory report
+ th{background:#e7e9ec}h2{margin-top:2rem}Installed workflow intake report
+ {Formatting.Html(header)} ");
html.Append("");
foreach (var row in section.Rows)
- html.Append("" + string.Join("", row.Select(c => $" ");
+ html.Append("{Formatting.Html(c)} ")) + "" + string.Join("", row.Select(c => $" ");
html.Append("");
}
html.Append("");
- return Protect(html.ToString(), snapshot, includeRawDetails);
+ return html.ToString();
}
public async Task WriteAllAsync(InventorySnapshot snapshot, string directory, bool includeRawDetails,
@@ -69,10 +76,21 @@ private sealed record Section(string Title, string[] Headers, IEnumerable{Formatting.Html(Protect(c, snapshot, includeRawDetails))} ")) + "