diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 65d4c55..52e7978 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,8 +16,8 @@ jobs: steps: - uses: actions/checkout@v4 - run: sudo apt-get update && sudo apt-get install -y appstream desktop-file-utils - - run: appstreamcli validate --no-net data/io.gknowledge.Gknowledge.metainfo.xml - - run: desktop-file-validate data/io.gknowledge.Gknowledge.desktop + - run: appstreamcli validate --no-net data/io.github.openapi.Gknowledge.metainfo.xml + - run: desktop-file-validate data/io.github.openapi.Gknowledge.desktop deb: runs-on: ubuntu-latest steps: @@ -29,11 +29,19 @@ jobs: python3 -c "import gknowledge" 2>/dev/null || PYTHONPATH=/usr/share/gknowledge python3 -c "import gknowledge; print(gknowledge.__version__)" flatpak: runs-on: ubuntu-latest - continue-on-error: true # promote to required once the build is proven green steps: - uses: actions/checkout@v4 - run: | sudo apt-get update && sudo apt-get install -y flatpak flatpak-builder flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo flatpak install --user -y flathub org.gnome.Platform//51 org.gnome.Sdk//51 - - run: flatpak-builder --user --force-clean --repo=repo build-dir build-aux/flatpak/io.gknowledge.Gknowledge.yaml + - run: | + flatpak-builder --user --force-clean --repo=repo build-dir build-aux/flatpak/io.github.openapi.Gknowledge.yaml + flatpak build-bundle --runtime-repo=https://dl.flathub.org/repo/flathub.flatpakrepo \ + repo gknowledge-dev.flatpak io.github.openapi.Gknowledge + # Installable build of every PR: flatpak install --user gknowledge-dev.flatpak + - uses: actions/upload-artifact@v4 + with: + name: gknowledge-flatpak + path: gknowledge-dev.flatpak + retention-days: 14 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 10485fb..38cd522 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,7 +25,6 @@ jobs: flatpak-bundle: needs: deb # avoid two jobs racing to create the same release runs-on: ubuntu-latest - continue-on-error: true steps: - uses: actions/checkout@v4 - run: | @@ -33,8 +32,9 @@ jobs: flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo flatpak install --user -y flathub org.gnome.Platform//51 org.gnome.Sdk//51 - run: | - flatpak-builder --user --force-clean --repo=repo build-dir build-aux/flatpak/io.gknowledge.Gknowledge.yaml - flatpak build-bundle repo gknowledge-${GITHUB_REF_NAME}.flatpak io.gknowledge.Gknowledge + flatpak-builder --user --force-clean --repo=repo build-dir build-aux/flatpak/io.github.openapi.Gknowledge.yaml + flatpak build-bundle --runtime-repo=https://dl.flathub.org/repo/flathub.flatpakrepo \ + repo gknowledge-${GITHUB_REF_NAME}.flatpak io.github.openapi.Gknowledge - uses: softprops/action-gh-release@v2 with: files: gknowledge-*.flatpak diff --git a/CHANGELOG.md b/CHANGELOG.md index 6900e95..f4422d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,26 @@ All notable changes to gknowledge. Dates are release dates. +## 0.3.0 — 2026-10-19 + +**Wiki** +- gknowledge notices when a source's original file changed after it was ingested. The source is marked "changed since ingest", and **Update** takes the new version and extracts it again, so pages stop describing an old version of the document. +- Re-ingest and remove a source; pages backed only by that source are removed, shared pages keep their other sources (thanks @Aaqibhafeezkhan, #30). +- MCP: new `stale_sources` tool, so agents can check the wiki for drift. + +**App** +- Clicking a document in the sidebar opens it, in every section (it only highlighted the row before). +- Preferences: wider dialog; provider and model names are no longer cut off. + +**Packaging** +- New app ID `io.github.openapi.Gknowledge` (was `io.gknowledge.Gknowledge`, a domain we do not own). Flatpak installs from the Pages remote move to the new ID on `flatpak update`, settings included. +- Flatpak: install from the signed remote with `flatpak install --user https://openapi.github.io/gknowledge/io.github.openapi.Gknowledge.flatpakref`; GNOME 51 runtime, no home-folder access (files are opened through portals). +- Flatpak: creating or opening a project in a folder picked with the file chooser failed with "disk I/O error": SQLite's WAL mode cannot run on the document portal. Projects now use a classic journal, and older projects are converted when opened. +- Flatpak: PDF import works (pypdf is now bundled). +- Signed APT repository on GitHub Pages, and a Debian source package. +- `gknowledge-mcp` on PyPI (`uvx gknowledge-mcp`) and in the official MCP registry. +- `make start-flatpak` runs the development loop inside the GNOME runtime. + ## 0.2.2 — 2026-10-13 **Packaging** diff --git a/DISTRIBUTING.md b/DISTRIBUTING.md index dc06a2f..0436e65 100644 --- a/DISTRIBUTING.md +++ b/DISTRIBUTING.md @@ -219,7 +219,7 @@ L'accettazione su Flathub è basata su regole ed è veloce: le cinque app compar |---|---|---| | Runtime "the latest version at that time of submission"; runtime EOL rifiutati | `org.gnome.Platform` **46** | Passare al runtime corrente (Alpaca e Newelle sono su GNOME 50; il Circle ha chiesto ai membri di abbandonare il 49 entro il 10 ottobre 2026) ([requirements](https://docs.flathub.org/docs/for-app-authors/requirements); [Circle #280](https://gitlab.gnome.org/Teams/Circle/-/issues/280)) | | Sorgenti con URL pubblici; "built entirely from source code"; nessun binario nel PR | `sources: type: dir, path: ../..` | Usare `type: git` con tag o `type: archive` con sha256 su una release GitHub; vendorizzare `pypdf` come wheel offline (pattern `flatpak-pip-generator`, come Alpaca) ([manifest Alpaca](https://github.com/flathub/com.jeffser.Alpaca/blob/master/com.jeffser.Alpaca.yml)) | -| ID app: dominio controllato dall'autore con `.well-known/org.flathub.VerifiedApps.txt`, oppure `io.github..` | `io.gknowledge.Gknowledge` | Verificare se il dominio `gknowledge.io` è controllato (serve HTTPS e il token); altrimenti rinominare in `io.github..Gknowledge` prima della sottomissione, perché Flathub rifiuta rinomine subito dopo l'accettazione ([requirements](https://docs.flathub.org/docs/for-app-authors/requirements); [verification](https://docs.flathub.org/docs/for-app-authors/verification)) | +| ID app: dominio controllato dall'autore con `.well-known/org.flathub.VerifiedApps.txt`, oppure `io.github..` | `io.gknowledge.Gknowledge` → **`io.github.openapi.Gknowledge` dalla 0.3.0** (19 ott 2026: gknowledge.io non registrato, openapi.io in vendita; il remote su Pages fa end-of-life-rebase dal vecchio ID) | ~~Verificare se il dominio `gknowledge.io` è controllato (serve HTTPS e il token); altrimenti rinominare in `io.github..Gknowledge` prima della sottomissione~~ fatto; Flathub rifiuta rinomine subito dopo l'accettazione ([requirements](https://docs.flathub.org/docs/for-app-authors/requirements); [verification](https://docs.flathub.org/docs/for-app-authors/verification)) | | MetaInfo valida: screenshot, developer name, licenza, release con data, content rating; "warnings fatal", nessuna eccezione per `appstream-missing-screenshots` e `appstream-missing-developer-name` | metainfo con `summary`, `description`, `project_license` MIT, `content_rating`, una release 0.1.0; **mancano screenshot, `developer`, `url` (homepage, bugtracker), `branding`** | Completare il MetaInfo e validarlo con `flatpak-builder-lint` ([linter](https://docs.flathub.org/docs/for-app-authors/linter)) | | "Static permissions must be kept to an absolute minimum"; portali obbligatori dove esistono | `--filesystem=home` | Vedi 5.4 | | "Applications that have only existed for a very short period of time will generally not be accepted"; solo software stabile | release 0.1.0 datata 2026-07-07 | Sottomettere con una 0.2/0.3 testata, non con l'MVP | diff --git a/Makefile b/Makefile index 5cc5fe2..80ca085 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ # pip's externally-managed environment. Use PREFIX=/usr with sudo for a # system-wide install. -APP_ID := io.gknowledge.Gknowledge +APP_ID := io.github.openapi.Gknowledge PYTHON ?= python3 PREFIX ?= $(HOME)/.local DESTDIR ?= diff --git a/README.es.md b/README.es.md index fd5982a..1cf2ec1 100644 --- a/README.es.md +++ b/README.es.md @@ -1,5 +1,5 @@

