From b13556cad79a10d5ee286c4ff6c33d3342f18547 Mon Sep 17 00:00:00 2001 From: Ryan Duguid Date: Fri, 30 Oct 2026 08:55:12 +1100 Subject: [PATCH 1/2] docs: add badge row, CodeQL, Scorecard, CITATION.cff and llms.txt --- .github/workflows/codeql.yml | 46 +++++++++++++++++++++++++++++++++ .github/workflows/scorecard.yml | 39 ++++++++++++++++++++++++++++ CITATION.cff | 24 +++++++++++++++++ README.md | 15 ++++++----- llms.txt | 40 ++++++++++++++++++++++++++++ 5 files changed, 157 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/codeql.yml create mode 100644 .github/workflows/scorecard.yml create mode 100644 CITATION.cff create mode 100644 llms.txt diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 0000000000..9348c2cdf6 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,46 @@ +name: CodeQL + +on: + push: + branches: [main] + pull_request: + branches: [main] + schedule: + - cron: "23 3 * * 1" + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + analyze: + name: Analyze ${{ matrix.language }} + runs-on: ubuntu-latest + timeout-minutes: 30 + permissions: + contents: read + security-events: write # Upload CodeQL results for this job only. + strategy: + fail-fast: false + matrix: + language: [python, rust, actions] + steps: + - name: Check out source + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: Initialise CodeQL + uses: github/codeql-action/init@6f2ac81f5cd81fe351a197ba0b00d91d03cd2aee # v4 + with: + languages: ${{ matrix.language }} + build-mode: none + + - name: Perform CodeQL analysis + uses: github/codeql-action/analyze@6f2ac81f5cd81fe351a197ba0b00d91d03cd2aee # v4 + with: + category: "/language:${{ matrix.language }}" diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml new file mode 100644 index 0000000000..0778a65763 --- /dev/null +++ b/.github/workflows/scorecard.yml @@ -0,0 +1,39 @@ +name: Scorecard + +# No push trigger: the weekly run on main publishes the results, so rescanning +# after every merge only repeated it. +on: + branch_protection_rule: + schedule: + - cron: "35 6 * * 1" + workflow_dispatch: + +permissions: + contents: read + +jobs: + analysis: + name: Scorecard analysis + timeout-minutes: 15 + runs-on: ubuntu-latest + permissions: + contents: read + security-events: write # Upload Scorecard results to code scanning. + id-token: write # Publish results for the public Scorecard badge. + steps: + - name: Check out source + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: Run Scorecard + uses: ossf/scorecard-action@fa7117db83c52d787ae5a89f350999701505d78e # v2.5.0 + with: + results_file: results.sarif + results_format: sarif + publish_results: true + + - name: Upload results to code scanning + uses: github/codeql-action/upload-sarif@6f2ac81f5cd81fe351a197ba0b00d91d03cd2aee # v4.39.0 + with: + sarif_file: results.sarif diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 0000000000..16c98123d9 --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,24 @@ +cff-version: 1.2.0 +message: "If you use this work, cite it with this metadata and the release tag or commit you used." +title: "PlutarchPages" +type: software +authors: + - name: "EquityBot" +abstract: "A clean-room PDF application in pure Rust, aiming at Adobe Acrobat Pro parity. A fork of PdfCraft." +repository-code: "https://github.com/EquityBot/PlutarchPages" +license-url: "https://github.com/EquityBot/PlutarchPages/blob/main/README.md#license-and-credits" +keywords: + - desktop-app + - pdf + - pdf-editor + - pdf-tools + - pdf-viewer + - pdfcraft + - redaction + - rust +references: + - type: software + title: "PdfCraft" + authors: + - name: "ArtCraft Team and the PdfCraft contributors" + repository-code: "https://github.com/storytold/pdfcraft" diff --git a/README.md b/README.md index 87fd23ae0e..066ac0890f 100644 --- a/README.md +++ b/README.md @@ -7,19 +7,20 @@

