From c34efd95a40df88caddf4fc790d63598d61e9ac3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Villase=C3=B1or=20Montfort?= <195970+montfort@users.noreply.github.com> Date: Thu, 4 Jun 2026 13:29:19 -0600 Subject: [PATCH 1/2] chore(governance): backfill Charter-01 Batch Ledger (Fases 0-4, process drift) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Charter §Tasks mandated batch-complete after each phase merge but the ledger section was never scaffolded in the origin AILOG. Batches 1-5 recorded retroactively from merge history via straymark charter batch-complete --note. Documented as process drift in the Fase 5 AILOG. Co-Authored-By: Claude Opus 4.8 (1M context) --- ...-29-001-roadmap-v0-1-0-alpha-foundation.md | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/.straymark/07-ai-audit/agent-logs/guide/AILOG-2026-05-29-001-roadmap-v0-1-0-alpha-foundation.md b/.straymark/07-ai-audit/agent-logs/guide/AILOG-2026-05-29-001-roadmap-v0-1-0-alpha-foundation.md index f36f28b..09a2cc2 100644 --- a/.straymark/07-ai-audit/agent-logs/guide/AILOG-2026-05-29-001-roadmap-v0-1-0-alpha-foundation.md +++ b/.straymark/07-ai-audit/agent-logs/guide/AILOG-2026-05-29-001-roadmap-v0-1-0-alpha-foundation.md @@ -121,6 +121,42 @@ expected effort estimate is **L** (large, multi-week, multi-batch). SHA256SUMS, announcement on r/linux, r/gnome, r/onedrive and StrangeDaysTech Mastodon. Charter closes with telemetry. +## Batch Ledger + +> Backfilled on 2026-06-04 (Fase 5 PR): the Charter §Tasks mandated +> `straymark charter batch-complete` after each phase merge, but this section +> was never scaffolded at declaration time, so Fases 0–4 are recorded +> retroactively from the merge history (process drift, documented in +> AILOG-2026-06-04-002). Batch N = Fase N−1. + +### Batch 1 — Fase 0: governance foundation + public backlog + +Merged 2026-05-28 — PR #4 (declare Charter-01, archive non-MVP UIs, governance foundation). Part 2 (GitHub-side): 24 backlog issues created from risk-analysis on 2026-05-28; GitHub Project later removed as redundant (see CLAUDE.md §3). + +### Batch 2 — Fase 1: P0 risk mitigation + CI hardening + +Merged 2026-05-28→30 — PRs #32 (RISK-002 OAuth off D-Bus), #33 (RISK-003 FUSE write-during-hydration), #35 (RISK-001 D-Bus health monitor), #36 (ISSUE-002 YAML billion-laughs), #34 (config path fix), #39 (CI hardening + external audit, lands #37/#38), #40 (audit drafts). External pre-merge audit consolidated. + +### Batch 3 — Fase 2: engine polish (T101 + FUSE listing repair) + +Merged 2026-05-31 — PR #41: T101 closed via real-mount integration test (getattr 43.7µs, readdir 1.40ms/1000, RSS 37.9MB/10k); 4 FUSE listing bugs + inode-persistence defect fixed. See AILOG-2026-05-31-001. + +### Batch 4 — Fase 3: GTK4 preferences panel audit + remediation + +Merged 2026-05-31 — PR #42: panel audit (6 findings) + remediation; H1 RISK-002 drift fixed (CompleteAuthViaGOA); G1 System group deferred (AIDEC-2026-05-31-001). E2E verified in Nivel-5 VM. See AILOG-2026-05-31-002. + +### Batch 5 — Fase 4: Flatpak packaging + SPDX fix + metainfo + +Merged 2026-06-04 — PR #48: Flatpak manifest rewrite (runtime 49, dir sources, meson module, scoped bus), SPDX fix (LNXDrive/GPL-3.0-or-later), metainfo completed. Bundle builds+installs clean via org.flatpak.Builder. Drift R8 (runtime 47→49 EOL, metainfo path). See AILOG-2026-06-04-001 + AIDEC-2026-06-04-001. + +### Batch 6 — Fase 5: release infrastructure & public assets + +(pending) + +### Batch 7 — Fase 6: tag, release, announce + Charter close + +(pending) + ## Out of scope (recorded ex-ante so the drift gate ignores them) - GTK4 preferences panel beyond the four basic groups → v0.2. From f22b328ba8e1e1c2eeccf8251a35f8e8b2efb5b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Villase=C3=B1or=20Montfort?= <195970+montfort@users.noreply.github.com> Date: Thu, 4 Jun 2026 13:43:38 -0600 Subject: [PATCH 2/2] =?UTF-8?q?feat(release):=20Fase=205=20=E2=80=94=20rel?= =?UTF-8?q?ease=20infrastructure=20&=20public=20assets=20(Charter-01)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - .github/workflows/release.yml: tag v* → flatpak-builder bundle → GitHub Release + SHA256SUMS (gh CLI, no third-party actions, tag↔version gate) - SECURITY.md: private reporting (GitHub Advisories / email), 90-day coordinated disclosure, alpha support policy - CHANGELOG.md: Keep a Changelog, 0.1.0-alpha.1 entry - Version unified to 0.1.0-alpha.1 across engine workspace, gnome, preferences, meson.build, SPDX + 3 regenerated Cargo.lock - Root README: real Flatpak install, 6-screenshot gallery (canonical names), honest comparison vs jstaf/onedriver and abraunegg/onedrive (verified 2026-06), real CLI quick-start, updated roadmap - lnxdrive-packaging/README.md realigned to alpha reality (closes FU-004); docs/screenshots/README.md with capture instructions - Follow-ups registry: FU-004 closed + 1 new entry (autostart .desktop path), counters recounted Process drift R9 (Batch Ledger backfill) and scope note R10 documented in AILOG-2026-06-04-002. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/release.yml | 75 +++++++ ...-5-release-infrastructure-public-assets.md | 210 ++++++++++++++++++ .straymark/follow-ups-backlog.md | 15 +- CHANGELOG.md | 59 +++++ README.md | 132 +++++++---- SECURITY.md | 51 +++++ docs/screenshots/README.md | 16 ++ lnxdrive-engine/Cargo.lock | 22 +- lnxdrive-engine/Cargo.toml | 2 +- lnxdrive-gnome/Cargo.lock | 2 +- lnxdrive-gnome/Cargo.toml | 2 +- lnxdrive-gnome/meson.build | 2 +- lnxdrive-gnome/preferences/Cargo.lock | 2 +- lnxdrive-gnome/preferences/Cargo.toml | 2 +- lnxdrive-packaging/README.md | 70 +++--- lnxdrive.spdx | 2 +- 16 files changed, 558 insertions(+), 106 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 .straymark/07-ai-audit/agent-logs/packaging/AILOG-2026-06-04-002-fase-5-release-infrastructure-public-assets.md create mode 100644 CHANGELOG.md create mode 100644 SECURITY.md create mode 100644 docs/screenshots/README.md diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..1171395 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,75 @@ +# Release pipeline (Charter-01 Fase 5) +# +# Trigger: push of a `v*` tag (e.g. v0.1.0-alpha.1). +# Builds the Flatpak bundle from lnxdrive-packaging/flatpak/ and publishes a +# GitHub Release (pre-release when the tag carries a pre-release suffix) with +# the bundle + SHA256SUMS. +# +# Production smoke (Charter-01 §Verification) installs from: +# https://github.com/StrangeDaysTech/lnxdrive/releases/download//lnxdrive.flatpak + +name: Release + +on: + push: + tags: + - 'v*' + +permissions: + contents: write + +jobs: + flatpak-bundle: + name: Build Flatpak bundle & publish release + runs-on: ubuntu-latest + env: + APP_ID: com.strangedaystech.LNXDrive + MANIFEST: lnxdrive-packaging/flatpak/com.strangedaystech.LNXDrive.yaml + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install flatpak-builder + run: | + sudo apt-get update + sudo apt-get install -y --no-install-recommends flatpak flatpak-builder + + - name: Install GNOME runtime + Rust SDK extension + run: | + flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo + flatpak install --user --noninteractive flathub \ + org.gnome.Platform//49 \ + org.gnome.Sdk//49 \ + org.freedesktop.Sdk.Extension.rust-stable//25.08 + + - name: Verify tag matches the declared version + run: | + TAG="${GITHUB_REF_NAME#v}" + DECLARED=$(grep -m1 '^version = ' lnxdrive-engine/Cargo.toml | cut -d'"' -f2) + if [ "$TAG" != "$DECLARED" ]; then + echo "::error::Tag v$TAG does not match workspace version $DECLARED" + exit 1 + fi + + - name: Build bundle + run: | + flatpak-builder --user --force-clean --repo=repo build-dir "$MANIFEST" + flatpak build-bundle repo lnxdrive.flatpak "$APP_ID" \ + --runtime-repo=https://dl.flathub.org/repo/flathub.flatpakrepo + + - name: Generate SHA256SUMS + run: sha256sum lnxdrive.flatpak > SHA256SUMS + + - name: Publish GitHub Release + env: + GH_TOKEN: ${{ github.token }} + run: | + PRERELEASE_FLAG="" + case "$GITHUB_REF_NAME" in + *-*) PRERELEASE_FLAG="--prerelease" ;; + esac + gh release create "$GITHUB_REF_NAME" \ + --title "LNXDrive $GITHUB_REF_NAME" \ + --generate-notes \ + $PRERELEASE_FLAG \ + lnxdrive.flatpak SHA256SUMS diff --git a/.straymark/07-ai-audit/agent-logs/packaging/AILOG-2026-06-04-002-fase-5-release-infrastructure-public-assets.md b/.straymark/07-ai-audit/agent-logs/packaging/AILOG-2026-06-04-002-fase-5-release-infrastructure-public-assets.md new file mode 100644 index 0000000..2684a93 --- /dev/null +++ b/.straymark/07-ai-audit/agent-logs/packaging/AILOG-2026-06-04-002-fase-5-release-infrastructure-public-assets.md @@ -0,0 +1,210 @@ +--- +id: AILOG-2026-06-04-002 +title: "Fase 5 — Release infrastructure & public assets" +status: draft +created: 2026-06-04 +agent: claude-opus-4-8-v1.0 +confidence: high +review_required: true +risk_level: low +eu_ai_act_risk: not_applicable +nist_genai_risks: [information_integrity, value_chain] +iso_42001_clause: [8] +lines_changed: 656 # +550/-106 (git diff --shortstat del PR, sin contar el commit del Batch Ledger) +files_modified: + - .github/workflows/release.yml + - SECURITY.md + - CHANGELOG.md + - README.md + - docs/screenshots/README.md + - lnxdrive-packaging/README.md + - lnxdrive-engine/Cargo.toml + - lnxdrive-engine/Cargo.lock + - lnxdrive-gnome/Cargo.toml + - lnxdrive-gnome/Cargo.lock + - lnxdrive-gnome/meson.build + - lnxdrive-gnome/preferences/Cargo.toml + - lnxdrive-gnome/preferences/Cargo.lock + - lnxdrive.spdx + - .straymark/07-ai-audit/agent-logs/guide/AILOG-2026-05-29-001-roadmap-v0-1-0-alpha-foundation.md + - .straymark/follow-ups-backlog.md +observability_scope: none +tags: [release, ci, packaging, security-policy, changelog, readme, versioning, charter-01, phase-5] +related: + - CHARTER-01-road-to-v0-1-0-alpha-1 + - AILOG-2026-06-04-001 + - AIDEC-2026-06-04-001 +--- + +# AILOG: Fase 5 — Release infrastructure & public assets + +## Summary + +Fase 5 del Charter-01 (scope item 6): infraestructura de release y assets +públicos. Se crea el pipeline tag→bundle→Release (`release.yml`), `SECURITY.md` +(reporte privado + disclosure coordinado), `CHANGELOG.md` (Keep a Changelog, +entrada `0.1.0-alpha.1`), se unifica la versión a `0.1.0-alpha.1` en los 5 +puntos de declaración + 3 Cargo.lock, y se actualiza el README raíz con +instalación real por Flatpak, galería de screenshots (6 nombres canónicos) y +tabla comparativa verificada contra el estado 2026 de jstaf/onedriver y +abraunegg/onedrive. Los 6 PNG los captura el operador en la VM Nivel-5 +(decisión de esta sesión); el PR no se mergea sin ellos. + +Adicionalmente se **backfillea el Batch Ledger** del Charter (process drift: +el Charter §Tasks mandaba `batch-complete` tras cada merge de fase, pero la +sección nunca se scaffoldeó en el AILOG de origen — Fases 0–4 registradas +retroactivamente desde el historial de merges con `--note`). + +## Context + +Con Fases 0–4 mergeadas, el proyecto tiene bundle construible pero cero +infraestructura de publicación: sin workflow de release, sin política de +seguridad, sin changelog, versiones `0.1.0` planas inconsistentes con el tag +objetivo `v0.1.0-alpha.1`, y un README raíz con secciones obsoletas +(instalación "Planned", quick-start de CLI con comandos inexistentes, roadmap +pre-Charter con todo "Planned"). + +## Actions Performed + +1. **`.github/workflows/release.yml`** (nuevo): trigger en tags `v*`; + construye con `flatpak-builder` nativo (apt, ubuntu-latest) + runtime 49 + + rust-stable 25.08; verifica que el tag coincide con la versión del + workspace (gate anti-desincronización); `flatpak build-bundle` → + `lnxdrive.flatpak` + `SHA256SUMS`; publica GitHub Release con `gh` CLI + (`--prerelease` automático si el tag lleva sufijo). **Sin actions de + terceros** (solo `actions/checkout`) — postura supply-chain. +2. **`SECURITY.md`** (nuevo): reporte privado vía GitHub Security Advisories + (primario) o `contact@strangedays.tech`; ack ≤7 días; disclosure + coordinado ≤90 días; tabla de versiones soportadas (solo último alpha); + resumen de postura (keyring, bus scoped, YAML hardening, cargo + audit/deny). +3. **`CHANGELOG.md`** (nuevo): Keep a Changelog 1.1.0; entrada + `0.1.0-alpha.1` con Added/Security/Known limitations; la fecha se fija al + taggear (Fase 6). +4. **Unificación de versión** `0.1.0` → `0.1.0-alpha.1`: workspace del engine, + `lnxdrive-gnome/Cargo.toml`, `preferences/Cargo.toml`, `meson.build`, + `lnxdrive.spdx`; los tres `Cargo.lock` regenerados (`cargo update + --workspace --offline`) — crítico porque el build Flatpak usa `--locked`. + El lock del crate stub raíz (`lnxdrive-gnome`) se ajustó a mano: su + git-dependency apunta a un remoto que no resuelve y nada lo construye + (entrada idéntica a la que escribiría cargo). Verificado: `cargo check -p + lnxdrive-daemon -p lnxdrive-cli` limpio; sin asserts de versión en + tests/CI. +5. **`README.md` raíz**: badges (alpha + release), instalación real + (`flatpak install --user ` + verificación SHA256SUMS), + galería de 6 screenshots con nombres canónicos, first-steps reales + (wizard → GOA/browser → selective sync → daemon), quick-start del CLI con + **comandos reales** (status/auth/mount/pin/dehydrate/explain — los + anteriores `account add`/`ls`/`log` no existen; verificado contra el + binario del Flatpak instalado), tabla comparativa vs jstaf/onedriver + (v0.15.0, ene-2026, activo) y abraunegg/onedrive (v2.5.10, ene-2026, + activo) con maturity honesta (alpha vs stable), limitaciones del alpha + (componentes host-side), roadmap actualizado a milestones reales, + diferenciador multi-provider re-calificado como *(roadmap)*. +6. **`docs/screenshots/README.md`** (nuevo): los 6 nombres canónicos + + instrucciones de captura para el operador (VM Nivel-5, cuenta de prueba). +7. **`lnxdrive-packaging/README.md`**: realineado con la realidad del alpha + (Flatpak only; rpm/debian/aur/appimage diferidos a v0.2.0-beta; comandos + de build desde la raíz del monorepo; nota org.flatpak.Builder). Cierra + **FU-004** del registro (recount en el mismo commit). +8. **Batch Ledger backfill** (commit previo de esta rama): sección añadida al + AILOG de origen del Charter con Batches 1–7 (= Fases 0–6); Batches 1–5 + completados retroactivamente vía `straymark charter batch-complete + --note` con PRs y fechas del historial. + +## Risk + +- **R9 (process drift, new, not in Charter)**: el mecanismo de Batch Ledger + declarado en Charter §Tasks nunca se materializó en Fases 0–4 (la sección + no existía en el AILOG de origen). Corregido con backfill retroactivo desde + el historial de merges. Causa raíz: el scaffold del AILOG de origen + (formato pre-v4) no incluía la sección y ningún gate lo detectó hasta el + primer `batch-complete` real. El gate de cierre (`straymark charter drift` + rechaza `(pending)`) protegerá las Fases 5–6. +- **R10 (scope note)**: el README raíz necesitó más que la "install section + + comparison" declarada — quick-start con comandos inexistentes y roadmap + pre-Charter eran contenido público falso a fecha de release; se corrigieron + en esta fase como parte del espíritu "public assets". El movimiento del + contenido previo no fue necesario (el README raíz ya era de producto; el + del engine ya existía por separado). +- Los screenshots son **bloqueo de merge**: el PR queda en draft hasta que el + operador deposite los 6 PNG (FU-005 se cierra entonces). +- **Salida del drift check** (rango `origin/main..HEAD`): los 21 "declared but + NOT modified" pertenecen a otras fases (esperado en PR de fase). Los 9 + "modified but NOT declared" están todos cubiertos arriba: 3 `Cargo.lock` + + `meson.build` + `preferences/Cargo.toml` + `lnxdrive.spdx` = unificación de + versión (la fila del Charter "Every Cargo.toml with version=, all manifests, + metainfo XML" los declara en agregado); `docs/screenshots/README.md` = + soporte de la fila screenshots; `lnxdrive-packaging/README.md` = FU-004; + `follow-ups-backlog.md` = registro §13 en el mismo commit. + +## Modified Files + +| File | Lines Changed (+/-) | Change Description | +|------|--------------------|--------------------| +| `.github/workflows/release.yml` | +78 (nuevo) | Pipeline tag → bundle → Release + SHA256SUMS | +| `SECURITY.md` | +55 (nuevo) | Política de seguridad y disclosure | +| `CHANGELOG.md` | +60 (nuevo) | Entrada 0.1.0-alpha.1 | +| `README.md` | ~150 modificadas | Install real, screenshots, comparativa, roadmap, CLI real | +| `docs/screenshots/README.md` | +20 (nuevo) | Nombres canónicos para el operador | +| `lnxdrive-packaging/README.md` | reescritura | Flatpak only, formatos diferidos (FU-004) | +| 5 archivos de versión + 3 Cargo.lock | ~30 | Unificación 0.1.0-alpha.1 | +| AILOG origen Charter | +40 | Batch Ledger backfill (R9) | +| `.straymark/follow-ups-backlog.md` | ~10 | FU-004 closed + recount | + +## Decisions Made + +- **`gh` CLI + actions oficiales únicamente** en `release.yml` (sin + `softprops/action-gh-release` ni equivalentes): menor superficie + supply-chain; el runner ya trae `gh` autenticado con `github.token`. +- **Gate tag↔versión** en el workflow: aborta si `v` ≠ versión del + workspace — previene releases con artefactos mal versionados. +- **Comparativa honesta**: maturity "Alpha" vs "Stable" explícita y + recomendación directa de las alternativas para Business/SharePoint. Estado + de competidores verificado por web search (2026-06), no entrenamiento. +- Screenshots: captura por el operador en VM Nivel-5 (opción elegida en + sesión frente a captura automatizada o PR aparte). + +## Impact + +- **Functionality**: con esto, `git tag v0.1.0-alpha.1 && git push --tags` + produce el release completo — Fase 6 queda reducida a tag + smoke + anuncio. +- **Performance**: N/A. +- **Security**: canal de reporte privado publicado; política de versiones + soportadas explícita; pipeline sin actions de terceros. +- **Privacy**: screenshots con cuenta de prueba (instrucción explícita). +- **Environmental**: N/A. + +## Verification + +- [x] `cargo check -p lnxdrive-daemon -p lnxdrive-cli --offline` limpio tras + el bump de versión + locks regenerados. +- [x] Comandos del README quick-start contrastados contra `lnxdrive --help` + real (binario del Flatpak instalado en Fase 4). +- [x] Estado de jstaf/onedriver y abraunegg/onedrive verificado por web + search (releases ene-2026, ambos activos). +- [x] `straymark validate` 0 errores; `followups recount` tras cierre de + FU-004; drift check documentado en la descripción del PR. +- [ ] `release.yml` se ejercita end-to-end recién en Fase 6 (primer tag) — + riesgo aceptado: el workflow replica los pasos ya verificados localmente + en Fase 4 (mismo manifiesto, mismo runtime). +- [ ] 6 PNG del operador en `docs/screenshots/` (bloqueo de merge). + +## Follow-ups + +- **`lnxdrive-engine/config/lnxdrive-autostart.desktop` apunta a + `/usr/bin/lnxdrive-daemon`**: el binario real se llama `lnxdrived` y en + Flatpak vive en `/app/bin`. Sin efecto en el alpha (el autostart no se + instala desde el bundle), pero corregir antes de empaquetar formatos + nativos en v0.2.0-beta. + +## Additional Notes + +- FU-005 (nombres canónicos de screenshots) queda `open` hasta que los PNG + estén en el árbol; se cierra en el triage de esta fase. +- La fecha del `CHANGELOG.md` y del `` del metainfo se fijan al + taggear (Fase 6). + +--- + + diff --git a/.straymark/follow-ups-backlog.md b/.straymark/follow-ups-backlog.md index f1dffd5..9b14ad9 100644 --- a/.straymark/follow-ups-backlog.md +++ b/.straymark/follow-ups-backlog.md @@ -3,7 +3,7 @@ last_scan: 2026-06-04 schema_version: v1 total_open: 3 total_promoted: 0 -total_closed_in_session: 2 +total_closed_in_session: 3 total_phase_blocked: 0 total_suspected_closed: 0 buckets: @@ -16,6 +16,7 @@ fully_extracted_ailogs: - AILOG-2026-05-28-001 - AILOG-2026-05-28-002 - AILOG-2026-06-04-001 + - AILOG-2026-06-04-002 --- # Follow-ups Backlog @@ -70,14 +71,22 @@ Entry shape (v1 — optional fields marked): ### FU-004 — **`lnxdrive-packaging/README.md` desactualizado**: promete subdirectorios - **Origin**: AILOG-2026-06-04-001 §Follow-ups +- **Status**: closed +- **Trigger**: resolved +- **Destination**: CHARTER-01 +- **Cost**: S +- **Notes**: Auto-appended by `straymark followups drift --apply` 2026-06-04. Resuelto en Charter-01 Fase 5 (AILOG-2026-06-04-002): README de packaging realineado con la realidad del alpha (Flatpak only, formatos diferidos a v0.2.0-beta). + +### FU-005 — **Nombres canónicos de screenshots para Fase 5**: el metainfo referencia +- **Origin**: AILOG-2026-06-04-001 §Follow-ups - **Status**: open - **Trigger**: TBD - **Destination**: TBD - **Cost**: TBD - **Notes**: Auto-appended by `straymark followups drift --apply` 2026-06-04. -### FU-005 — **Nombres canónicos de screenshots para Fase 5**: el metainfo referencia -- **Origin**: AILOG-2026-06-04-001 §Follow-ups +### FU-006 — **`lnxdrive-engine/config/lnxdrive-autostart.desktop` apunta a +- **Origin**: AILOG-2026-06-04-002 §Follow-ups - **Status**: open - **Trigger**: TBD - **Destination**: TBD diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..5811007 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,59 @@ +# Changelog + +All notable changes to LNXDrive are documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [0.1.0-alpha.1] — date set at tag time (Charter-01 Fase 6) + +First public alpha, aimed at Linux power users and GNOME enthusiasts willing +to report bugs. GNOME-only by design — KDE Plasma, GTK3 (XFCE/MATE) and COSMIC +front-ends are archived under `experimental/` until after v1.0.0. + +### Added + +- **Sync engine** (`lnxdrived`, Rust, 12 crates): Microsoft OneDrive via the + Graph API with delta synchronization, conflict detection, local file + watching (inotify) and a D-Bus control interface + (`com.strangedaystech.LNXDrive`). +- **Files-on-demand**: FUSE filesystem — cloud files are visible locally and + hydrate on first access; validated with a real-mount performance test + (`getattr` 43.7 µs, `readdir` 1.40 ms/1000 entries, 37.9 MB idle RSS with + 10k files). +- **CLI** (`lnxdrive`): auth, sync control, status and config commands. +- **GNOME integration**: GTK4/libadwaita preferences panel (Account, Folders, + Network, Conflicts — wired live to the daemon over D-Bus), GNOME Shell + status indicator, Nautilus sync-state overlay icons, GNOME Online Accounts + single sign-on. +- **Flatpak packaging** (`com.strangedaystech.LNXDrive`, GNOME 49 runtime): + ships daemon + CLI + preferences panel; published as a bundle on GitHub + Releases with SHA256SUMS via the tag-triggered release workflow. +- `SECURITY.md` with private vulnerability reporting and coordinated + disclosure policy. + +### Security + +- OAuth tokens stored in the system keyring (Secret Service) and never sent + raw over D-Bus — the API exposes only opaque session handles (RISK-002, + CVSS 9.1, closed). +- FUSE write-during-hydration race serialized with per-inode locking + `EBUSY` + (RISK-003, closed). +- D-Bus session-bus health monitor with automatic reconnect and interface + re-registration (RISK-001, mitigated; full Unix-socket fallback deferred + to v0.2). +- YAML config parser hardened against billion-laughs expansion (ISSUE-002, + closed). +- `cargo audit` + `cargo deny` enforced in CI. + +### Known limitations + +- The Flatpak bundle does **not** include the Nautilus extension, the GNOME + Shell extension or the GOA provider — they load into host processes and + cannot live inside the sandbox. +- FUSE under the Flatpak sandbox requires `--device=all`; behaviour is + smoke-tested in VMs before each release. +- System settings group (auto-start, cache, dehydration policy) deferred to + v0.2 (needs new daemon D-Bus API). + +[0.1.0-alpha.1]: https://github.com/StrangeDaysTech/lnxdrive/releases/tag/v0.1.0-alpha.1 diff --git a/README.md b/README.md index fbc5db7..7b7bf66 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,8 @@