- +

gknowledge

@@ -42,7 +42,7 @@ sudo apt update && sudo apt install gknowledge En cualquier distribución, con Flatpak (el runtime de GNOME viene de Flathub): ```bash -flatpak install --user https://openapi.github.io/gknowledge/io.gknowledge.Gknowledge.flatpakref +flatpak install --user https://openapi.github.io/gknowledge/io.github.openapi.Gknowledge.flatpakref ``` ## Pensada para funcionar sin internet diff --git a/README.fr.md b/README.fr.md index 2acce47..294d256 100644 --- a/README.fr.md +++ b/README.fr.md @@ -1,5 +1,5 @@

- +

gknowledge

@@ -42,7 +42,7 @@ sudo apt update && sudo apt install gknowledge Sur n'importe quelle distribution, avec Flatpak (le runtime GNOME vient de Flathub) : ```bash -flatpak install --user https://openapi.github.io/gknowledge/io.gknowledge.Gknowledge.flatpakref +flatpak install --user https://openapi.github.io/gknowledge/io.github.openapi.Gknowledge.flatpakref ``` ## Pensé pour fonctionner sans connexion diff --git a/README.it.md b/README.it.md index 7f37fa8..cdb5a55 100644 --- a/README.it.md +++ b/README.it.md @@ -1,5 +1,5 @@

