# Project Status
## WinGet icon policy correction prepared; rejected PR closed (2026-11-11)
- Selected `M-WINGET-ICON-ROLLBACK-20261111` under explicit correction, PR closure,
push and CI-verification authorization. Removed the generator's icon requirement
and emission and the metadata object; updated the changelog/operator guidance.
Embedded Windows branding, installer fields, versions and release assets remain
unchanged. No UniGetUI database contribution is selected.
- All 12 focused regression tests pass, including no authored `Icons` and legacy
icon input suppression. Generated all three manifests for 3.0.3: each passes
its official 1.12.0 schema and is byte-identical to the pre-icon generator output
at `169f788`. `git diff --check` passes.
- [WinGet PR #477862](https://github.com/microsoft/winget-pkgs/pull/477862) is
confirmed CLOSED with `mergedAt: null`. The connector was denied; the existing
authenticated CLI completed the explicitly authorized closure. Branch retained.
- Rechecked previous CI `43103171839`: attempt 2 has now completed successfully,
resolving the queued Pages retry without source changes. Previous CodeQL/NuGet
passed as recorded below. The current correction still needs its own pushed
revision's CI; previous checks are not reused as that evidence.
- Remote main was refreshed at `6d05b17`; it is an ancestor of local HEAD.
Push will preserve the prior local evidence commit `cfaccd7` and this correction.
## Generator pushed; WinGet publisher-policy blocker confirmed (2026-11-11)
- Pushed implementation `af7bb8e` and its documentation history to project main
at `6d05b17907ad8a603fa01ffeeb7463ce7e10d70f` under explicit authorization.
- Exact-head CI [43103171839](https://github.com/VoltKraft/immich-folder-watch/actions/runs/43103171839)
attempt 1 completed with seven successful jobs: Windows/Linux build/tests,
packaging lint, Flatpak preparation, both native Flatpak builds and the
hidden=true Pages round trip. The hidden=false Pages job uploaded artifact
`13892548202`, then failed because the immediate download did not find that ID.
This suggests transient artifact visibility, not a proven root cause.
- Requested a targeted rerun of job `130799588814` after attempt 1 finished.
Attempt 2 remains queued after repeated checks; no passing rerun is claimed.
The original failure and outstanding runner scheduling prevent an all-green
CI conclusion. No workflow changes or disabled checks were used.
- NuGet submission and all four CodeQL analyses in
[43103172344](https://github.com/VoltKraft/immich-folder-watch/actions/runs/43103172344)
pass. Automatic Release follow-up `43104262729` is skipped; no release created.
- WinGet PR #477862 is OPEN but its hosted Manifest Validation fails with
`FieldRequireVerifiedPublisher: Field usage requires verified publishers. (Icons)`.
Verified in check `130798904294` on PR head `c50ef9e`; subsequent validation
stages were skipped. The initial PR validation and CLA pass. The overall
"Validation Completed" check does not mean that manifest validation passed.
- Correction to the initial diagnosis/remediation: the JSON schema accepts the
fields, but a separate publisher-policy prerequisite prevents this package
from using them. The generator is implemented and pushed, but its icon-bearing
output is not currently acceptable to WinGet. Existing published 3.0.3 and its
installers are unchanged; no upstream merge or actual client rendering.
- The [official WinGet policy](https://github.com/microsoft/winget-pkgs/blob/master/doc/manifest/schema/1.28.0/defaultLocale.md#icons---the-icons-for-the-package)
says icons are populated during validation and must not be authored in PRs.
Therefore absence in the source manifest alone did not prove absence in the
served catalog; the initial diagnosis overstated this evidence. A maintainer
[explains icon extraction](https://github.com/microsoft/winget-pkgs/issues/360963#issuecomment-4254042938)
from Settings > Apps. No public publisher-verification onboarding was established.
- Final verification records are local only after the published `6d05b17`;
remote main contains the requested implementation. Next CI action: inspect
attempt 2 after runner scheduling.
- Recommended follow-up: revise/gate generator icon emission before another
release submission and contribute to UniGetUI's separate icon database.
No publisher claim, policy bypass, PR closure or additional external
contribution was performed.
## WinGet generator publication selected (2026-11-11)
- Selected `M-WINGET-ICON-PUBLISH-20261111` under explicit push authorization.
- Clean working tree at implementation `af7bb8e`; refreshed remote main is
`e0d1c40` and is an ancestor. Outgoing history includes the implementation,
its diagnosis and the preceding v3.0.3 release-evidence record. Changes remain
packaging/tooling/tests/documentation only; no version or workflow changes.
- WinGet PR #477862 remains open and mergeable at `c50ef9e`; upstream acceptance
is not claimed. Push and exact-revision hosted checks are pending.
## WinGet icon correction implemented and submitted (2026-11-11)
- Completed `M-WINGET-ICON-20261111`: the generator requires and validates an
immutable PNG URL, SHA-256, file type, resolution and theme, and emits `Icons`
only in the default-locale manifest. Metadata and operator documentation updated;
no dependency, application version, installer or release asset changes.
- Downloaded the public PNG pinned to `e0d1c403f261b9c906cc3853a1b7477518b64bf6`:
512 x 512, byte-identical to the existing tracked asset, SHA-256
`0A9877DB22201A4D3A133511DBE58AD667BE399F585D402E956474FFE28C3ED6`.
Schema 1.12.0 requires `custom` for this resolution; theme is `default`.
- Validation: all 13 focused generator tests pass, including 17 invalid-icon
variants and preservation of existing output on failure. All three generated
manifests and all three submission manifests pass the official Microsoft
1.12.0 JSON schemas with the installed YAML/JSON-schema validators. Parsed
before/after comparison confirms only `Icons` changes; `git diff --check` passes.
- Submitted [WinGet PR #477862](https://github.com/microsoft/winget-pkgs/pull/477862)
at `c50ef9e958f5c5654c8ef1890bb85468092a10d6`, based on upstream
`258762d8d44056e7008a315f67b8415b6d079582`. Verified OPEN, non-draft and mergeable;
remote diff contains exactly six additions in the existing 3.0.3 default-locale
file. The installer and version manifests are untouched.
- The connector could write the fork but was denied upstream PR creation; the
existing authenticated GitHub CLI successfully submitted the authorized PR.
No upstream merge, project main push, product release or installed-app test.
- Local schema validation does not replace WinGet's hosted validation. External
checks/acceptance and actual UniGetUI rendering remain pending. No Windows
installer execution was necessary for this metadata-only change. Generator
changes are locally committed; next actions are upstream acceptance/client
refresh and separately authorized publication of the project changes.
## UniGetUI missing-icon investigation (2026-11-11)
- User reports no icon for Immich Folder Watch in UniGetUI. Read-only inspection
confirms the published WinGet 3.0.3 default-locale manifest has no `Icons`;
the repository manifest generator likewise emits no icon metadata.
- Windows installer source already declares its icon and `ARPPRODUCTICON`.
UniGetUI's current native WinGet icon resolver reads catalog `Icons` URLs and
hashes. Its current supplementary database contains no key matching `immich`
or `voltkraft`. This explains missing catalog artwork, but the user's exact
UniGetUI version, cache and installed Windows UI were not inspected.
- Sources: [published manifest](https://github.com/microsoft/winget-pkgs/blob/master/manifests/v/VoltKraft/ImmichFolderWatch/3.0.3/VoltKraft.ImmichFolderWatch.locale.en-US.yaml),
[native icon resolver](https://github.com/Devolutions/UniGetUI/blob/main/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/WinGetIconsHelper.cs),
[supplementary database](https://github.com/Devolutions/UniGetUI/blob/main/WebBasedData/screenshot-database-v2.json).
- Next action: add immutable public PNG icon metadata to the WinGet generator,
validate generated manifests, then submit a separately authorized metadata
update upstream. Consider the UniGetUI database route for versions that do not
use native catalog icons. No application release is inherently needed for a
catalog metadata correction; no external write or application change occurred.
- This live check also confirms 3.0.3 now exists in the WinGet default branch,
superseding the earlier pending-acceptance observation below.
## PR #32 merged and v3.0.3 published and verified (2026-11-11)
- Completed `M-RELEASE-303-20261111`: #32 merged as `3740ce0`; stable v3.0.3
published from `e0d1c403f261b9c906cc3853a1b7477518b64bf6` with all main changes.
- Main and exact-release CI pass eight jobs each; final CodeQL passes all four
analyses and NuGet succeeds. The release passes all nine jobs and publishes
both Windows MSIs and both Linux Flatpaks. All four public hashes/sizes verify.
- Corrected a release-blocking test harness race without changing production
code: 19 focused tests, 503 Core tests and 3,000 stress scenarios pass; all
original assertions remain. Final hosted Windows/Linux tests also pass.
- Both released Linux bundles pass 240-assembly component audits plus exact
reduced DLL/provenance/notices checks. Independent Windows inspection verifies
version/architecture and no Avalonia in 415 managed assemblies per MSI.
- Signed Pages deployment and isolated signature-verified pulls confirm 3.0.3
on both architectures with the existing key. WinGet #477698 is submitted and
awaits external acceptance. Flathub preparation/native builds pass; submission
remains disabled. Open CodeQL and Dependabot alert counts are zero.
- Auto-merge stays disabled. Prior v3.0.2 tag/assets are unchanged. No installed
app or live Immich test was performed. Final evidence is saved locally after
the immutable tag, without another main push; remote main/tag remain `e0d1c40`.
- Release scope is complete. External WinGet acceptance and optional Flathub
onboarding are separate follow-ups. [Final evidence](release-3.0.3.md).
## PR #32 merge and v3.0.3 release selected (2026-11-11)
- Selected `M-RELEASE-303-20261111` under explicit merge/release authorization.
- Reverified #32 at `ce0b711`: OPEN/CLEAN, all 14 checks successful, no auto-merge.
Latest release is v3.0.2; v3.0.3 is the next compatible patch release.
- Merged #32 with the expected-head guard as `3740ce0`. Local documentation
history is preserved; only the newer brief/status summaries resolve conflicts.
Main CI 43066118171 passes all eight jobs, CodeQL 43066119121 passes four
analyses and NuGet succeeds. Existing-version release follow-up skips publication.
- Prepared v3.0.3 / 3.0.3.0 and regenerated AppStream. Version/history checks,
AppStream and focused release tests pass; independent preparation review has
no findings. First release candidate `6c60d55` passes CodeQL/NuGet, but Windows
exposed an existing autostart test harness race outside the documented UI-thread
contract. The test-only single-thread harness correction passes 19 focused
tests, all 503 Core tests and 3,000 repeated ordering/cancellation scenarios.
Independent review confirms all original assertions remain; no production
changes. Fresh hosted checks/publication are pending.
[Release evidence](release-3.0.3.md).
## PR #32 reduced Avalonia prepared and verified (2026-11-11)
- Completed `M-PR32-REDUCED-AVALONIA-20261111` for preparation/validation. Pushed
only #32 through `ce0b711d33f6fa07c364445b96fb2bbc831b9354`; no merge or main push.
- Shipped-component audit confirms the existing issue in both v3.0.2 Linux
bundles. Reduced 12.1.6.1 removes the identified implementations/resources and
retains attribution; D-Bus 0.94.1 resolves the restore conflict.
- All eight CI jobs, four CodeQL analyses, aggregate CodeQL and NuGet submission
succeed: 14 current PR checks green. Both downloaded native candidates pass
exact DLL/provenance/license checks and a 240-assembly exclusion audit each.
- Linux passes 501 Core and 60 Linux tests; hosted packaging passes all 147 tooling
tests. Windows passes with its documented platform skips. One unchanged Windows
rerun passed after the existing short file-lock test timed out; a stalled Linux
package-download attempt was replaced. Detailed outcomes are retained.
- Independent review verified package provenance and the extracted-cache tamper
fix. Future Avalonia upgrades require coordinated source review/reconstruction.
- #32 is OPEN/CLEAN, auto-merge request null and repository auto-merge false.
Remote main remains `df48398`; published v3.0.2 assets are unchanged. No new
release, deployment, installed desktop test or live Immich connection occurred.
- PR description contains final hosted evidence. This closing record is local
documentation only, preserving previous unpublished records. Next action:
explicit merge authorization, followed separately by a release decision.
[Final verification and artifact hashes](dependabot-pr32-20261111.md).
## Avalonia baseline license reassessment (2026-11-11)
- Read-only follow-up on #32 confirms the unchanged open head `51898a8`, failed
build/restore checks and neutral aggregate CodeQL. No dependency edit, merge,
workflow rerun or remote publication was performed.
- Correction to the earlier upgrade-only framing: the official source commit for
installed Avalonia 12.0.3, `21e816874efa142bf9903b51fd323d1f35e56ab3`, already
contains MS-PL headers in [Calendar.cs](https://github.com/AvaloniaUI/Avalonia/blob/21e816874efa142bf9903b51fd323d1f35e56ab3/src/Avalonia.Controls/Calendar/Calendar.cs)
and [Fluent Calendar.xaml](https://github.com/AvaloniaUI/Avalonia/blob/21e816874efa142bf9903b51fd323d1f35e56ab3/src/Avalonia.Themes.Fluent/Controls/Calendar.xaml).
The same headers were freshly verified at proposed 12.1.6 commit `cf8e564`.
Source revisions come from the corresponding NuGet nuspec repository metadata.
- Staying on 12.0.3 does not resolve this source-license concern. v3.0.2 retains
that dependency; its successful tests/publication do not establish component
license compatibility. A complete released-binary inclusion audit was not
performed in this follow-up, so no new definitive distribution finding is claimed.
- Options: reproducible source reduction/replacement with package and GUI audits;
applicable permission from rights holders; or an explicitly reviewed licensing
change with all necessary rights. Deferral alone is only temporary containment.
Recommended next decision: a scoped baseline/component audit and reduced-build
feasibility assessment. No remediation option is selected yet; #32 stays blocked
and automatic merging remains disabled.
## Release v3.0.2 published and verified (2026-11-11)
- Completed `M-RELEASE-302-20261111`: v3.0.2 is published from main/release
commit `df4839852bb84efef35a83cc429d51ce55b9ed1e`, including all new main changes.
- CI passes eight jobs; CodeQL passes all four languages; NuGet submission passes.
Release passes all nine jobs, with both Windows MSIs and both Linux Flatpaks.
- Downloaded all four public assets and verified exact sizes/SHA-256 hashes;
tag, versions and release notes match the selected commit/changelog.
- Signed Pages deployment passes. Isolated signature-verified OSTree pulls return
3.0.2 for x86_64 and aarch64 using the unchanged persistent signing identity.
- WinGet #477568 is submitted and awaits external acceptance. Flathub preparation
and both native builds pass; submission is correctly skipped while disabled.
- #32 remains open/license-blocked at 51898a8, auto-merge disabled, and open
CodeQL/Dependabot alert counts zero. No application installation or live Immich
connection was performed. Existing v3.0.1 is unchanged.
- Final evidence is saved locally after the immutable tag; no extra main push.
Release scope is complete; external distributor acceptance is separate.
[Release evidence, hashes and run links](release-3.0.2.md).
## Verification documentation published and checked (2026-11-11)
- Completed `M-DOC-PUBLISH-20261111`. Published the final report and related
maintenance evidence as `ef6f394693353b9103ecf92c811051e69b04d35b`; the net
change from application main `efeda2f` consists only of nine Markdown files.
- Explicit CI 43025624807 passes all eight jobs, including Windows/Linux and
both native Flatpak architectures. CodeQL 43025461040 passes all four language
analyses; NuGet 43025461060 succeeds. Manual dispatch was needed because the
normal CI push path filter excludes Markdown/docs changes.
- The final record adds these verified results without changing any product or
workflow file. This documentation-only closing update uses the same tested
code; another full application build is not required for the record itself.
- Release follow-up 43026470636 is correctly skipped for the manually dispatched
CI. Published v3.0.1 remains unchanged. A compatible v3.0.2 maintenance release
is recommended for the YAML value-preservation fix and reviewed updates; no
version change, new tag or publication is selected.
- #32 remains open/license-blocked at 51898a8, automatic merging disabled.
[Published evidence and run links](dependabot-remaining-merges-20261111.md#documentation-publication-follow-up).
## Selected dependency PRs merged and main verified (2026-11-11)
- Completed `M-REMAINING-MERGE-20261111`: #38/#39/#40/#42/#43/#44/#45 merged
through guarded requests after successful exact-head checks. Final main
`efeda2ffb6ec975188d2b1454c39dd718c00e540` exactly matches the reviewed integration.
- Additive conflict resolutions preserve all reviewed changes and license data.
Combined 501 portable tests pass; independent review confirms the exact source
edit union, 24 license hashes and 109 version mappings. GitHub's stale conflicting
state was resolved by a tree-identical normal merge and 14 fresh successful checks.
- Final main CI 43021602143 passes all eight jobs; CodeQL 43021602894 passes all
four languages; NuGet 43021602079 succeeds. All 13 validation checks are green.
Open Dependabot and code-scanning alert counts are zero after analysis.
- Release follow-up 43022515575 succeeds, detects existing v3.0.1 and skips all
builds/publication/downstream updates. Published tag 1ab0748 and four assets
remain unchanged; no new release or deployment occurred.
- Only #32 remains open at unchanged 51898a8, still license-blocked. Repository
auto-merge is false. No live Immich test was performed.
- Local main incorporates remote main while preserving unpublished documentation;
production files match exactly and only docs remain ahead. No extra main push.
- Scope complete; no further merge or release selected. [Full merge and validation
evidence](dependabot-remaining-merges-20261111.md).
## Remaining dependency PRs prepared and verified (2026-11-11)
- Completed `M-REMAINING-PRS-20261111`: #38/#39/#40/#42/#43/#44/#45 are pushed,
OPEN/CLEAN and pass all current checks. #38/#40 have 15 successful checks;
the other five have 14. Every set includes Windows/Linux, both native Flatpak
architectures, all four CodeQL analyses, aggregate CodeQL and NuGet submission.
- Exact-source license/compatibility reviews and fixes are complete. Key repairs:
SocketIO 4 hardened adapters and independently reviewed shutdown/reconnect
lifetime fix; complete 89-package offline notice coverage; Svg build-tool
notices/runtime isolation; YAML notices and ambiguous-string round trips.
- #39's historical queued Dependabot app check belongs to its previous head.
Its final changelog commit passes all current checks; no requirement was
disabled or bypassed. The old service check is not claimed successful.
- Final live checks: zero open Dependabot/code-scanning alerts, repository
auto-merge false and every PR auto-merge request null. #32 remains open and
license-blocked at unchanged `51898a8`. Remote main remains `a82216d`.
- No PR merged, main pushed, release/deployment performed or live Immich server
contacted. Root evidence/changelog is committed locally; branch-specific
reports and updated PR bodies are remote. Prior unpublished records preserved.
- Next action: separate user merge decision for the seven prepared PRs, then
integration/main verification. [Exact heads, runs and evidence](dependabot-remaining-prs-20261111.md).
## Remaining PR preparation selected (2026-11-11)
- Selected `M-REMAINING-PRS-20261111`: #38/#39/#40/#42/#43/#44/#45, excluding #32.
Current remote main is `a82216d`; local unpublished evidence is preserved.
- Separate worktrees isolate Actions, SocketIO, branding, Hosting and YAML work.
Root brief/status and final cross-cutting evidence remain primary-owned.
- Initial evidence: #42 application/Flatpak CI succeeds but CodeQL is neutral;
#44/#45 fail native Flatpak packaging; #43 has major transport API changes.
Exact-source license reviews and fixes are in progress. No merge is selected.
## Dependabot xUnit correction verified; separate warnings retained (2026-11-11)
- Completed scoped correction/verification `M-DEPENDABOT-IGNORE-20261111`. Replaced the interval with
`>= 4.0.0` on isolated branch `fix/dependabot-xunit-ignore`; scope retains
absolute version/security exclusion and changes no package versions.
- [PR #41](https://github.com/VoltKraft/immich-folder-watch/pull/41) head
`ed1a5f624970fd1e046a0584fc363d47c5372925` contains the fix and focused docs.
YAML semantic comparison and all 14 PR CI/CodeQL checks passed. The actual
upstream C# parser reproduced the old failure and passed all five version
boundary cases for the correction.
- Automatic approval review rejected the direct main push and required a PR or
explicit publication approval. The user then explicitly authorized merging #41;
expected-head merge succeeded as `a82216d4251e6517b71236602ab09abfdb13f3e1`.
Main CI, CodeQL, dependency submission and config validation passed; automatic
release follow-up correctly skipped publication. #32 stays blocked; auto-merge off.
- Independent source review confirms the C# updater parser supports the comparator
and retains explicit ignore versions for security updates. A controlled fresh
NuGet run `43009535605` succeeded with the new effective rule, zero requirement
errors and xunit.v3 still 3.2.2. Created #42-#45 for review only.
- Dependabot UI retains separate duplicate-PR creation warnings and initial
automatic version/rebase unknown errors. No successful #32 rebase is claimed.
Next maintenance action: investigate those service/PR-handling warnings while
retaining #32's license block. [Detailed evidence](dependabot-ignore-20261111.md).
- Final evidence is saved locally; no additional main documentation push.
## PR #34 merged; main verified, separate updater issue found (2026-11-11)
- User authorized the merge and main verification. Rechecked all 14 successful
PR-head checks and merged exact head `1a4722c` as
`eeba23df3a62a6cf307684b3a1a6f4d607d7118b`, without bypass or auto-merge.
- Main CI `43003920977` passed all eight jobs; CodeQL `43003920330` passed
all four analyses; NuGet submission `43003920444` succeeded. Open code-scanning
alerts: zero. Dependabot configuration check `130466569912` also succeeded.
- Release follow-up `43004699915` succeeded and correctly skipped publication
because v3.0.1 exists. No new release, Pages deployment or downstream submission.
- Separate automatic NuGet updater runs failed with `illformed_requirement` for
the existing xunit.v3 ignore range `[4.0.0,)`. Merge/verification completed;
updater maintenance remains open. [Detailed evidence](dependabot-pr34-20261111.md).
- Local documentation conflicts preserve the newer validation/release records;
implementation changes match remote main. No extra main push is selected.
- #32 remains open/blocked at unchanged `51898a8`; #34 is closed/merged and
auto-merge disabled. Next maintenance action: validate/correct the xUnit ignore
requirement and rerun NuGet updater jobs while preserving compatibility blocks.
No configuration fix or additional remote push was performed in this assignment.
## PR #34 ready for a separate merge decision (2026-11-11)
- Completed `M-PR34-20261111`; refreshed #34 from `f22797e` onto remote main
`2a9a96d` and pushed `1a4722c` without force-push or merging.
- Branding builds, pixel/ICO comparison and runtime-isolation verification pass;
renewed license review found no blocker. All eight CI jobs, all four CodeQL
analyses, aggregate CodeQL and NuGet submission succeeded: 14 successful checks.
- GitHub reports `MERGEABLE` / `CLEAN`; zero open code-scanning alerts. PR body
contains exact-head evidence. Next action requires a separate user merge decision.
- No Dependabot configuration suite has appeared on the new head; the old queued
checks remain historical, not successfully rerun. See [renewed evidence](dependabot-pr34-20261111.md).
- #32 remains blocked, auto-merge disabled, remote main and release v3.0.1 unchanged.
Final evidence is saved locally; only the #34 branch and its description were
updated remotely. No main documentation push.
## PR #37 merged and main verified (2026-11-11)
- User authorized merging #37 and verifying main. All 14 PR-head checks passed
at `d79d3f3`; expected-head merge succeeded as
`2a9a96d18ead49682804cdbe61e444b8c5f99703`, without bypassing checks.
- [Main CI](https://github.com/VoltKraft/immich-folder-watch/actions/runs/43000078507)
passed all eight jobs, including Windows/Linux tests, both native Flatpak
candidates and both actual Pages upload/download modes.
[CodeQL](https://github.com/VoltKraft/immich-folder-watch/actions/runs/43000084573)
passed all four analyses; NuGet submission succeeded. Open code-scanning
alert count remains zero.
- [Release follow-up](https://github.com/VoltKraft/immich-folder-watch/actions/runs/43000811523)
succeeded in preparation and correctly skipped builds/publication because the
v3.0.1 tag already exists. No release, Pages deployment or downstream submission
was performed by this merge; published v3.0.1 remains unchanged.
- Final readback: #37 merged/closed; #32/#34 open/unmerged with no auto-merge
requests, repository auto-merge disabled. Requested merge/validation completed.
- Local main includes the merge and preserves local v3.0.1/PR verification records.
Documentation-only conflicts were reconciled without implementation changes.
Final evidence is committed locally; no additional main documentation push.
## PR #37 ready for a separate merge decision (2026-11-11)
- `M-PR37-20261111` completed. Updated [PR #37](https://github.com/VoltKraft/immich-folder-watch/pull/37)
from `c8989d6` to `d79d3f30376f2993a185bfc62dd55e87865f943d`, integrating main
`1ab0748` without force-push and adding focused Pages upload/download validation.
- All eight CI jobs, all four CodeQL analyses, aggregate CodeQL and NuGet submission
passed: 14 successful checks. Actual upload/download passed with both hidden-file
modes; no deployment rights, environment or signing secrets were used.
- License/compatibility review and independent review found no blocker. GitHub
reports the PR clean and mergeable. Its description contains exact-head run links.
- #37 remains open/unmerged; #32/#34 are unchanged/open, repository auto-merge off.
Main/release v3.0.1 are unchanged. A merge requires a later user decision.
- [Detailed PR evidence](dependabot-pr37-20261111.md) records action source/license
links, test coverage, uploaded fixture IDs and remaining deployment limitation.
Final evidence is a local documentation checkpoint; only PR #37 was pushed.
## v3.0.1 published and verified (2026-11-11)
- `M-RELEASE-301-20261111` completed. [v3.0.1](https://github.com/VoltKraft/immich-folder-watch/releases/tag/v3.0.1)
is the latest stable release, tagged at `1ab074841c76b2493dc3af5d972ce229e5746edb`.
The release includes all previously merged main changes and the verified
container-ownership fix discovered during release validation.
- R301-AC01/02: Unified versions/AppStream/changelog match; six CI jobs and all
four CodeQL analyses passed; both Windows MSIs and both Linux Flatpaks built,
published and independently downloaded with matching size/SHA-256.
- R301-AC03: Signed Pages repository deployed; live signature/version verification
passed for both architectures. WinGet submission succeeded (external PR open).
Flathub preparation/builds passed; disabled submission was correctly skipped.
- R301-AC04: #32/#34 remain open/unmerged, auto-merge disabled, no live Immich or
personal installation changes. No further milestone is selected.
- [Detailed evidence](release-3.0.1.md) owns run links, checksums, signed refs and
publication limits. This final documentation checkpoint follows the immutable
release and is retained locally; published artifacts remain unchanged.
## PR #37 preparation (2026-11-11)
- User selected `M-PR37-20261111`, authorizing branch refresh, focused compatibility
validation and successful CI/CodeQL without merging or deployment.
- Integrated remote main `1ab0748` into original PR head `c8989d6` in an isolated
worktree. No force-push; the root checkout's local v3.0.1 evidence is preserved.
- Add an actual upload/download smoke check for the Pages action using synthetic
files only, read-only repository permissions and no publishing job/secrets.
- #32/#34 and disabled automatic merging are outside the mutation scope.
## v3.0.1 container checkout correction (2026-11-11)
- Preparation commit `b475dda` passed all six [CI jobs](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42922983220)
and all four [CodeQL analyses](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42922982812).
- The first [release build](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42923750608)
failed before either Flatpak build: Git rejected the guard's `rev-parse` with
`dubious ownership`. Checkout's temporary HOME does not carry its safe-directory
configuration into subsequent shell steps in the privileged build container.
This was an ownership-check failure, not a different target SHA.
- Scope the guard's Git trust exception to `GITHUB_WORKSPACE` for that single
command. Keep strict target equality and default-branch checkout; do not add a
global/wildcard exception. Extend the deployed-guard regression with Git's
different-owner simulation, checking that plain Git rejects the fixture while
the scoped guard accepts only its exact HEAD and rejects all other inputs.
- No v3.0.1 tag or assets were published by the failed run. Rerun full exact-head
CI and release builds after this focused correction; prior versions stay intact.
## v3.0.1 release preparation (2026-11-11)
- User authorized publishing v3.0.1 from current main `bb13a33`, including all
merged maintenance/security changes; selected `M-RELEASE-301-20261111`.
- Remote v3.0.1 release/tag are unused. Local main matches origin/main and the
working tree was clean before preparation. Existing v3.0.0 assets are preserved.
- Unified versions are prepared as 3.0.1 / 3.0.1.0; release notes retain every
Unreleased item and summarize the merged dependencies/actions and maintenance
records. Release date uses the user's Europe/Berlin date, 2026-11-11.
- Publication follows successful main CI through the existing release workflow;
verify all four assets and downstream signed Flatpak repository before handoff.
No publication/build success is claimed at this preparation checkpoint.
- Local preflight passed: version/XML/changelog consistency, AppStream validation,
five manifest regressions and five workflow-security tests (four PowerShell
cases require Windows CI), plus whitespace checks. Independent release review
found no blocker in the five-file preparation diff.
- #32 and #34 remain excluded from main; auto-merge stays disabled.
## Release checkout fix verified on main (2026-11-10)
- Published security fix `ae9558c` and Windows regression-runner correction
`f1d20c3f1f802d67194d8ae620acc792c796ab7c`; remote main is the latter revision.
- [CI](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42916629585)
completed successfully on `f1d20c3`: all six jobs passed, including Windows/Linux
builds/tests, all nine workflow security cases on Windows, and native x86_64/ARM64
Flatpak candidates. Selecting Git Bash resolved the initial Windows test failure.
- [CodeQL](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42916628594)
completed successfully on the same revision for all four languages. NuGet
dependency submission also passed. The open code-scanning alert list is empty.
- Alerts [#11](https://github.com/VoltKraft/immich-folder-watch/security/code-scanning/11)
and [#12](https://github.com/VoltKraft/immich-folder-watch/security/code-scanning/12)
are both `fixed`, automatically recorded at 22:38:28 UTC; neither was dismissed.
- Final remote readback: #32 and #34 remain open/unmerged, both have no auto-merge
request, and repository automatic merging remains disabled.
- Requested publication and validation are complete. This final evidence-only
status entry is a local documentation checkpoint after the verified remote
revision; no further implementation work or release dispatch is selected.
## Release checkout fix published; Windows test runner correction (2026-11-10)
- User explicitly authorized publishing the fix and verifying CI, CodeQL and
alert closure. Pushed `ae9558ce07b93183c11c878d96aab0940488c37d` to main.
- CodeQL automatically marked alerts #11 and #12 `fixed` at 22:38:28 UTC;
no dismissal was performed. The Actions analysis passed on the pushed fix.
- Initial [CI run](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42916337435)
exposed a Windows-only test harness problem: the new Bash regression's valid
commit case failed before application build; all four PowerShell cases passed.
Select Git for Windows' Bash explicitly instead of the ambiguous PATH launcher,
and include stdout in assertion diagnostics. Release behavior and assertions
remain unchanged. Fresh exact-head CI is required for this correction.
- #32/#34 remain open at their original heads, with `auto_merge: null`;
repository `allow_auto_merge` is false. No PR merge or release dispatch.
## Release checkout alerts hardened locally (2026-11-10)
- Live CodeQL alerts [#11](https://github.com/VoltKraft/immich-folder-watch/security/code-scanning/11)
and [#12](https://github.com/VoltKraft/immich-folder-watch/security/code-scanning/12)
remain open on remote main `85ec9e4c45547fd353c647bf2c641550178e172f`.
Both report `actions/cache-poisoning/poisonable-step` after the same dynamic
Flatpak checkout, for `workflow_dispatch`.
- Existing gates already restrict dispatch to main and automatic runs to successful
same-repository push CI on main. There is no dispatch SHA input, so no arbitrary
external-commit exploit was demonstrated. The
[CodeQL query guidance](https://codeql.github.com/codeql-query-help/actions/actions-cache-poisoning-poisonable-step/)
explains why read-only repository permissions alone do not remove cache risk.
- Changed only the Flatpak release checkout to the explicit default branch, with
an inline exact-commit guard before any repository script. The target remains
manifest data. If main advances, the job stops instead of mixing SDK, manifest
or offline-feed inputs from different commits. Retry behavior is documented in
[publication workflow trust](development.md#publication-workflow-trust).
- Validation: five workflow security tests passed, including real Git-history
matching/mismatched commits and malformed/injection inputs; four unrelated
PowerShell cases were skipped because PowerShell is unavailable locally.
Five manifest regression tests passed. YAML parsing/step-order checks and
`git diff --check` passed. Independent security review found no blocking
security or correctness issue; hosted CodeQL and Windows execution remain unverified.
- This is a local correction; no push, release dispatch, remote alert dismissal
or hosted rescan was performed. Remote alert closure remains unverified until
the fix is published and CodeQL scans it. #32/#34 and auto-merge are unchanged.
- The preceding documentation publication is complete: main `85ec9e4` passed
[all six CI jobs](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42911044302)
after an explicit CI dispatch (documentation-only pushes are filtered), plus
[CodeQL](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42910956556)
and NuGet submission. A successful analysis job does not mean zero open alerts.
## Documentation publication checkpoint (2026-11-10)
- User authorized publishing the accumulated dependency-maintenance documentation
to main and checking the resulting CI. Earlier statements below that records
are local/unpushed describe their historical checkpoints, not a continuing
publication restriction.
- Prepared from local checkpoint `2849aec` on remote baseline `9a84eec`; the
accumulated diff changes only this status, the project brief, the Dependabot
review and the configuration-check diagnosis. `git diff --check` passed.
- The preceding main revision passed CI and CodeQL as recorded below. Validation
of the documentation push must be read from the checks attached to its exact
GitHub commit; earlier runs do not establish the new revision's result.
- #32 remains open/blocked and #34 open/deferred. Automatic merging stays disabled.
No additional dependency update, PR merge or version bump is selected.
## Remaining Actions PR merges completed (2026-11-10)
- User explicitly deferred #34 and authorized merging the other reviewed Actions
updates (#28/#29/#30/#31). Each exact PR head had 13 successful checks before its
manual merge. Expected-head checks protected against concurrent branch changes;
no checks or branch rules were bypassed.
| PR | Validated head | Merge commit |
| --- | --- | --- |
| [#28](https://github.com/VoltKraft/immich-folder-watch/pull/28) | `c66de1e` | `b661638d9d7535a2a92c1cbfa510dc532d7dce05` |
| [#29](https://github.com/VoltKraft/immich-folder-watch/pull/29) | `2b2bdc6` | `b5f4dc122ed8203c9a17fae9f1330b1c057bc222` |
| [#30](https://github.com/VoltKraft/immich-folder-watch/pull/30) | `d0062e7` | `5c80ddd5a12c02b3badc549a1f72f4e33c8ec404` |
| [#31](https://github.com/VoltKraft/immich-folder-watch/pull/31) | `5ed2076` | `9a84eec0a5da6f9a5e58d92c0e776bc22f707309` |
- Final remote main: `9a84eec0a5da6f9a5e58d92c0e776bc22f707309`.
[Combined main CI](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42909012903)
and [CodeQL](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42909013941)
completed successfully on that exact final merge commit. All six CI jobs passed,
including Windows/Linux tests and native x86_64/ARM64 Flatpak builds; all four
CodeQL language analyses passed. NuGet dependency submission also succeeded.
- #32 remains open/blocked at unchanged `51898a8`. #34 remains open/deferred at
`f22797e`; no further configuration-check recovery was attempted after the user
deferred it. Repository auto-merge remains disabled, with no PR auto-merge request.
- Local main incorporates the remote merges without losing local documentation
history. No main documentation push, version bump, manual release or deployment.
- Completed: four authorized PR merges and successful combined main validation.
No further milestone is selected; #32 remains blocked and #34 is explicitly
deferred until a later user request. Final local evidence is not pushed.
## Dependabot configuration-check recovery blocked externally (2026-11-10)
- User authorized recovery of #34's queued Dependabot check without merges.
Investigation and permitted recovery attempts are recorded in
[the diagnosis and support handoff](dependabot-config-check-20261110.md).
- No config defect was identified: the original blob matches successful #28/#31
validation, schema validation passes, and a comment-only retrigger preserves
parsed YAML exactly. The evidence points to stalled GitHub Dependabot service
processing; internal logs/root cause are unavailable and remediation is not claimed.
- REST retry returned 404; GraphQL explicitly restricts suite retries to GitHub
Apps. After the user signed in, the actual Dependabot check UI still offered no
rerun action. These are GitHub capability limits, not automatic approval rejection.
- Pushed only explanatory-comment commit `f22797ed4d452e1940493bf09d44b25b931b2ee8`
to #34. New check `130148023423` remains queued, as does the superseded original
`130138962423`; neither supplies diagnostic output. No further speculative
commits, config changes, forged statuses or protection bypasses were performed.
- The new head has [all six CI jobs successful](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42907159639),
including Windows/Linux and x86_64/ARM64 Flatpak, plus [all four CodeQL analyses](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42907153860),
the aggregate CodeQL check and NuGet submission successful. Twelve checks pass;
the separate configuration check is the sole unfinished check.
- PR #34 remains open/unmerged; #32 remains unchanged/open/blocked at `51898a8`,
and repository auto-merge stays disabled. No main push, release or deployment.
- Remaining prerequisite: the owning GitHub service must process/requeue the
validator. The linked handoff contains exact run/suite IDs, timestamps and
reproduction evidence for GitHub support. No support request was sent. Local
documentation is committed separately from the pushed PR comment.
## Remaining Dependabot refresh completed (2026-11-10)
- Milestone `M-DEPENDABOT-REFRESH-20261110` completed. User authorized updating
#28/#29/#30/#31/#34 with current main and obtaining successful CI/CodeQL; no PR merges.
- GitHub update-branch requests used each exact expected head. All five new heads
contain remote main `13e93dac570a49ec9e8595713c5fc9aeb2a78524`; ancestry and
full diff checks confirm only each original reviewed proposal remains above main.
No force-push, extra package change or test/check weakening was necessary.
| PR | Updated head | CI | CodeQL workflow |
| --- | --- | --- | --- |
| [#28](https://github.com/VoltKraft/immich-folder-watch/pull/28) | `c66de1e58f0bd4d31b5e004348909abcb8665f32` | [Success](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42904525439) | [Success](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42904516733) |
| [#29](https://github.com/VoltKraft/immich-folder-watch/pull/29) | `2b2bdc6c767e19beb0ebb58ae0ff32a7b8711110` | [Success](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42904530008) | [Success](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42904521815) |
| [#30](https://github.com/VoltKraft/immich-folder-watch/pull/30) | `d0062e7cccda5ec8ec19d55c58d7cf5b88074f5f` | [Success](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42904535257) | [Success](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42904528780) |
| [#31](https://github.com/VoltKraft/immich-folder-watch/pull/31) | `5ed20761e5ee96ba1fa9b16f90173273393da8c0` | [Success](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42904541922) | [Success](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42904531775) |
| [#34](https://github.com/VoltKraft/immich-folder-watch/pull/34) | `f4412966f9e3008fb286945abcaa65a417e83996` | [Success](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42904546447) | [Success](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42904538706) |
- DCR-AC01/02: All six CI jobs passed on every updated head, covering Windows/Linux
tests and native x86_64/ARM64 Flatpak builds. All four CodeQL analyses (Actions,
C#, JavaScript/TypeScript, Python) and each aggregate `CodeQL` check passed.
NuGet dependency submission passed too. The earlier neutral CodeQL assessment
is resolved by the fresh analyses; no CodeQL configuration changes were needed.
- Separate service check: #34's `.github/dependabot.yml` check (ID 130138962423,
[service details](https://dependabot-api.githubapp.com)) remains queued at this
snapshot. It is not one of the completed CI/CodeQL jobs; no failure is reported.
#28/#29/#30/#31 have all 13 reported checks successful; #34 has 12 successful
and this one queued service check. Do not describe every #34 check as complete.
- DCR-AC03: All five PRs remain open/unmerged. #32 remains unchanged/open/blocked
at `51898a8`; repository `allow_auto_merge: false`, all inspected PRs
`auto_merge: null`. Remote main remains `13e93da`. No merge into main, main push,
release, deployment or live Immich access occurred.
- Local records preserve authorization and validation; they are not pushed.
No implementation milestone remains active. Next action: separately authorized
review/merge after checking current heads and the outstanding service check.
The review below records the earlier heads; the refresh evidence above supersedes
its pending integration-CI and neutral-CodeQL limitations. Publication-only paths
remain outside the validation performed here.
## Remaining Dependabot review completed (2026-11-10)
- Reviewed #28/#29/#30/#31/#34 without remote changes. Exact heads, CI links,
compatibility findings and upstream license sources are retained in
[the review record](dependabot-review-20261110.md).
- All five exact-head CI runs completed successfully with six passing jobs each;
NuGet dependency submission passed. CodeQL is neutral on every PR with
`4 configurations not found`, so a successful security scan is not claimed.
- No concrete compatibility or license blocker was identified. Actions retain
MIT licenses; #34 changes only the branding tool's SkiaSharp packages, preserving
application runtime versions and native third-party notice coverage.
- All five heads integrate conflict-free with main `13e93da` in local tree-only
checks. Their hosted CI predates the recent main merges. Before a later merge,
refresh integration CI and obtain a complete CodeQL assessment. Pages/OIDC and
release-only publication paths were not exercised or triggered by this review.
- All five PRs remain open/unmerged. #32 remains unchanged at `51898a8`, open and
blocked; repository `allow_auto_merge: false`, with `auto_merge: null` on every
inspected PR. No PR rebase, push, merge, workflow rerun or publication occurred.
- Review complete; no implementation milestone selected. Findings and scope are
saved in a local documentation checkpoint only. A later merge needs separate
authorization and current validation.
## Selective Dependabot merges completed (2026-11-10)
- User explicitly authorized merging #27, #33, #35 and #36 only. All four were
merged manually with expected-head checks after every current-head check passed.
Repository auto-merge remains disabled (`allow_auto_merge: false`); every
inspected PR has `auto_merge: null`.
- Integration preserved every reviewed package version, deletion-race fix,
regression test, xUnit compatibility constraint and license notice. Resolved
overlapping status/changelog records and adjacent package declarations;
removed duplicated historical status blocks without discarding history.
Independent read-only review of final cumulative head `9f73d91` found no issues.
| PR | Validated head | Merge commit | Successful CI |
| --- | --- | --- | --- |
| [#27](https://github.com/VoltKraft/immich-folder-watch/pull/27) | `ca35782` | `20cf55a` | [All six jobs](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42889338522) |
| [#33](https://github.com/VoltKraft/immich-folder-watch/pull/33) | `d5c5170` | `4f1ff08` | [All six jobs](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42894339727) |
| [#35](https://github.com/VoltKraft/immich-folder-watch/pull/35) | `176796a` | `c705988` | [All six jobs](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42894342541) |
| [#36](https://github.com/VoltKraft/immich-folder-watch/pull/36) | `9f73d91` | `13e93da` | [All six jobs](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42894348336) |
- Additional CodeQL and dependency-submission checks passed on all four heads.
The cumulative CI covers Windows/Linux tests and native x86_64/ARM64 Flatpak
builds. No guard, assertion or branch rule was bypassed.
- #32 remains open at unchanged head `51898a8`, blocked by the previously recorded
technical and license issues. No Avalonia upgrade or reduced build was included.
- Follow-up live check: remote main remains `13e93da`. Its [post-merge CI](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42895589381)
completed successfully (GitHub updated at 2026-11-10 20:35:07 UTC). All six jobs
passed: Windows/Linux build and tests, packaging lint, candidate preparation,
and native x86_64/ARM64 Flatpak builds. No version bump or manual release was performed.
- Follow-up settings readback: repository `allow_auto_merge: false`; #32 remains
open/unmerged at unchanged `51898a8`, with `auto_merge: null` and unsuccessful
checks (`mergeable_state: unstable`). Its technical/license blockers remain
deferred. This inspection made no remote changes or workflow reruns.
- Local main incorporates the remote merges while preserving the earlier local
documentation commits. This aggregate handoff remains local and is not pushed.
- Milestone `M-DEPENDABOT-CI-20261110` is complete for the selected four PRs, with
#32 explicitly deferred. No further milestone is selected. Next action: a
separately selected licensing resolution for #32 or review of other open PRs.
The following entries are historical snapshots; the merge record above supersedes
prior statements that the selected PRs were still open or awaiting authorization.
## Dependabot CI remediation (2026-11-10)
- Selected milestone: `M-DEPENDABOT-CI-20261110`. User authorized fixes on
existing PR branches without merges; later explicitly deferred #32's Avalonia
upgrade because of incompatible embedded component licensing.
- Isolated worktrees preserve each bot proposal and the original local main.
Scoped corrections are pushed without force; no update PR is merged.
| PR | Cause and correction | Pushed correction | Validation |
| --- | --- | --- | --- |
| #27 | Concurrent watcher/poll deletion handlers read the same asset before tombstone persistence; per-path ownership and retained retry baseline prevent duplicate remote trash | `ca35782` (fix `05297b7`) | Two deterministic regressions fail against old source; 483 Core tests pass before review delta, five focused deletion cases pass after it; independent review passed; [all six CI jobs passed](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42889338522) |
| #33 | Missing reviewed supplemental notices for Microsoft.Extensions/System 11.0.0; verified exact source license and all package notices, added exact-version supplements | `c6ad2e9` | Both architecture restores and 87-archive combined feed verified; real notice installer and 15 guard regression tests pass; independent review passed; [all six CI jobs passed](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42888743407) |
| #35 | xUnit 4 changes parallelism API, test-runner defaults and Avalonia extension ABI; retain framework 3.2.2 and compatible v2/runner upgrades, exclude incompatible future v4 proposals | `a5cbed6` | 481 Core and 53 Linux GUI/protocol cases pass with no failures/skips; schema and independent review passed; [all six CI jobs passed](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42888754999) |
| #36 | Missing reviewed supplemental notices for Microsoft.Data.Sqlite/Core 11.0.0; verified MIT source and added exact-version supplements | `2b2b186` | Both architecture restores and 81-archive combined feed verified; real notice installer and 15 guard regression tests pass; independent review passed; [all six CI jobs passed](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42888749135) |
- No license guard or test assertion was disabled. SDKs: local application/tests
10.0.203; exact Flatpak feed restores 10.0.401. PR corrections add no release bump.
- Completion: all six CI jobs pass on each of the four exact corrected heads,
including Windows/Linux and native x86_64/aarch64 Flatpak builds. No unfinished
or failed current-head check remains on #27/#33/#35/#36. All remain open with
`auto_merge: null`; repository `allow_auto_merge: false` was read back again.
- Final #27 CI: Linux 483 Core + 53 GUI/protocol passed; Windows 474 Core + 36 WPF
+ 34 portable Linux-project tests passed, with 9/19 expected platform skips.
Other corrected PRs: Linux 481 + 53; Windows 472 + 36 + 34 with the same skips.
All application builds have zero warnings/errors. Both native license logs
confirm 87 archives for #33 and 81 for #36.
- PR descriptions now explain the final fixes and link exact-head validation;
#27/#35 titles reflect their final scope. #32 stays unchanged at `51898a8`.
- Next action: manual review of the four validated PRs and separate authorization
before merging. Keep #32 open/blocked pending a separately selected licensing
resolution. No further implementation milestone is selected. This aggregate
handoff is a local documentation checkpoint; main was not pushed by this task.
### Deferred Avalonia PR #32
- Baseline: Dependabot head `51898a8`, Avalonia 12.1.6. Initial CI fails NU1605:
Avalonia.FreeDesktop requires Tmds.DBus.Protocol >=0.94.1 while the app pins 0.92.0.
- A local diagnostic with app/test pins at 0.94.1 passed the Linux Release build
(three obsolescence warnings, zero errors), 53 Linux GUI/protocol tests and 33
portable Linux-specific tests using SDK 10.0.203. The pin edits were reverted
after the user selected leaving this PR open and blocked; the bot proposal is
preserved. These results do not describe the unchanged PR head.
- Exact Avalonia source `cf8e564674700348947e93ab19105f27afe859a9` retains
[MS-PL Calendar code](https://github.com/AvaloniaUI/Avalonia/blob/cf8e564674700348947e93ab19105f27afe859a9/src/Avalonia.Controls/Calendar/Calendar.cs)
and [MS-PL Fluent theme resources](https://github.com/AvaloniaUI/Avalonia/blob/cf8e564674700348947e93ab19105f27afe859a9/src/Avalonia.Themes.Fluent/Controls/Calendar.xaml),
with default compile/resource inclusion. The exact source contains 19 marked
controls C# files and seven marked Fluent XAML files (plus eight Simple themes).
Its [NOTICE](https://github.com/AvaloniaUI/Avalonia/blob/cf8e564674700348947e93ab19105f27afe859a9/NOTICE.md)
and top-level MIT license are byte-identical to the repository's retained files;
preserving those notices does not establish AGPL compatibility. The
[GNU license list](https://www.gnu.org/licenses/license-list.html#ms-pl) identifies
MS-PL as GPL-incompatible. No reduced build or linking exception was found here.
- Status: leave #32 open and blocked. No dependency/catalog approval, license-guard
bypass, merge or publication. A separately scoped reduced build/component review
or applicable licensing permission is required before proceeding. Windows and
native Flatpak success are not claimed. No live Immich access occurred.
## Dependabot completion check (2026-11-10, 20:39 Europe/Berlin)
- The first [NuGet updater](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42874487345)
completed successfully and created five additional PRs (#32 through #36).
All ten Dependabot PRs remain open and unmerged. All reported checks on their
current heads have finished; five PRs have successful CI and five have failures.
| PR | Update | Head | CI result |
| --- | --- | --- | --- |
| [#27](https://github.com/VoltKraft/immich-folder-watch/pull/27) | download-artifact 7.0.0 to 8.0.2 | `27ab531` | Windows build/test job failed; remaining CI jobs passed |
| [#28](https://github.com/VoltKraft/immich-folder-watch/pull/28) | upload-artifact 6.0.0 to 7.0.2 | `339ee48` | All six CI jobs passed |
| [#29](https://github.com/VoltKraft/immich-folder-watch/pull/29) | deploy-pages 4.0.5 to 5.0.1 | `0c8975d` | All six CI jobs passed |
| [#30](https://github.com/VoltKraft/immich-folder-watch/pull/30) | configure-pages 5.0.0 to 6.0.0 | `383e170` | All six CI jobs passed |
| [#31](https://github.com/VoltKraft/immich-folder-watch/pull/31) | setup-node 6.5.0 to 7.1.0 | `9c6d43d` | All six CI jobs passed |
| [#32](https://github.com/VoltKraft/immich-folder-watch/pull/32) | Avalonia group, five updates | `51898a8` | Windows/Linux build/test and Flatpak preparation failed; native builds skipped; NuGet submission also failed |
| [#33](https://github.com/VoltKraft/immich-folder-watch/pull/33) | Microsoft.Extensions group, six updates | `7fb5e63` | Both native Flatpak builds failed; remaining CI jobs passed |
| [#34](https://github.com/VoltKraft/immich-folder-watch/pull/34) | SkiaSharp group, two updates | `a92df09` | All six CI jobs passed |
| [#35](https://github.com/VoltKraft/immich-folder-watch/pull/35) | xUnit group, three updates | `820cc9f` | Windows/Linux build/test jobs failed; remaining CI jobs passed |
| [#36](https://github.com/VoltKraft/immich-folder-watch/pull/36) | Microsoft.Data.Sqlite 10.0.10 to 11.0.0 | `4a26baf` | Both native Flatpak builds failed; remaining CI jobs passed |
- CodeQL reports neutral on all ten PRs, not a successful security scan.
Failure causes were not investigated in this status-only check.
- Verified repository auto-merge remains disabled and every PR has
`auto_merge: null` and no merge timestamp. No remote mutation, rerun or merge.
- Next action: investigate failed jobs and review compatibility/licenses before
any separately authorized merge. Evidence is saved in a local documentation commit.
## First Dependabot run check (2026-11-10, 19:24 Europe/Berlin)
- Read-only GitHub inspection requested; no update PR was modified or merged.
- [GitHub Actions updater](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42874487560)
completed successfully. The first [NuGet updater](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42874487345)
is still running; no NuGet update PR exists at this snapshot.
- Created five open PRs: [#27](https://github.com/VoltKraft/immich-folder-watch/pull/27)
download-artifact 7.0.0 to 8.0.2;
[#28](https://github.com/VoltKraft/immich-folder-watch/pull/28)
upload-artifact 6.0.0 to 7.0.2;
[#29](https://github.com/VoltKraft/immich-folder-watch/pull/29)
deploy-pages 4.0.5 to 5.0.1;
[#30](https://github.com/VoltKraft/immich-folder-watch/pull/30)
configure-pages 5.0.0 to 6.0.0;
[#31](https://github.com/VoltKraft/immich-folder-watch/pull/31)
setup-node 6.5.0 to 7.1.0. All are major-version proposals requiring review.
- PR CI is queued/running for all five; no failed check is reported at this
snapshot. Packaging lint passed for #27/#29/#30. The successful updater run
does not establish upgrade compatibility or completed PR CI.
- Verified repository `allow_auto_merge: false`, with `auto_merge: null` and
no merge timestamp on all five PRs. No remote mutation was performed.
- Next action: recheck NuGet completion and PR CI, then review compatibility and
licensing before any separately authorized merge. This check is recorded locally.
## Dependabot PR #36 license correction (2026-11-10)
- Scope: fix the existing Microsoft.Data.Sqlite 11.0.0 update PR's Flatpak CI
failure without merging, changing product versions or weakening license checks.
- Baseline: `4a26baf`; both native Flatpak jobs stopped at the exact-version
supplemental notice guard for Microsoft.Data.Sqlite.
- Inspected Microsoft.Data.Sqlite and Microsoft.Data.Sqlite.Core 11.0.0 archives:
both declare MIT at the same recorded `dotnet/dotnet` revision and omit license
text. Added an immutable version-specific MIT source and exact catalog entries;
updated the top-level third-party summary. Native SQLite dependencies remain
unchanged. Provenance is recorded in
[the license review](../packaging/flatpak/licenses/README.md#microsoftdatasqlite-1100-review-2026-11-10).
- Validation: exact Flatpak SDK 10.0.401 restored Linux x64 and ARM64 into isolated
caches. The generator's official-source/SHA-512 checks passed for the combined
81-archive feed; the real license installer passed, and both new supplemental
outputs match the upstream SHA-256. All 15 notice-installer regression tests
passed, including rejection of unknown versions and modified notices.
- No application code changed. The existing Windows/Linux application CI passed
before this metadata correction; actual native Flatpak rerun is still required.
- Next action: commit/push this correction to PR #36 and verify both native jobs.
No PR has been merged and no release or live Immich operation was performed.
## Dependabot PR #35 compatibility repair (2026-11-10)
- User requested investigation and correction of failed Dependabot CI without
merging. This worktree repairs PR #35 from `820cc9f` and retains its compatible
xUnit 2.9.3 and Visual Studio runner 4.0.1 updates.
- Root causes: xUnit v3 framework 4.0.3 rejects the old assembly parallelism
property, enables MTP v2 incompatible with the current .NET 10 VSTest command,
and changes the extension ABI used by Avalonia.Headless.XUnit 12.0.3.
A diagnostic `mtp-off`/new-parallelism experiment compiled but failed discovery
for all 15 Avalonia GUI cases (`MissingMethodException`); 38 other tests passed.
- Correction: retain GUI framework 3.2.2 and its serial assembly setup, defer
Dependabot `xunit.v3` proposals >=4 until a compatible bridge and runner path
are validated, and use the predicate overload of `Assert.Single` for the newer
xUnit v2 analyzer. No test was disabled or removed; no application code changed.
- License evidence: official NuGet package metadata for xUnit 2.9.3 and Visual
Studio runner 4.0.1 declares Apache-2.0 with immutable source commits documented
in the Linux test README. These test-only packages are AGPL-3.0-only compatible
and do not enter application distribution artifacts.
- Validation: Release Linux GUI/protocol suite passed all 53 tests and the portable
Core suite passed all 481 tests, with no failures/skips, using SDK 10.0.203,
isolated headless controls and local D-Bus. Builds reported no warnings/errors.
Dependabot schema, local documentation links and diff whitespace checks passed.
- Next action: verify Windows/full CI on the corrected PR head. No merge or live
Immich operation is authorized or performed.
## Dependabot PR #33 license correction (2026-11-10)
- Scope: fix the existing Microsoft.Extensions 11.0.0 update PR's Flatpak CI
failure without merging, changing product versions or weakening license checks.
- Baseline: `7fb5e63`; both native Flatpak jobs stopped at the exact-version
supplemental notice guard, beginning with Microsoft.Extensions.Configuration.
- Reviewed all 32 changed Microsoft.Extensions/System 11.0.0 archives in the
resolved feed against their recorded `dotnet/dotnet` source revision. Added
version-specific MIT provenance and exact catalog entries, including four new
transitive System packages. All upstream third-party notices are retained.
Detailed source/hash and license-delta evidence is in
[the license review](../packaging/flatpak/licenses/README.md#microsoftextensions-1100-review-2026-11-10).
- Validation: exact Flatpak SDK 10.0.401 restored Linux x64 and ARM64 into isolated
caches. The generator's official-source/SHA-512 checks passed for the combined
87-archive feed; the real license installer passed and all 32 updated license
and notice outputs matched reviewed SHA-256 values. All 15 notice-installer
regression tests passed, including rejection of unknown versions/tampering.
- No application code changed. The existing Windows/Linux application CI passed
before this metadata correction; actual native Flatpak rerun is still required.
- Next action: commit/push this correction to PR #33 and verify both native jobs.
No PR has been merged and no release or live Immich operation was performed.
## Dependabot PR #27 CI correction (2026-11-10)
- User authorized investigating/fixing existing PR #27 without merging. Its
Windows CI failed `Sync_IgnoresExcludedFileDeletionsButPropagatesMediaDeletion`
because one asset appeared twice in the trash requests.
- Cause: watcher and polling handlers both read the mapping before asynchronous
tombstone persistence removed it. A per-path in-progress claim now gives one
handler ownership until completion, including exceptional exits. Polling keeps
missing mappings while a deletion is active or failed, preserving retryability.
- Added deterministic concurrent watcher/poll tests with paused persistence and
injected persistence failure. Both assertions failed against the original
production code; the initial guard passed the full 483-test Core suite.
After independent review identified the polling retry gap, the corrected delta
passed all five focused deletion cases (including the original three cases).
- Independent source review found no remaining actionable issue; handle-bound
absence checks and watcher shutdown draining remain unchanged. Initial restricted
MSBuild attempts failed without compiler diagnostics; permitted local runs passed.
- The updated download-artifact SHA retains the upstream MIT license, verified
at `9000827ccba6bdab643e8b6fd33ac0654aef8333`. No dependency is added by this fix.
- Next action: push this correction to the existing PR and verify Windows/Linux
and native Flatpak CI on its exact head. No merge, release or live Immich access.
## Dependabot activation (2026-11-10)
- Selected milestone: `M-DEPENDABOT-20261110`, extended by explicit user request
to activate security alerts/updates and push configuration while disabling auto-merge.
- Starting state: clean local `main` at `8c8bab8`; remote default branch `main`
remains at `64a9892`. API readback: vulnerability alerts enabled (HTTP 204),
automated security fixes disabled/unpaused, repository `allow_auto_merge: true`.
- DB-AC04: Complete. Pushed configuration commit `8c8bab8` to `main` without
force; GitHub's branch SHA and decoded `.github/dependabot.yml` content match
the local commit/file. Security alerts were already enabled and remain enabled
(HTTP 204). Enabled automated security fixes and independently read back
`enabled: true`, `paused: false`. Disabled repository auto-merge and independently
verified `allow_auto_merge: false`.
- Hosted evidence: GitHub queued the first [NuGet update run](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42874487345)
and [GitHub Actions update run](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42874487560)
for `8c8bab8`. Automatic NuGet dependency submission started. No Dependabot PRs
existed at the check; no package upgrade or merge was performed.
- Checks: Remote content comparison and settings readback passed. Configuration
retains the prior schema/coverage/review evidence. Application sources, versions
and workflows are unchanged; no additional local runtime tests were needed.
- Next action: Review generated dependency/security PRs with the existing license
and platform CI requirements. The initial bot runs and push CI are queued/running;
their completion is not claimed. Activation is complete; no further milestone selected.
## Dependabot implementation (2026-11-10)
The following records the local checkpoint before the authorized activation above.
- Selected milestone: `M-DEPENDABOT-20261110`; local implementation complete.
- Baseline: clean local `main` at `64a9892`, whose merge commit includes PR #26
and version-preparation commit `f7fef40`. The older version checkpoint below
predates that merge; this task does not recheck release publication.
- Scope: NuGet and GitHub Actions configuration and maintenance documentation;
no package updates, push, repository-setting changes or publication.
- DB-AC01: `.github/dependabot.yml` covers all nine tracked C# project manifests
and all six GitHub Actions workflows. Related NuGet packages have family groups;
each ecosystem checks weekly with at most five open version-update PRs.
- DB-AC02: PyYAML parsing and validation against the downloaded SchemaStore
Dependabot 2.0 JSON Schema passed. Manifest coverage, 59 local documentation link
targets and `git diff --check` passed. Independent review found no actionable
issue in configuration, existing read-only PR CI or publication boundaries.
- DB-AC03: Development guidance, project brief, AGENTS and Unreleased changelog
updated. The local checkpoint hash is provided in the chat handoff.
- Validation limits: No hosted Dependabot run, package upgrade, application build
or runtime test was performed; application sources and workflows are unchanged.
Initial sandbox download failed DNS resolution; permitted schema download passed.
An obsolete upstream NuGet fetcher URL returned 404; review used current upstream
C# discovery source instead. No production operation was attempted.
- Next action: when publication is authorized, push the checkpoint to the default
branch through the normal review process and inspect the first hosted Dependabot
jobs/PRs. Security-update repository settings were not changed or verified.
No further milestone or Goal was started.
## Version preparation checkpoint (2026-11-10)
- Active milestone: `M-VERSION-MERGE-20261110`; version metadata prepared and
locally verified. CI and the authorized merge follow this checkpoint.
- User authorized updating the version and then merging existing PR #26, replacing
the earlier no-merge instruction. The normal automatic release pipeline follows
successful main CI; publication must be verified separately.
- Baseline: clean branch at `225ce88631f376dee34aebe6480607d0b8da48ea`, matching
origin; main remains `26a0de519ee4f7eae2e556b8da7726539d578594`.
- Current-head CI `42760864837` is successful after rerunning only the lint job
that exceeded six hours during Ubuntu package retrieval. All six jobs are green.
- Selected version: `3.0.0`, because HTTPS-by-default requires migration of existing
HTTP configuration. GitHub's latest published release is `v2.11.3`; no `v3.*`
tag exists in the refreshed repository.
- Validation: canonical product/assembly/file versions, changelog date and exact
generated AppStream content agree; AppStream offline validation and diff checks
pass. Linux application build/analyzers pass with 0 warnings/errors. Independent
review found no version/packaging blocker; remote `v3.0.0` is absent.
- Next action: validate all six CI jobs on the version-preparation commit, mark
PR #26 ready and merge the exact validated head. The authoritative external
state is the [PR checks and merge record](https://github.com/VoltKraft/immich-folder-watch/pull/26)
and [release workflow](https://github.com/VoltKraft/immich-folder-watch/actions/workflows/release.yaml);
this source checkpoint does not claim later publication. No new Goal was started.
## Directory race follow-up (2026-11-10)
The following records the completed remediation handoff before merge authorization.
- Selected milestone: `M-WATCH-ROOT-ATOMICITY-20261110`; complete. All six CI jobs
pass on `a188722`; this final handoff changes documentation only.
- Baseline: clean local and remote PR head `d922bfa86df14408185e811e230167705354dc7c`.
PR #26 is open, draft, unmerged, targeting `main`; existing branch is reused.
- Implementation checkpoint: `b1d2eee` pushed to the existing PR; initial CI
exposed Windows-specific native call and test-fixture issues, corrected below.
`eaccd17` corrects native Windows calls; `a188722` completes junction fixtures.
- User scope: completely close the remaining watch-directory race, with subagents
and regression tests in the same PR. No merge or release.
- Ownership: native filesystem abstraction and platform tests; worker/API integration;
independent security review. Parent owns records, integration checks and commits.
- WR-AC01: Pinned native Linux/Windows filesystem primitives and worker/API
integration cover enumeration, absence, reads, downloads, exact-file cleanup,
timestamps and both ends of directory moves. Roots outlive callbacks/retries.
- WR-AC02: Linux local and CI validation and Windows x64 runtime CI pass.
Capability checks fail closed. The [watch-root contract](watch-root-security.md)
documents retained Linux containers, bounded cache and Windows sharing locks.
- WR-AC03: 33 added regression cases (20 native, 5 API, 8 worker), including
deterministic root/parent/leaf changes, same-fingerprint replacement cleanup,
legacy content IDs, journal recovery, remote cleanup and shutdown lifetime.
- WR-AC04: Independent review found no remaining actionable source issue after
corrections for identity, bounded handle caching, stale cleanup/album authority,
retries and lifecycle. Implementation and tests are pushed to the same PR.
Documentation and PR evidence are updated. All six application/packaging jobs
pass, including native x86_64 and aarch64 builds/validation.
- Next action: review PR #26 and arrange an exact-commit Security Cloud scan when
supported. No further implementation milestone selected. PR remains draft and
unmerged; no release or stable repository publication occurred.
- Goal controls: no new Goal requested or started; prior run remains historical.
### Directory race validation (2026-11-10)
| Check | Result | Limits |
| --- | --- | --- |
| Portable Core suite | 481 passed, 0 failed/skipped | Linux x86_64, SDK 10.0.203; final album-cache revocation delta then passed 10 targeted album/security cases |
| Native focused suite | 20 passed, including LRU eviction with active leases and exclusive writer locks | Windows cases also pass in current CI; Linux-only cases retain platform scope |
| Linux GUI/protocol suite | 53 passed, 0 failed/skipped | Headless/local sockets and D-Bus; no live Immich |
| Linux application build/analyzers | Passed, 0 warnings/errors | Debug; generated branding remains ignored |
| Independent source review | Passed with no remaining actionable finding | Windows/UNC and ARM64 runtime are separate evidence requirements |
| Diagnostic full run | 468 passed / 4 failed before corrections | Fixed Linux writer-lock handling, retained-container assertions and friendly write-permission errors; subsequent full run passed |
| [Initial follow-up CI 42758835923](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42758835923) | Linux application tests/build and packaging lint passed. Windows build passed, Core 434 passed / 38 failed / 9 skipped; WPF 36 passed and Linux-project tests 34 passed / 19 skipped | Corrected explicit SYNCHRONIZE access, native handle-relative rename, junction command quoting and portable test path. Independent delta review and 20 focused Linux cases pass; Windows rerun required |
| [Windows correction CI 42759557792](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42759557792) at `eaccd17` | Native production failures resolved; Core 470 passed / 2 failed / 9 skipped; WPF 36 passed and Linux-project tests 34 passed / 19 skipped | Two junction test bodies passed but their recursive fixture cleanup failed; explicit nonrecursive junction cleanup is required before the final rerun |
| [Final CI 42760114840](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42760114840) at `a188722` | All six jobs passed. Windows: Core 472 passed / 9 platform skips, WPF 36 passed, Linux-project 34 passed / 19 platform skips, PowerShell security 7 passed. Linux: Core 481 passed and GUI/protocol 53 passed. Both builds 0 warnings/errors; lint, candidate preparation and native x86_64/aarch64 builds/validation passed | Actual UNC/ARM64 app runtime remains untested; the final documentation-only checkpoint does not change the validated code/tests |
| Repository handoff | Diff whitespace checks and 102 local documentation links passed; reviewed staged files contain no generated outputs | All scoped changes remain in the existing PR; no merge |
| Security Cloud rescan | Not executed; exposed connector still has no branch/commit selector | No finding was marked closed in the service; exact-commit scan remains outstanding |
## Previous security remediation handoff (2026-11-09)
This section records the earlier partial handoff; the follow-up above supersedes
its filesystem disposition and next action.
- Milestone: `M-SECURITY-REMEDIATION-20261109`; remediation pass delivered in draft PR #26, with one explicitly open residual finding.
- Goal run: requested and executed in chat `01a1c1ee-b279-76d2-8529-eaf116140007`, created
2026-11-09; criteria SEC-AC01 through SEC-AC05 fixed in the selected brief. The user later
explicitly reaffirmed subagent use; focused implementation and independent reviews
were used. Completion permits explicitly documented unresolved findings. The remediation
assignment is delivered; the filesystem finding remains explicitly open and
the PR is not ready to merge.
- Baseline: refreshed `origin/main`, `26a0de519ee4f7eae2e556b8da7726539d578594`;
initially clean. Working branch: `security/remediate-all-findings`.
- Discovery: 14 new findings (11 medium, 3 low) from completed repository scan
`wfr_1cb38532afa4dc13e4acdc43f5953f4ebd3b4308486bbadb640050a3194de7fb`,
target `3d41ef56b524b7acfa11559859fc0c7dab0daa73`, completed 2026-10-03.
Direct repository-filtered finding lists returned zero; querying the exact scan
returned all 14 with no further cursor. Full details contain no proposed patches.
- Workstreams: CI/publication credentials, API/transfer bounds, local config/runtime
security and HTTPS policy, watch-root and remote-album authorization.
- User approved HTTPS-by-default with explicit HTTP exception and `xhigh` rescan.
- Checkpoints: `a303e95` contains reviewed CI hardening; `6e1a781` contains
application remediation; `cf290b6` corrects the Windows SQLite fixture cleanup. All are pushed to the single
[draft PR #26](https://github.com/VoltKraft/immich-folder-watch/pull/26), targeting `main`.
No merge or release was performed.
- Current disposition: 13 findings addressed in code; one partially addressed
(`csf_77f3e84ec9b70e5aff765235`, concurrent watch-directory replacement).
Full mapping, compatibility changes and residual risks are in
[the remediation record](security-remediation-20261109.md).
- Independent reviewers checked CI trust, native Linux storage, REST/download
bounds, realtime adapters and album authority. Review-driven corrections cover
redirect/buffering in SocketIO and stale authority after failed/offline/rapid
folder renames. No remaining actionable issue in those reviewed fixes; the
acknowledged handle-bound filesystem gap remains open.
- Next action: review the single PR; retain draft status until the open filesystem
race is resolved and exact-commit security validation can be arranged. All six CI jobs passed on `cf290b6`; this final handoff updates documentation only.
No additional milestone was selected.
### Security validation (2026-11-09)
| Check | Result | Limits |
| --- | --- | --- |
| Portable Core tests | 448 passed on final combined rerun; 0 failed/skipped | .NET 10.0.203 selected by `global.json`; Linux x86_64 |
| Linux GUI/protocol tests | 53 passed | Isolated headless UI, local sockets and D-Bus; no live Immich |
| Linux app build/analyzers | Passed, 0 warnings/errors | Debug build; generated branding not committed |
| Tooling/packaging | 97 Python tests passed, including real PowerShell security scripts and isolated signed Flatpak repository tests | Synthetic keys/artifacts only; no publication |
| Workflow validation | actionlint 1.7.12 passed; YAML parsed; independent CI review passed | No release/WinGet/Flathub dispatch executed |
| Filesystem/album security | Linked entries, ownership scope/restart, exact-ID and stale-ID handling covered | Path checks are not race-proof; Windows reparse/runtime acceptance outstanding |
| Rescan | Not executed: exposed Cloud connector has no documented PR branch/commit selector; no UI available and PR security-review feature disabled | Unchanged-main scan would not validate this branch; arrange exact-commit scan when supported |
| GitHub CI `42693673854` at `6e1a781` | Linux build/tests and packaging lint passed. Windows build passed with 0 warnings/errors; test job exposed pooled SQLite handles in the new ownership test cleanup | Added the repository-standard pool clearing after awaited operations; rerun passed in `42694315680`; Windows-specific 36 tests also passed |
| [GitHub CI `42694315680`](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42694315680) at `cf290b6` | All six jobs passed: Windows/Linux application checks, packaging lint, candidate preparation, and native x86_64/aarch64 packages. Windows: Core 439 passed / 9 platform skips; Windows-specific 36 passed; Linux-project tests 34 passed / 19 platform skips; full solution build 0 warnings/errors; 7 PowerShell security tests passed | Both native x86_64 and aarch64 candidate builds/validation and artifact uploads passed; actual ARM64/UNC app runtime not exercised |
| Superseded native run | Earlier x86_64 candidate could not fetch its replaced synthetic PR merge commit after a new push | No source/compiler failure; current run is authoritative |
| Native runtime limits | Actual ARM64/UNC runtime remains unavailable | Native ABI source inspection and package compilation do not establish runtime behavior |
| Worker follow-up | 54 passed, 1 existing test raced SQLite persistence; moved its database assertion after durable completion and worker stop; final combined rerun passed | No product behavior was changed to satisfy the timing assertion |
| Initial sandbox attempts | VSTest socket and GPG-agent startup were denied; approved isolated reruns passed | Environment failures were not counted as passing tests |
| Repository diff | `git diff --check` passed; 79 local documentation paths checked with no missing targets; final staged artifact review passed | Only task-owned sources/docs/tests are staged |
## Previous completed distribution handoff
- Template cleanup: Completed 2026-10-16. Initialized workflow records for the
established project; preserved its README, implementation, product documents,
and history. Do not repeat initialization cleanup.
- Last updated: 2026-11-07 (Europe/Berlin).
- State / scope: `M-FLATPAK-PAGES-20261107` complete. The signed repository is
live at .
- Implementation revision: `48e6be14ccf508385c4b1796842010c09e2d1fb4`, pushed to
`main`; product version and published bundle inputs remain `2.11.3`.
- Latest verified result: [Pages workflow 42412670753](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42412670753)
succeeded. Both live descriptors work, and isolated Flatpak clients downloaded
both complete architecture refs with commit and summary verification enabled.
- Authorization / execution: The user explicitly approved the signing-key upload,
push and Pages activation on 2026-11-07 after the initial automatic approval
rejection. The secret and fingerprint variable are configured, Pages uses
Actions with HTTPS, and its environment allows branch `main` and tags `v*`.
- Next concrete action: No remaining distribution setup. Future stable releases
dispatch the repository workflow automatically. Preserve the signing-key backup;
select any subsequent product milestone separately.
- Required input: None.
## Historical distribution Goal reference
- Goal requested for this assignment: No. No Goal was started.
- Actual Goal state in another chat: Not inspected; this document neither activates
nor transfers a run. Query actual Goal controls if a continuation refers to one.
- Selected Goal milestone / criteria snapshot / budget: Not applicable.
## Progress and evidence
| Milestone / criteria | Status | Evidence / remaining work |
| --- | --- | --- |
| `M-TEMPLATE-MIGRATION-20261016`, `TM-AC01` through `TM-AC04` | Verified | Guarded apply and preservation/static checks passed; see historical validation record and local recovery bundle |
| `M-FLATPAK-PAGES-20261107`, `FP-AC01`/`02`/`03`/`05` | Verified | Implementation, real signed bundles, regression tests, review and docs complete |
| `M-FLATPAK-PAGES-20261107`, `FP-AC04` | Verified | Explicitly authorized setup and Pages deployment succeeded; live descriptors, both architecture downloads and signature verification passed |
## Flatpak distribution validation (2026-11-07)
| Check | Result / evidence | Limits |
| --- | --- | --- |
| Existing release inputs | GitHub API confirmed stable `v2.11.3`; x64 bundle 34,198,880 bytes, ARM64 bundle 30,983,120 bytes | Existing release assets were read/downloaded, not changed |
| Real repository generation | Both bundles imported and signed with fingerprint `4ED65AC1C14D559C721C7A8B44B33451708EAD7D`; complete site is about 87 MiB on disk at ignored `artifacts/flatpak-pages-preview/` | Local staging only; no Pages deployment |
| Real client discovery | Isolated `flatpak remote-add` with public key and `remote-info` resolved x86_64 commit `bdcfdb3e896ca6be8c9d0b93e5947884711e2c56da1da3a6cecbfcbe89200bcf` and aarch64 commit `86250534e754a0fa6c2d0ab1236bf87e862599416f0871d979e424ced402e30b` | No installation in the real user profile, runtime download or app execution |
| Python tooling tests | `python3 -m unittest discover -s tools/tests -p 'test_*.py' -v`: 90 passed, including seven new repository tests | Initial sandbox run failed because gpg-agent sockets were denied; rerun with approved isolated local execution passed |
| Repository integration regression checks | Signed multiarchitecture import, updates after complete repo replacement, unsigned-summary rejection, `.flatpakref` client consumption, malformed input/branch and size-limit rejection all passed | Synthetic fixture updates; real app update across published Pages versions not yet observed |
| Workflows and review | All workflow YAML parses; actionlint passed for all workflows; independent read-only review found no actionable defects; `git diff --check` passed | Pages workflow succeeded; environment permits `main` and release tags `v*` |
| New action licenses | Official upstream MIT licenses verified for configure-pages, upload-pages-artifact and deploy-pages | CI-only additions; no application dependencies changed |
| Remote activation | Completed after explicit consent: `FLATPAK_GPG_PRIVATE_KEY` Actions secret, matching `FLATPAK_GPG_KEY_ID` variable, Pages `build_type=workflow`, HTTPS enforced, environment branch `main` / tag `v*` | Private key never printed or committed; previous rejection is resolved |
| Pages publication | Build and deployment both succeeded in [run 42412670753](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42412670753) from `48e6be1` | Publishes existing `v2.11.3` assets; no product release or tag was created |
| Live HTTPS endpoints | HTTP 200 for index, `.flatpakrepo`, `.flatpakref`, public key, repo config, summary and summary signature | Evidence saved locally in ignored `artifacts/flatpak-pages-live-verification.json` |
| Live client verification | Fresh isolated `.flatpakrepo` client resolves both expected commits; a separate `.flatpakref` client downloads complete x86_64 and aarch64 apps from Pages, with `gpg-verify=true` and `gpg-verify-summary=true` | Used `--no-deps --no-related --no-deploy`; no real-user installation, runtime download or application execution; future-version update remains covered by the local integration regression test |
| GitHub packaging CI | `Lint Flatpak packaging` passed in [run 42412671037](https://github.com/VoltKraft/immich-folder-watch/actions/runs/42412671037), including repository tests | Broader application tests and native candidate builds were still running at handoff; no application code changed |
| Local application/desktop/Immich tests | Not run | Distribution-only change; live distribution was verified without application execution |
## Historical migration validation record
| Check | Result / evidence | Limits |
| --- | --- | --- |
| Initial Git state | Clean at migration baseline `3d41ef56b524b7acfa11559859fc0c7dab0daa73`; inspected with `git --no-optional-locks -C status --porcelain=v2 --branch --untracked-files=all` and both working/staged diffs | Local refs only; no fetch |
| Old agent provenance | All 37 old `.codex` tracked files match template commit `fe6db7f7e7e65f076b5dc0706fc6d46eba6de14b` | Confirms no target-specific profile customizations |
| Applied Markdown links, TOML, scoped diff, content preservation | Passed: 11 Markdown files, 90 local links/anchors, 35 TOML files / 34 roles; 298 unaffected original files retain identical SHA-256 hashes. Reports: local `inspection-after.json` and `integrity.json` in the recovery bundle. | Static checks; ignored artifacts, nested checkouts, and runtime data are outside the content manifest |
| Application builds/tests, packaging, desktop checks, live Immich | Not run for this documentation/configuration-only assignment | No runtime, UI, sync, installer, or service validation implied |
| Existing QA reports | Retained as historical evidence at their original revisions | Migration does not renew their sign-offs or fill blank acceptance rows |
## Open questions and blockers
| ID | Question / missing prerequisite | Impact and next action |
| --- | --- | --- |
| IFW-Q01 | Resolved: GitHub Pages Flatpak distribution selected on 2026-11-07. | See `M-FLATPAK-PAGES-20261107`. |
| IFW-Q04 | Resolved: explicit user consent received; secret upload, push, Pages activation and live validation completed. | No remaining activation blocker. |
| IFW-Q02 | Older README/architecture summaries call Flatpak tray support disabled, while detailed architecture, parity notes, and later changelog describe restricted tray integration. Some QA labels also predate current modes. | Pre-existing documentation discrepancy, outside this migration. Reconcile against code and actual desktop evidence in a separately selected task; do not infer runtime behavior from either summary. |
| IFW-Q03 | Native desktop acceptance and actual Flathub publication are not established by the inspected historical preparation record. | Keep the existing QA boundaries; verify only when the corresponding task and environment are authorized. |
## Completion and next handoff
- Historical workflow migration is complete at `4afa9f4`; recovery evidence remains
in [the migration record](template-migration.md).
- `FP-AC01` through `FP-AC05` are complete; local and live evidence is recorded above.
- Deliverables: Repository generator/tests, Pages workflow and release dispatch,
public signing key, installation/migration/operations documentation and CI wiring.
- Private recovery key: ignored `artifacts/flatpak-signing/private-key.asc`, mode
0600 inside a mode-0700 directory. Public key only is included in Git.
- Checkpoint: Implementation `48e6be1` is published; this completion record and
installation-document updates are saved in a separate documentation checkpoint,
whose hash is recorded in the chat handoff. No version/tag change.