+
+ +[![tests](https://img.shields.io/github/actions/workflow/status/EquityBot/PlutarchPages/ci.yml?branch=main&label=tests&labelColor=000000&style=flat)](https://github.com/EquityBot/PlutarchPages/actions/workflows/ci.yml) [![CodeQL](https://img.shields.io/github/actions/workflow/status/EquityBot/PlutarchPages/codeql.yml?branch=main&label=CodeQL&labelColor=000000&style=flat)](https://github.com/EquityBot/PlutarchPages/actions/workflows/codeql.yml)
+[![OpenSSF Scorecard](https://img.shields.io/ossf-scorecard/github.com/EquityBot/PlutarchPages?label=Scorecard&labelColor=000000&style=flat)](https://scorecard.dev/viewer/?uri=github.com/EquityBot/PlutarchPages)
+[![rust: 1.90+](https://img.shields.io/badge/rust-1.90%2B-66023C?labelColor=000000&style=flat&color=66023C)](https://www.rust-lang.org/) [![licence: MIT OR Apache-2.0](https://img.shields.io/badge/licence-MIT%20OR%20Apache--2.0-66023C?labelColor=000000&style=flat&color=66023C)](#license-and-credits) [![fork of: PdfCraft](https://img.shields.io/badge/fork%20of-PdfCraft-66023C?labelColor=000000&style=flat&color=66023C)](https://github.com/storytold/pdfcraft) + +
+

The PDF workbench; an open-source, clean-room reimplementation of Adobe Acrobat, rebuilt in pure Rust.
Read, organize, combine, split and secure PDFs in a fast, native app, written in Rust from the ground up.
macOS · Windows · Linux · FreeBSD · the web

-

- License: MIT OR Apache-2.0 - Written in Rust - Platforms: macOS, Windows, Linux, FreeBSD, web - No account, no telemetry -

- > [!NOTE] > **PlutarchPages is a fork of [PdfCraft](https://github.com/storytold/pdfcraft) by the ArtCraft team.** It adds > the fixes and converters listed under [Fork changes](#fork-changes). It is not an ArtCraft product, and the diff --git a/llms.txt b/llms.txt new file mode 100644 index 0000000000..5a4fee141b --- /dev/null +++ b/llms.txt @@ -0,0 +1,40 @@ +# PlutarchPages + +> A fork of PdfCraft: a clean-room PDF application in pure Rust for macOS, Windows, Linux, FreeBSD +> and the web, aiming at Adobe Acrobat Pro parity. It is alpha: pages are still drawn by the `hayro` +> crate, and editing existing text, OCR beyond Latin script and Office import and export are thin or missing. + +This fork publishes no builds of its own; build it from source with Rust 1.90 or later, for example +`git clone https://github.com/EquityBot/PlutarchPages` and then +`cargo run --release -p pdfcraft -- some.pdf`. The program, crates and binaries keep their `pdfcraft` names. + +## Start + +- [README](https://github.com/EquityBot/PlutarchPages#readme): features, fork changes, getting started and licence. +- [Development](https://github.com/EquityBot/PlutarchPages/blob/main/docs/development.md): environment variables, logs and diagnostics. +- [Roadmap summary](https://github.com/EquityBot/PlutarchPages/blob/main/ROADMAP.md): stage, parity numbers and progress log. + +## Docs + +- [Architecture](https://github.com/EquityBot/PlutarchPages/blob/main/docs/architecture.md): how the crates are built and layered today. +- [Gaps](https://github.com/EquityBot/PlutarchPages/blob/main/docs/gaps.md): known shortfalls against Acrobat Pro, ranked. +- [Parity with Acrobat Pro](https://github.com/EquityBot/PlutarchPages/blob/main/docs/target-app-parity.md): the overall assessment and how it is measured. +- [Milestones](https://github.com/EquityBot/PlutarchPages/blob/main/docs/roadmap.md): milestones and current focus. +- [MCP conventions](https://github.com/EquityBot/PlutarchPages/blob/main/docs/mcp.md): the opt-in `pdfcraft-cli mcp` server. +- [Interface language](https://github.com/EquityBot/PlutarchPages/blob/main/docs/localization.md): choosing the interface language and what each catalogue covers. +- [Editing images](https://github.com/EquityBot/PlutarchPages/blob/main/docs/editing-images.md): moving, resizing and deleting figures. +- [Editing several objects](https://github.com/EquityBot/PlutarchPages/blob/main/docs/editing-multiple-objects.md): moving several objects together. +- [File format parity](https://github.com/EquityBot/PlutarchPages/blob/main/docs/file-format-parity.md): formats read and written. +- [PDF specification parity](https://github.com/EquityBot/PlutarchPages/blob/main/docs/pdf-spec-parity.md): ISO 32000-2 and subset standards coverage. +- [UI parity](https://github.com/EquityBot/PlutarchPages/blob/main/docs/ui-parity.md): tools, panels and shortcuts against Acrobat Pro. +- [Hardware and platform parity](https://github.com/EquityBot/PlutarchPages/blob/main/docs/hardware-parity.md): hardware features per platform. +- [Localization parity](https://github.com/EquityBot/PlutarchPages/blob/main/docs/localization-parity.md): per-language interface status. +- [Contributors](https://github.com/EquityBot/PlutarchPages/blob/main/docs/contributors.md): how the About window credits contributors. +- [Releasing](https://github.com/EquityBot/PlutarchPages/blob/main/docs/releasing.md): the release workflow. +- [Attribution](https://github.com/EquityBot/PlutarchPages/blob/main/ATTRIBUTION.md): every bundled asset with its author, source and licence. +- [Agent and contributor rules](https://github.com/EquityBot/PlutarchPages/blob/main/AGENTS.md): asset, clean-room and safety rules. + +## Related + +- [EquityBot](https://github.com/EquityBot): other EquityBot tools. +- [PdfCraft](https://github.com/storytold/pdfcraft): the upstream project. From 2ba31f2218bac301ba5002e44d8c439a9124f264 Mon Sep 17 00:00:00 2001 From: Ryan Duguid Date: Fri, 30 Oct 2026 09:21:55 +1100 Subject: [PATCH 2/2] ci: drop Scorecard, which does not support fork repositories --- .github/workflows/scorecard.yml | 39 --------------------------------- README.md | 1 - 2 files changed, 40 deletions(-) delete mode 100644 .github/workflows/scorecard.yml diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml deleted file mode 100644 index 0778a65763..0000000000 --- a/.github/workflows/scorecard.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Scorecard - -# No push trigger: the weekly run on main publishes the results, so rescanning -# after every merge only repeated it. -on: - branch_protection_rule: - schedule: - - cron: "35 6 * * 1" - workflow_dispatch: - -permissions: - contents: read - -jobs: - analysis: - name: Scorecard analysis - timeout-minutes: 15 - runs-on: ubuntu-latest - permissions: - contents: read - security-events: write # Upload Scorecard results to code scanning. - id-token: write # Publish results for the public Scorecard badge. - steps: - - name: Check out source - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - with: - persist-credentials: false - - - name: Run Scorecard - uses: ossf/scorecard-action@fa7117db83c52d787ae5a89f350999701505d78e # v2.5.0 - with: - results_file: results.sarif - results_format: sarif - publish_results: true - - - name: Upload results to code scanning - uses: github/codeql-action/upload-sarif@6f2ac81f5cd81fe351a197ba0b00d91d03cd2aee # v4.39.0 - with: - sarif_file: results.sarif diff --git a/README.md b/README.md index 066ac0890f..8b28e73e18 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,6 @@
[![tests](https://img.shields.io/github/actions/workflow/status/EquityBot/PlutarchPages/ci.yml?branch=main&label=tests&labelColor=000000&style=flat)](https://github.com/EquityBot/PlutarchPages/actions/workflows/ci.yml) [![CodeQL](https://img.shields.io/github/actions/workflow/status/EquityBot/PlutarchPages/codeql.yml?branch=main&label=CodeQL&labelColor=000000&style=flat)](https://github.com/EquityBot/PlutarchPages/actions/workflows/codeql.yml)
-[![OpenSSF Scorecard](https://img.shields.io/ossf-scorecard/github.com/EquityBot/PlutarchPages?label=Scorecard&labelColor=000000&style=flat)](https://scorecard.dev/viewer/?uri=github.com/EquityBot/PlutarchPages)
[![rust: 1.90+](https://img.shields.io/badge/rust-1.90%2B-66023C?labelColor=000000&style=flat&color=66023C)](https://www.rust-lang.org/) [![licence: MIT OR Apache-2.0](https://img.shields.io/badge/licence-MIT%20OR%20Apache--2.0-66023C?labelColor=000000&style=flat&color=66023C)](#license-and-credits) [![fork of: PdfCraft](https://img.shields.io/badge/fork%20of-PdfCraft-66023C?labelColor=000000&style=flat&color=66023C)](https://github.com/storytold/pdfcraft)