- +

gknowledge

@@ -42,7 +42,7 @@ sudo apt update && sudo apt install gknowledge Su qualsiasi distribuzione, con Flatpak (il runtime GNOME arriva da Flathub): ```bash -flatpak install --user https://openapi.github.io/gknowledge/io.gknowledge.Gknowledge.flatpakref +flatpak install --user https://openapi.github.io/gknowledge/io.github.openapi.Gknowledge.flatpakref ``` ## Perché gknowledge diff --git a/README.md b/README.md index 2a41bc9..e65478f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- +

gknowledge

@@ -65,12 +65,12 @@ sudo apt update && sudo apt install gknowledge **On any distribution, with Flatpak** (the GNOME runtime comes from Flathub): ```bash -flatpak install --user https://openapi.github.io/gknowledge/io.gknowledge.Gknowledge.flatpakref +flatpak install --user https://openapi.github.io/gknowledge/io.github.openapi.Gknowledge.flatpakref ``` Both repositories are described at [openapi.github.io/gknowledge](https://openapi.github.io/gknowledge). -Then open **gknowledge** from the app grid. To remove it: `sudo apt remove gknowledge` (or `flatpak uninstall io.gknowledge.Gknowledge`). +Then open **gknowledge** from the app grid. To remove it: `sudo apt remove gknowledge` (or `flatpak uninstall io.github.openapi.Gknowledge`).
Other distributions, from source, and release builds diff --git a/README.pt-BR.md b/README.pt-BR.md index 1f5917a..064c9ab 100644 --- a/README.pt-BR.md +++ b/README.pt-BR.md @@ -1,5 +1,5 @@

- +

gknowledge

@@ -42,7 +42,7 @@ sudo apt update && sudo apt install gknowledge Em qualquer distribuição, com Flatpak (o runtime do GNOME vem do Flathub): ```bash -flatpak install --user https://openapi.github.io/gknowledge/io.gknowledge.Gknowledge.flatpakref +flatpak install --user https://openapi.github.io/gknowledge/io.github.openapi.Gknowledge.flatpakref ``` ## Feito para funcionar sem internet diff --git a/README.zh-CN.md b/README.zh-CN.md index 9c06de3..0b14e29 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -1,5 +1,5 @@

- +

gknowledge

@@ -42,7 +42,7 @@ sudo apt update && sudo apt install gknowledge 任意发行版,使用 Flatpak(GNOME 运行时自动从 Flathub 安装): ```bash -flatpak install --user https://openapi.github.io/gknowledge/io.gknowledge.Gknowledge.flatpakref +flatpak install --user https://openapi.github.io/gknowledge/io.github.openapi.Gknowledge.flatpakref ``` ## 为什么选择 gknowledge diff --git a/TODO.md b/TODO.md index 158bb77..9b1c83a 100644 --- a/TODO.md +++ b/TODO.md @@ -9,12 +9,13 @@ Source: [comment by Justin (@fromthearchitect)](https://dev.to/fromthearchitect/ Flatpak (the `.deb` and `install.sh` do nothing for Fedora, Arch or openSUSE users) - [x] Flatpak build is green in CI (`appstreamcli compose` succeeds since the GNOME 51 bump); every release attaches a bundle and `repos.yml` publishes the remote at `openapi.github.io/gknowledge` (closes #24). - [x] `flatpak install --user https://openapi.github.io/gknowledge/io.gknowledge.Gknowledge.flatpakref` works on Ubuntu (2026-10-19): pulls GNOME 51 from Flathub, installs 0.2.2, the app launches. -- [ ] Inside the Flatpak: create a project, import through the portal, ingest, reopen after a restart. +- [x] Inside the Flatpak, New Project failed with "disk I/O error" (SQLite WAL needs shared memory the document portal does not provide); the store no longer uses WAL and converts old databases. Project creation, PDF/Markdown import, ingest, query and drift check verified on a portal path (2026-10-19). +- [ ] Inside the Flatpak, by hand: create a project, import through the file chooser, ingest, reopen after a restart. - [ ] Verify on a non-Ubuntu distro (Fedora VM or toolbox) before replying to Justin. - [x] README: badge and comparison table no longer say "Flatpak planned" (install section left as is). - [x] Vendor `pypdf` 6.19.0 in the manifest (the 0.2.2 bundle has `No module named 'pypdf'`, so PDF import fails). Builds green on PR #42. -- [ ] Push a release so the published bundle includes the stale-source check, then tag the remote as tested. -- [ ] Make the CI and release Flatpak jobs blocking (drop `continue-on-error`) now that they pass. +- [ ] Release 0.3.0 (prepared 2026-10-19: version, CHANGELOG, MetaInfo, release notes with the Flatpak line): test the CI bundle end to end, merge, tag `v0.3.0`, then reinstall from the Pages remote and check `flatpak update`. +- [x] CI and release Flatpak jobs are blocking (no `continue-on-error`); CI uploads an installable `gknowledge-dev.flatpak` artifact for every PR. - [ ] Flathub itself stays paused (AI-assisted code policy, see P0 below); say so plainly if asked, and point to the Pages remote. Develop against the runtime users get @@ -86,7 +87,7 @@ Speed and feedback - [ ] Publish a statement on AI-assisted code (Flathub and GNOME Circle have an AI-code policy since May 2026; this repo is developed with AI assistance and must say so plainly). ### Flatpak and Flathub (paused: kept warm, do not submit until policy allows AI-assisted code) -- [ ] Decide the app ID (`io.github..Gknowledge` or a verified domain). `io.gknowledge.*` needs a domain we control. +- [x] App ID is `io.github.openapi.Gknowledge` since 0.3.0 (`io.gknowledge.*` used gknowledge.io, which nobody owns). The Pages remote rebases the old ID with end-of-life-rebase; `.desktop` has `X-Flatpak-RenamedFrom`, MetaInfo has ``. - [x] Bump the runtime to GNOME 51 (current stable on Flathub). Not yet built in CI. - [x] Replace `--filesystem=home` with FileChooser / Documents portals; keep only `--share=network`. Done in the manifest, untested in a real Flatpak build. - [ ] Build from `git`/`archive` sources instead of `type: dir` (`pypdf` vendored). @@ -100,7 +101,7 @@ Speed and feedback - [x] Keyboard accelerators for new/open/preferences/quit. - [x] Desktop entry advertises Markdown, text, PDF and HTML; files passed by the file manager are imported into the current project. - [x] About dialog points to the real repository and issue tracker. -- [ ] GSettings schema (`io.gknowledge.Gknowledge`): window size, maximized, last project, provider; install and compile it in `make install` and the Flatpak. +- [ ] GSettings schema (`io.github.openapi.Gknowledge`): window size, maximized, last project, provider; install and compile it in `make install` and the Flatpak. - [ ] Register projects with `Gtk.RecentManager`. - [ ] `Gio.Notification` when ingestion finishes or fails. - [ ] Drag and drop of files and folders onto the Sources pane. diff --git a/build-aux/debian/changelog b/build-aux/debian/changelog index e98cf30..ed7126d 100644 --- a/build-aux/debian/changelog +++ b/build-aux/debian/changelog @@ -1,5 +1,5 @@ -gknowledge (0.2.2-1) unstable; urgency=medium +gknowledge (0.3.0-1) unstable; urgency=medium * Initial release. (Closes: #XXXXXX) - -- Francesco Bianco Tue, 13 Oct 2026 14:00:00 +0000 + -- Francesco Bianco Mon, 19 Oct 2026 12:00:00 +0000 diff --git a/build-aux/debian/copyright b/build-aux/debian/copyright index 39f6ca7..08efdc2 100644 --- a/build-aux/debian/copyright +++ b/build-aux/debian/copyright @@ -7,7 +7,7 @@ Files: * Copyright: 2026 Openapi® License: Expat -Files: data/io.gknowledge.Gknowledge.metainfo.xml +Files: data/io.github.openapi.Gknowledge.metainfo.xml Copyright: 2026 Openapi® License: CC0-1.0 diff --git a/build-aux/debian/gknowledge-mcp.1 b/build-aux/debian/gknowledge-mcp.1 index b46acff..234d70b 100644 --- a/build-aux/debian/gknowledge-mcp.1 +++ b/build-aux/debian/gknowledge-mcp.1 @@ -1,4 +1,4 @@ -.TH GKNOWLEDGE-MCP 1 "October 2026" "gknowledge 0.2.2" "User Commands" +.TH GKNOWLEDGE-MCP 1 "October 2026" "gknowledge 0.3.0" "User Commands" .SH NAME gknowledge-mcp \- Model Context Protocol server for a gknowledge wiki .SH SYNOPSIS diff --git a/build-aux/debian/gknowledge.1 b/build-aux/debian/gknowledge.1 index d2d77bc..8e2e4a5 100644 --- a/build-aux/debian/gknowledge.1 +++ b/build-aux/debian/gknowledge.1 @@ -1,4 +1,4 @@ -.TH GKNOWLEDGE 1 "October 2026" "gknowledge 0.2.2" "User Commands" +.TH GKNOWLEDGE 1 "October 2026" "gknowledge 0.3.0" "User Commands" .SH NAME gknowledge \- native GNOME app that turns documents into a cited wiki .SH SYNOPSIS diff --git a/build-aux/flatpak/io.gknowledge.Gknowledge.yaml b/build-aux/flatpak/io.github.openapi.Gknowledge.yaml similarity index 96% rename from build-aux/flatpak/io.gknowledge.Gknowledge.yaml rename to build-aux/flatpak/io.github.openapi.Gknowledge.yaml index a63d789..4c39821 100644 --- a/build-aux/flatpak/io.gknowledge.Gknowledge.yaml +++ b/build-aux/flatpak/io.github.openapi.Gknowledge.yaml @@ -1,4 +1,4 @@ -app-id: io.gknowledge.Gknowledge +app-id: io.github.openapi.Gknowledge runtime: org.gnome.Platform runtime-version: '51' sdk: org.gnome.Sdk diff --git a/build-aux/release-notes.md b/build-aux/release-notes.md index b6f6bf9..05b6223 100644 --- a/build-aux/release-notes.md +++ b/build-aux/release-notes.md @@ -6,6 +6,12 @@ curl -fsSL https://github.com/openapi/gknowledge/releases/latest/download/instal Or download `gknowledge_all.deb` below and run `sudo apt install ./gknowledge_all.deb` (Ubuntu 24.04+ / Debian 13+). +On any distribution with Flatpak (Fedora, Arch, openSUSE, …): + +```bash +flatpak install --user https://openapi.github.io/gknowledge/io.github.openapi.Gknowledge.flatpakref +``` + ## What's new See [CHANGELOG.md](https://github.com/openapi/gknowledge/blob/main/CHANGELOG.md). diff --git a/build-aux/repos/build-site.sh b/build-aux/repos/build-site.sh index d7fecaa..bc621d3 100755 --- a/build-aux/repos/build-site.sh +++ b/build-aux/repos/build-site.sh @@ -17,7 +17,9 @@ DEB_DIR=$1 BUNDLE=$2 OUT=$3 BASE_URL=${4%/} -APP_ID=io.gknowledge.Gknowledge +APP_ID=io.github.openapi.Gknowledge +# Until 0.3.0 the app was io.gknowledge.Gknowledge (a domain nobody owns). +OLD_ID=io.gknowledge.Gknowledge : "${GPG_KEY_ID:?set GPG_KEY_ID to the signing key}" ROOT=$(cd "$(dirname "$0")/../.." && pwd) @@ -68,6 +70,12 @@ ostree init --mode=archive-z2 --repo="$FP" # Only affects building; a nearly full build disk should not abort the import. ostree config --repo="$FP" set core.min-free-space-percent 0 flatpak build-import-bundle --gpg-sign="$GPG_KEY_ID" "$FP" "$BUNDLE" +# Installs of the old ID move to the new one on the next `flatpak update`, +# and Flatpak carries ~/.var/app/$OLD_ID over with them. +for ref in $(ostree refs --repo="$FP" | grep "^app/$APP_ID/"); do + flatpak build-commit-from --gpg-sign="$GPG_KEY_ID" --src-ref="$ref" \ + --end-of-life-rebase="$OLD_ID=$APP_ID" "$FP" "app/$OLD_ID/${ref#app/$APP_ID/}" +done flatpak build-update-repo --gpg-sign="$GPG_KEY_ID" --generate-static-deltas \ --title=gknowledge --default-branch=master "$FP" @@ -94,6 +102,8 @@ RuntimeRepo=https://dl.flathub.org/repo/flathub.flatpakrepo IsRuntime=false GPGKey=$KEY_B64 EOF +# Links to the old .flatpakref keep working and install the new ID. +cp "$OUT/$APP_ID.flatpakref" "$OUT/$OLD_ID.flatpakref" cp "$ROOT/data/icons/hicolor/scalable/apps/$APP_ID.svg" "$OUT/" # --- Landing page ----------------------------------------------------------- diff --git a/build-aux/repos/index.html b/build-aux/repos/index.html index b74f818..59dc9c3 100644 --- a/build-aux/repos/index.html +++ b/build-aux/repos/index.html @@ -4,7 +4,7 @@ gknowledge packages - +