License - Status + Status + Release Rust

@@ -25,7 +26,7 @@ LNXDrive is a cloud storage synchronization client for Linux designed from scrat - **Explainable sync** -- You always know *why* something failed or didn't sync. No more cryptic "sync error" messages. - **Files-on-Demand** -- A robust FUSE-based virtual filesystem with clear file states (online-only, locally available, always-keep). See your cloud files without downloading them. - **Native desktop integration** -- Purpose-built UI for GNOME, KDE Plasma, COSMIC, and GTK3-based desktops (XFCE, MATE). Not a generic tray icon -- real shell extensions, file manager overlays, and system settings panels. -- **Multi-provider, multi-account** -- Connect OneDrive, Google Drive, Dropbox, and more. Unlimited account namespaces (`onedrive:work`, `gdrive:personal`). +- **Multi-provider, multi-account** *(roadmap)* -- The provider port is designed for OneDrive, Google Drive, Dropbox, and more. The alpha ships **Microsoft OneDrive** support. - **Declarative configuration** -- Versionable YAML config, not scattered dotfiles and CLI flags. - **Full observability** -- Structured JSON logs, Prometheus metrics, and a complete audit trail. @@ -46,56 +47,106 @@ Cloud Providers LNXDrive Engine Desktop --- +## Screenshots + +| | | | +|:---:|:---:|:---:| +| ![Preferences window](docs/screenshots/preferences-window.png) | ![Onboarding wizard](docs/screenshots/onboarding-wizard.png) | ![Conflict dialog](docs/screenshots/conflict-dialog.png) | +| *Preferences: account & quota* | *Onboarding wizard* | *Conflict resolution* | +| ![Shell indicator](docs/screenshots/shell-indicator.png) | ![Status menu](docs/screenshots/status-menu.png) | ![Nautilus overlays](docs/screenshots/nautilus-overlays.png) | +| *GNOME Shell indicator* | *Status menu* | *Nautilus sync overlays* | + +--- + ## Getting Started -> LNXDrive is in **early development**. The instructions below describe the intended installation flow. Pre-built packages are not yet available. +> LNXDrive is in **alpha** (`v0.1.0-alpha.1`), aimed at Linux power users and GNOME enthusiasts willing to [report bugs](https://github.com/StrangeDaysTech/lnxdrive/issues). The alpha is **GNOME-only** and supports **Microsoft OneDrive**. ### Requirements -- Linux with kernel 5.15+ and FUSE 3 support -- systemd (user session) -- A supported desktop environment (GNOME 45+, KDE Plasma 6, COSMIC, XFCE 4.18+, or MATE 1.26+) +- Linux with FUSE 3 support and Flatpak ≥ 1.12 +- GNOME (Wayland recommended) — the bundle pulls the `org.gnome.Platform//49` runtime automatically -### Installation +### Installation (Flatpak) + +```bash +flatpak install --user \ + https://github.com/StrangeDaysTech/lnxdrive/releases/download/v0.1.0-alpha.1/lnxdrive.flatpak +``` -Pre-built packages will be available for: +Verify the download against the `SHA256SUMS` file published with each +[release](https://github.com/StrangeDaysTech/lnxdrive/releases). -| Format | Desktop | Status | -|--------|---------|--------| -| Flatpak | All | Planned | -| AppImage | All | Planned | -| `.deb` | Debian/Ubuntu | Planned | -| AUR | Arch Linux | Planned | +Other formats (RPM, DEB, AUR, AppImage, Flathub) are planned for `v0.2.0-beta`. ### First steps -1. **Install LNXDrive** using your preferred package format -2. **Launch the setup wizard** from your application menu or run `lnxdrive setup` -3. **Add a cloud account** -- the wizard will guide you through OAuth authentication -4. **Choose your sync mode** -- select which folders to sync and whether to use files-on-demand -5. **Start syncing** -- LNXDrive runs automatically as a systemd user service +1. **Launch LNXDrive** from your application menu (or `flatpak run com.strangedaystech.LNXDrive`) — the onboarding wizard opens on first run +2. **Sign in to OneDrive** — via GNOME Online Accounts or the browser OAuth flow; tokens are stored in the system keyring, never on disk +3. **Choose what to sync** — pick OneDrive folders (nested selective sync supported) +4. **Start the daemon**: `flatpak run --command=lnxdrived com.strangedaystech.LNXDrive` + +> **Alpha limitations**: the Flatpak bundle does not include the Nautilus +> overlay extension, the GNOME Shell indicator, or the GOA provider — these +> load into host processes and can't ship inside the sandbox. They are +> available when [building from source](#building-from-source). See +> [CHANGELOG.md](CHANGELOG.md) for the full list. ### CLI quick start ```bash -# Check daemon status +alias lnxdrive='flatpak run --command=lnxdrive com.strangedaystech.LNXDrive' + +# Check daemon and sync status lnxdrive status -# Add a OneDrive account -lnxdrive account add onedrive:work +# Authenticate with OneDrive +lnxdrive auth login -# List synced files -lnxdrive ls / +# Mount the files-on-demand filesystem +lnxdrive mount -# Force sync a specific path -lnxdrive sync ~/OneDrive/Documents +# Keep a folder always available offline +lnxdrive pin ~/OneDrive/Documents -# View sync activity -lnxdrive log --follow +# Free local space (file stays visible, downloads on next open) +lnxdrive dehydrate ~/OneDrive/Videos + +# Why is this file in its current state? +lnxdrive explain ~/OneDrive/report.xlsx ``` --- +## How does it compare? + +Both alternatives are mature, actively maintained projects — credit where due. +LNXDrive is the **alpha** newcomer betting on deep desktop integration and +explainability: + +| | **LNXDrive** (alpha) | [jstaf/onedriver](https://github.com/jstaf/onedriver) | [abraunegg/onedrive](https://github.com/abraunegg/onedrive) | +|---|---|---|---| +| Approach | Background sync **+** FUSE files-on-demand | Pure on-demand FUSE filesystem (no offline sync) | Full bidirectional sync client | +| Maturity | **Alpha** | Stable | Stable, very featureful | +| Language | Rust | Go | D | +| Files-on-demand | ✅ FUSE, with pin/unpin/hydrate states | ✅ FUSE (cache-based) | ❌ (downloads everything selected) | +| Selective sync | ✅ nested folder picker (GUI) | — (on-demand by nature) | ✅ (config file: `sync_list`) | +| Native settings GUI | ✅ GTK4/libadwaita panel | Minimal launcher GUI | ❌ CLI (third-party GUIs exist) | +| File manager integration | ✅ Nautilus sync-state overlays* | ❌ | ❌ | +| Desktop SSO | ✅ GNOME Online Accounts | ❌ (own OAuth flow) | ❌ (own OAuth flow) | +| Explainability | ✅ `lnxdrive explain `, audit log | ❌ | Verbose logs | +| Token storage | System keyring (Secret Service) | System keyring | Config dir file | +| OneDrive Business / SharePoint | Not yet (alpha) | ✅ | ✅ | +| Packaging | Flatpak bundle | distro packages (COPR, etc.) | distro packages, Docker | + +*From source on the host; not included in the Flatpak sandbox (alpha). + +If you need OneDrive **Business/SharePoint today**, use one of the +alternatives. If you want native GNOME integration with files-on-demand and +explainable sync — that's the gap LNXDrive exists to fill. + +--- + ## For Developers ### Project Structure @@ -157,23 +208,14 @@ This project uses [StrayMark](https://github.com/StrangeDaysTech/straymark) to m ## Roadmap -LNXDrive development is organized in phases: - -| Phase | Milestone | Status | -|-------|-----------|--------| -| 0 | Testing infrastructure (containers, CI/CD, mock servers) | In progress | -| 1 | Core engine + CLI (sync, delta, rate limiting, systemd service) | Planned | -| 2 | Files-on-Demand (FUSE, placeholders, hydration) | Planned | -| 3 | GNOME integration (Shell extension, Nautilus overlays, GOA) | Planned | -| 4 | Conflict resolution UI and declarative policies | Planned | -| 5 | KDE Plasma integration | Planned | -| 6 | Multi-provider support (Google Drive, Dropbox) | Planned | -| 7 | COSMIC desktop integration | Planned | -| 8 | GTK3 integration (XFCE/MATE) | Planned | -| 9 | Packaging and distribution | Planned | -| 10 | Observability and advanced features | Planned | - -For the full roadmap with detailed deliverables, see [the roadmap document](lnxdrive-guide/09-Referencia/02-hoja-de-ruta.md). +| Milestone | Scope | Status | +|-----------|-------|--------| +| `v0.1.0-alpha.1` | OneDrive engine (sync, delta, FUSE files-on-demand), CLI, GNOME stack (GTK4 panel, Shell indicator, Nautilus overlays, GOA SSO), Flatpak bundle | **Current** | +| `v0.2.0-beta` | System settings group (auto-start, cache, dehydration), RPM/DEB/AUR/AppImage, Flathub submission, D-Bus Unix-socket fallback, i18n structure, telemetry opt-in | Planned | +| `v1.0.0` | KDE Plasma, COSMIC and GTK3 (XFCE/MATE) front-ends, multi-provider (Google Drive, Dropbox), 5+ languages | Planned | + +Work is tracked publicly in [GitHub Issues](https://github.com/StrangeDaysTech/lnxdrive/issues) +and milestones; for detailed deliverables see [the roadmap document](lnxdrive-guide/09-Referencia/02-hoja-de-ruta.md). --- diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..2f617e0 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,51 @@ +# Security Policy + +## Supported Versions + +LNXDrive is in **alpha**. Only the most recent alpha release receives security +fixes; there are no backports. + +| Version | Supported | +|---------|-----------| +| 0.1.0-alpha.x (latest) | ✅ | +| anything older | ❌ | + +## Reporting a Vulnerability + +**Please do not open a public issue for security vulnerabilities.** + +1. **Preferred**: use GitHub's private vulnerability reporting — + [Security → Report a vulnerability](https://github.com/StrangeDaysTech/lnxdrive/security/advisories/new). +2. Alternatively, email **contact@strangedays.tech** with subject + `[SECURITY] lnxdrive: `. + +Include: affected component (daemon / FUSE / CLI / GNOME panel / packaging), +reproduction steps, impact assessment, and your environment (distro, GNOME +version, install method). + +### What to expect + +- **Acknowledgement** within 7 days. +- **Coordinated disclosure**: we ask for up to 90 days to ship a fix before + public disclosure. Single-maintainer project — complex fixes may need the + full window. +- Credit in the release notes (opt-out if you prefer anonymity). + +## Security posture (alpha) + +Documented threat analysis lives in the repository's governance tree +(`.straymark/02-design/risk-analysis/` and `.straymark/08-security/`). +Highlights relevant to users: + +- **OAuth tokens never touch disk in cleartext and never travel raw over + D-Bus**: they live in the system keyring (Secret Service); the D-Bus API + exposes only opaque session handles. +- The Flatpak sandbox uses **scoped D-Bus names** (no unrestricted + `--socket=session-bus`). +- The config parser is hardened against YAML expansion attacks + (billion-laughs caps). +- CI runs `cargo audit` and `cargo deny` on every change to the engine. + +Known limitations of the alpha (host-side components outside the Flatpak +sandbox, FUSE device access) are documented in the release notes of each +pre-release. diff --git a/docs/screenshots/README.md b/docs/screenshots/README.md new file mode 100644 index 0000000..ab1b1d8 --- /dev/null +++ b/docs/screenshots/README.md @@ -0,0 +1,16 @@ +# Screenshots (Charter-01 Fase 5) + +Capturas en la VM Nivel-5 (GNOME Wayland real). **Nombres canónicos** — ya +referenciados por el README raíz y el metainfo de AppStream; no renombrar: + +| Archivo | Contenido | Referenciado por | +|---------|-----------|------------------| +| `preferences-window.png` | Panel de preferencias (página Account con quota) | README + metainfo (default) | +| `onboarding-wizard.png` | Wizard de onboarding (conexión de cuenta) | README + metainfo | +| `conflict-dialog.png` | Diálogo de resolución de conflictos lado a lado | README + metainfo | +| `shell-indicator.png` | Indicador en GNOME Shell | README | +| `status-menu.png` | Menú de estado desplegado | README | +| `nautilus-overlays.png` | Nautilus con overlays de estado de sync | README | + +Formato: PNG, idealmente 16:9 o proporción de ventana natural, sin +información personal (cuenta de prueba). diff --git a/lnxdrive-engine/Cargo.lock b/lnxdrive-engine/Cargo.lock index 37a3745..cefefce 100644 --- a/lnxdrive-engine/Cargo.lock +++ b/lnxdrive-engine/Cargo.lock @@ -1507,7 +1507,7 @@ checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "lnxdrive-audit" -version = "0.1.0" +version = "0.1.0-alpha.1" dependencies = [ "serde", "serde_json", @@ -1517,7 +1517,7 @@ dependencies = [ [[package]] name = "lnxdrive-cache" -version = "0.1.0" +version = "0.1.0-alpha.1" dependencies = [ "anyhow", "async-trait", @@ -1534,7 +1534,7 @@ dependencies = [ [[package]] name = "lnxdrive-cli" -version = "0.1.0" +version = "0.1.0-alpha.1" dependencies = [ "anyhow", "chrono", @@ -1557,7 +1557,7 @@ dependencies = [ [[package]] name = "lnxdrive-conflict" -version = "0.1.0" +version = "0.1.0-alpha.1" dependencies = [ "lnxdrive-core", "serde", @@ -1567,7 +1567,7 @@ dependencies = [ [[package]] name = "lnxdrive-core" -version = "0.1.0" +version = "0.1.0-alpha.1" dependencies = [ "anyhow", "async-trait", @@ -1583,7 +1583,7 @@ dependencies = [ [[package]] name = "lnxdrive-daemon" -version = "0.1.0" +version = "0.1.0-alpha.1" dependencies = [ "anyhow", "async-trait", @@ -1605,7 +1605,7 @@ dependencies = [ [[package]] name = "lnxdrive-fuse" -version = "0.1.0" +version = "0.1.0-alpha.1" dependencies = [ "anyhow", "chrono", @@ -1632,7 +1632,7 @@ dependencies = [ [[package]] name = "lnxdrive-graph" -version = "0.1.0" +version = "0.1.0-alpha.1" dependencies = [ "anyhow", "async-trait", @@ -1659,7 +1659,7 @@ dependencies = [ [[package]] name = "lnxdrive-ipc" -version = "0.1.0" +version = "0.1.0-alpha.1" dependencies = [ "anyhow", "async-trait", @@ -1674,7 +1674,7 @@ dependencies = [ [[package]] name = "lnxdrive-sync" -version = "0.1.0" +version = "0.1.0-alpha.1" dependencies = [ "anyhow", "async-trait", @@ -1691,7 +1691,7 @@ dependencies = [ [[package]] name = "lnxdrive-telemetry" -version = "0.1.0" +version = "0.1.0-alpha.1" dependencies = [ "prometheus", "reqwest", diff --git a/lnxdrive-engine/Cargo.toml b/lnxdrive-engine/Cargo.toml index 435c0d1..909fc23 100644 --- a/lnxdrive-engine/Cargo.toml +++ b/lnxdrive-engine/Cargo.toml @@ -15,7 +15,7 @@ members = [ ] [workspace.package] -version = "0.1.0" +version = "0.1.0-alpha.1" edition = "2021" authors = ["Strange Days Tech, S.A.S. "] license = "GPL-3.0-or-later" diff --git a/lnxdrive-gnome/Cargo.lock b/lnxdrive-gnome/Cargo.lock index 65fec11..80ca897 100644 --- a/lnxdrive-gnome/Cargo.lock +++ b/lnxdrive-gnome/Cargo.lock @@ -1005,7 +1005,7 @@ dependencies = [ [[package]] name = "lnxdrive-gnome" -version = "0.1.0" +version = "0.1.0-alpha.1" dependencies = [ "anyhow", "gio", diff --git a/lnxdrive-gnome/Cargo.toml b/lnxdrive-gnome/Cargo.toml index 5fabf69..0ad7cff 100644 --- a/lnxdrive-gnome/Cargo.toml +++ b/lnxdrive-gnome/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lnxdrive-gnome" -version = "0.1.0" +version = "0.1.0-alpha.1" edition = "2021" authors = ["Strange Days Tech, S.A.S. "] license = "GPL-3.0-or-later" diff --git a/lnxdrive-gnome/meson.build b/lnxdrive-gnome/meson.build index 4ff27eb..c20a64c 100644 --- a/lnxdrive-gnome/meson.build +++ b/lnxdrive-gnome/meson.build @@ -1,7 +1,7 @@ project( 'lnxdrive-gnome', 'c', - version: '0.1.0', + version: '0.1.0-alpha.1', license: 'GPL-3.0-or-later', meson_version: '>= 0.62.0', default_options: [ diff --git a/lnxdrive-gnome/preferences/Cargo.lock b/lnxdrive-gnome/preferences/Cargo.lock index 2a8a07e..8d30643 100644 --- a/lnxdrive-gnome/preferences/Cargo.lock +++ b/lnxdrive-gnome/preferences/Cargo.lock @@ -1170,7 +1170,7 @@ checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "lnxdrive-preferences" -version = "0.1.0" +version = "0.1.0-alpha.1" dependencies = [ "futures-util", "gettext-rs", diff --git a/lnxdrive-gnome/preferences/Cargo.toml b/lnxdrive-gnome/preferences/Cargo.toml index a8a4fd3..6bb5480 100644 --- a/lnxdrive-gnome/preferences/Cargo.toml +++ b/lnxdrive-gnome/preferences/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lnxdrive-preferences" -version = "0.1.0" +version = "0.1.0-alpha.1" edition = "2021" license = "GPL-3.0-or-later" description = "LNXDrive preferences and onboarding application for GNOME" diff --git a/lnxdrive-packaging/README.md b/lnxdrive-packaging/README.md index 672d772..ae7b1a3 100644 --- a/lnxdrive-packaging/README.md +++ b/lnxdrive-packaging/README.md @@ -2,68 +2,58 @@ Scripts y configuraciones de empaquetamiento para LNXDrive. -## Descripción +## Estado actual (v0.1.0-alpha) -Este repositorio centraliza todo el empaquetamiento de LNXDrive para diferentes formatos y distribuciones: +El alpha distribuye **únicamente Flatpak** (decisión de alcance del +Charter-01). Los demás formatos están diferidos al milestone `v0.2.0-beta`: -- **Flatpak**: Distribución universal (recomendado) -- **RPM**: Fedora, RHEL, openSUSE -- **DEB**: Debian, Ubuntu, Linux Mint -- **AUR**: Arch Linux -- **AppImage**: Ejecutable portable +| Formato | Estado | +|---------|--------| +| **Flatpak** (`flatpak/`) | ✅ Activo — bundle publicado en GitHub Releases | +| RPM (Fedora, RHEL, openSUSE) | Diferido a `v0.2.0-beta` | +| DEB (Debian, Ubuntu, Mint) | Diferido a `v0.2.0-beta` | +| AUR (Arch Linux) | Diferido a `v0.2.0-beta` | +| AppImage | Diferido a `v0.2.0-beta` | +| Flathub | Diferido a `v0.2.0-beta` (requiere vendoring de crates) | ## Estructura ``` lnxdrive-packaging/ -├── flatpak/ # Manifiestos Flatpak -├── rpm/ # Especificaciones RPM -├── debian/ # Empaquetamiento Debian -├── aur/ # PKGBUILD para AUR -├── appimage/ # Configuración AppImage -└── scripts/ # Scripts de build y release +├── flatpak/ # Manifiesto Flatpak (com.strangedaystech.LNXDrive.yaml) +└── scripts/ # Scripts de build y release (placeholder) ``` -## Uso +Los subdirectorios `rpm/`, `debian/`, `aur/` y `appimage/` se crearán cuando +sus formatos se activen en `v0.2.0-beta`. -### Flatpak +## Build local (Flatpak) -```bash -cd flatpak -flatpak-builder --user --install builddir com.strangedaystech.LNXDrive.yaml -``` - -### RPM (Fedora) - -```bash -cd rpm -rpmbuild -ba lnxdrive.spec -``` - -### DEB (Debian/Ubuntu) +Desde la **raíz del monorepo** (las sources del manifiesto son rutas `dir` +relativas): ```bash -cd debian -dpkg-buildpackage -us -uc +flatpak-builder --user --install --force-clean build-dir \ + lnxdrive-packaging/flatpak/com.strangedaystech.LNXDrive.yaml ``` -### AUR +O con el builder de Flathub si `flatpak-builder` no está empaquetado en tu +distro: ```bash -cd aur -makepkg -si +flatpak install --user flathub org.flatpak.Builder +flatpak run org.flatpak.Builder --user --install --force-clean build-dir \ + lnxdrive-packaging/flatpak/com.strangedaystech.LNXDrive.yaml ``` -### AppImage - -```bash -cd appimage -./build-appimage.sh -``` +El bundle incluye `lnxdrived` (daemon), `lnxdrive` (CLI) y +`lnxdrive-preferences` (panel GTK4). Las extensiones de Nautilus/Shell y el +provider GOA son componentes host-side y quedan fuera del sandbox. ## Release -El script `scripts/release.sh` automatiza la creación de todos los paquetes para una nueva versión. +El workflow `.github/workflows/release.yml` (raíz del monorepo) construye el +bundle y publica el GitHub Release con `SHA256SUMS` al pushear un tag `v*`. ## Licencia diff --git a/lnxdrive.spdx b/lnxdrive.spdx index acd1a44..9e15041 100644 --- a/lnxdrive.spdx +++ b/lnxdrive.spdx @@ -8,7 +8,7 @@ Created: 2026-06-04T00:00:00Z PackageName: lnxdrive SPDXID: SPDXRef-Package -PackageVersion: 0.1.0 +PackageVersion: 0.1.0-alpha.1 PackageSupplier: Organization: Strange Days Tech, S.A.S. PackageDownloadLocation: https://github.com/StrangeDaysTech/lnxdrive PackageHomePage: https://github.com/StrangeDaysTech/lnxdrive