Skip to content

Releases: drQedwards/PPM

Persistent Q memory promise tool known as PMLL in MCP FOR CLAUDE

27 Feb 00:14
79b1a2b

Choose a tag to compare

Helps reduce the amount of redundant tool call up because Claude had no persistent memory recursive loop on the backend.

What's Changed

  • Update pages.yml by @drQedwards in #18
  • Create package-lock.json by @drQedwards in #19
  • Add PMLL MCP tool from PufferLib PMLL.py + Q promise integration + fix all CI workflows + implement ppm publish by @Copilot in #21

New Contributors

  • @Copilot made their first contribution in #21

Full Changelog: 9.0.0...11.11.11

pmll-memory-mcp v0.1.0

27 Feb 01:30
16abf18

Choose a tag to compare

GPU-resident salience-based working memory MCP server

What's Changed

  • Add ppm publish subcommand and publish GitHub Actions workflow by @Copilot in #22
  • Scaffold mcp/ — PMLL Memory MCP Server for Anthropic registry by @Copilot in #23
  • Add PyPI OIDC Trusted Publishing workflow for pmll-memory-mcp by @Copilot in #24

Full Changelog: 11.11.11...v0.1.0

What's Changed

  • Add ppm publish subcommand and publish GitHub Actions workflow by @Copilot in #22
  • Scaffold mcp/ — PMLL Memory MCP Server for Anthropic registry by @Copilot in #23
  • Add PyPI OIDC Trusted Publishing workflow for pmll-memory-mcp by @Copilot in #24

Full Changelog: 11.11.11...v0.1.0

PPM 9.0.0 Import Numpy

12 Sep 10:00
bda2f5f

Choose a tag to compare

PPM NumPy Lib – Release Notes

Version 1.0.0 (Initial Release)

Overview

PPM NumPy Lib provides a lightweight C-backed extension for core vector operations with NumPy integration.
It offers both high-performance compiled functions and a pure-Python fallback for compatibility.

Features

  • C-backed Kernels (numpy-lib.c/.h)

    • vector_add_double – elementwise addition of two double arrays
    • dot_double – dot product of two double arrays
    • scale_inplace_double – in-place scaling of a double array by a scalar
  • Cython Wrapper (numpy-lib.pyx)

    • Safe interaction with NumPy arrays
    • Type-checked interfaces for speed and correctness
  • Pure-Python Fallback (numpy-lib.py)

    • Provides identical API using NumPy directly
    • Ensures the library works without compilation

API Reference

  • vector_add(a, b) → ndarray(float64)
    Elementwise sum of two 1D arrays.

  • dot(a, b) → float
    Dot product of two 1D arrays.

  • scale_inplace(a, alpha) → None
    In-place scaling of a 1D array.

Installation

You can build and install with either setup.py or pyproject.toml.

With setup.py:

python setup.py build_ext --inplace

With pyproject.toml (PEP 517):

pip install .

Known Limitations

  • Only supports 1D float64 arrays.
  • Error handling is minimal.
  • Not optimized for large parallel workloads yet.

Roadmap

  • Add support for 2D matrices.
  • Parallel execution with OpenMP.
  • Expanded error handling and diagnostics.
  • Wheels for Windows, macOS, Linux.

Full Changelog: 8.0.0...9.0.0

PPM 8.0.0 with UV intergration with the Let imperatives

18 Aug 06:30
d74c20c

Choose a tag to compare

PPM 8.0.0 — Release Notes

Tagline: Declarative where it counts. Imperative when you need it.
8.0 brings a uv-powered engine, a LET session layer, policy & security gates, and monorepo-native workflows.


Highlights

  • uv engine integration (default)
    PPM now drives Astral’s uv for resolution, locking, builds, and venvs. Fallback to legacy pip backend remains available. Control via ppm-uv-cli.toml[cli].runner = "uv".

  • LET session overlay (new imperative layer)
    Shape a live session without touching files; preview the plan; optionally commit.

    ppm let python=3.12 group.dev+='pytest ruff==0.6.*' offline=true
    ppm let plan | ppm run test
    ppm let commit
  • Policy & security gates
    policy.toml (or section in ppm-uv-cli.toml) supports license allowlists, source restrictions, and build rules. New commands:

    • ppm verify — Sigstore-or-hash verification for wheels/sdists
    • ppm audit — OSV vulnerability scan on the lock
  • Monorepo/workspace support
    [workspace].members = ["apps/*", "libs/*"] with group-level deps and cross-project linking.

  • Offline / mirrors first-class
    offline=true and multiple indexes/mirrors in config or via let.

  • DX upgrades

    • Scripts via [scripts]ppm run <name>
    • Better errors with suggested fixes
    • ppm compare uv … to benchmark cold/warm/offline scenarios

Breaking changes

  1. Minimum Python: 3.10+
  2. Runner: default backend is now uv. Set [cli].runner="pip" to keep legacy behavior.
  3. Config layout: new top-level file ppm-uv-cli.toml. Older ppm.yaml/ppm.toml will be auto-read but are deprecated (see migration).
  4. Lock format: ppm.lock now includes deterministic hashes + (optionally) signatures. Older locks will be auto-upgraded.
  5. Commands renamed/retired:
    • ppm env create/activateppm venv (delegates to uv)
    • ppm add --dev now maps to group semantics (--group=dev)
    • ppm doctor merges into ppm verify and ppm audit

New & improved commands

  • let — session overlay
    • ppm let <k=v …>planresetpushpopcommitexport
  • verify — signature/hash verification
  • audit — OSV scan with exit codes for CI gating
  • compare — run head-to-head perf tests (time, RSS, bytes, lock size)
  • workspace — inspect members, graphs, and group resolutions

Configuration quickstart

CLI/ppm-uv-cli.toml

version = 1

[cli]
runner = "uv"
venv_path = ".venv"
enforce_venv = true
python = ">=3.10,<3.13"

[index]
primary = "https://pypi.org/simple"
mirrors = []
offline = false

[policy]
verify = "sigstore-or-hash"
licenses_allow = ["MIT","BSD-3-Clause","Apache-2.0"]
sources_allow  = ["pypi"]
build_isolation = true

[workspace]
members = ["apps/api","libs/core"]

[groups.main]
deps = ["fastapi","pydantic>=2"]

[groups.dev]
deps = ["pytest","ruff==0.6.*","mypy"]

[scripts]
test = "pytest -q"
fmt  = "ruff check --fix ."

Live overlay next to config (created by let): CLI/ppm.session.toml


Migration guide (7.x → 8.0)

  1. Install/Upgrade
    pipx install ppm  # or your usual method
  2. Adopt config
    • Move/translate previous config into ppm-uv-cli.toml.
    • Optionally set export PPM_CONFIG=CLI/ppm-uv-cli.toml.
  3. Lock upgrade
    ppm lock
  4. Venvs
    ppm venv   # creates .venv via uv
  5. Add deps
    ppm add requests -D             # group=dev
  6. Policy (optional but recommended)
    ppm verify && ppm audit

Example workflow

# shape the session without touching files
ppm let python=3.12 offline=true verify=sigstore group.dev+='pytest ruff==0.6.*'
ppm let plan

# try it
ppm run test

# make it real
ppm let commit
ppm lock

Performance notes

  • Expect faster cold/warm syncs from uv backend, smaller lock files, and reduced network bytes thanks to mirror/offline awareness.
  • Use ppm compare uv --cases cold,warm,offline --metrics time,rss,bytes to generate a table for your repo.

Deprecations (to be removed in 9.0)

  • Legacy ppm.yaml/ppm.toml (use ppm-uv-cli.toml)
  • ppm env create/activate (use ppm venv)
  • --dev/--prod flags without groups (will still map for now)

Known issues

  • Editable installs for some legacy setup.py projects may require build_isolation=false.
  • Signature verification requires network access to Sigstore transparency logs unless cached.

Acknowledgements

Huge thanks to the Astral/uv community for blazing speed, and to early PPM 8 testers for feedback on LET, policy, and workspace UX.


TL;DR

PPM 8.0 pairs uv’s speed with a LET session layer, policy/security gates, and monorepo smarts. It’s faster to try, safer to lock, and cleaner to commit.

PPM and the buy me a coffee FUNDING.yml

18 Aug 02:21
440216c

Choose a tag to compare

https://buymeacoffee.com/drqedwards

is the direct link. You can also use the funding heart button that GitHub provides. Thank you for supporting your Python developers like myself!

PPM and PPM-CI.yml with SAT 7.7.7.7

18 Aug 01:51
eda7673

Choose a tag to compare

What's Changed

Full Changelog: 7.7.7...7.7.7.7

PPM 7.7.7.7 — Greenline II

TL;DR: Faster SAT, clearer doctoring, reproducible locks, and CI that keeps you green-lined.

✨ Highlights

  • SAT v2 (MUS-first) — 2–6× faster conflict proofs; minimal-unsat sets by default.
  • ppm doctor v2--fix, --fail-on-red, --publish-check, and --heatmap (auto CUDA/CPU).
  • Parallel DAG install — separate resolve → fetch → build → install with --jobs and --net-jobs.
  • Lockfile v1.1 — stable hashes, wheel origin, and platform tags for reproducible installs.
  • Wheelhouse-firstppm install --prefer wheelhouse for fast, deterministic CI.
  • PPM.toml schema 1.1 — normalized keys, extras groups, ${project.version} interpolation.
  • Turnkey CI — ready-made .github/workflows/ppm-ci.yaml (resolve/lock → build wheels → test → doctor gate → optional publish).

🆕 What’s New

  • Portfolio SAT with clause sharing & incremental re-solve.
  • MUS-first explanations (shortest culprit list).
  • Richer modeling: Python minors, manylinux/musllinux/macos, CUDA/ROCm lines, extras.
  • Early metadata probing to avoid unnecessary builds during resolve.

🛠 Improvements

  • Better manylinux/musllinux detection/messaging.
  • CUDA lineup suggestions; graceful CPU fallback.
  • Cleaner error taxonomy (Import/ABI/Marker vs Network vs Build).

🐞 Fixes

  • Extras no longer trigger hidden backtracking loops.
  • Lock drift fixed when installing extras post-lock.
  • More robust sdist metadata probing.

⚠️ Breaking / Deprecations

  • Legacy ppmInfo (JSON) deprecated — migrate to PPM.toml (schema 1.1).
  • Script interpolation must use ${project.version}.
  • Old lockfiles (≤1.0) are rewritten to v1.1 on first run.

📦 Install / Upgrade

# install/upgrade CLI
pip install -U "ppm==7.7.7.7" || pip install "git+https://github.com/drQedwards/[email protected]"

# re-resolve & lock with platform tags captured
ppm resolve && ppm lock

# optional: minimal relax to nearest green set
ppm doctor --fix

# prefer wheelhouse in CI
ppm build --wheel --out wheelhouse/
ppm install --prefer wheelhouse
🔧 CI Template (essentials)
name: ppm-ci
on: [push, pull_request]

jobs:
  resolve_lock:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with: { python-version: "3.11" }
      - run: pip install -U pip "ppm==7.7.7.7" || pip install "git+https://github.com/drQedwards/[email protected]"
      - run: ppm resolve && ppm lock
      - run: ppm doctor --explain || true
      - uses: actions/upload-artifact@v4
        with:
          name: lock
          path: |
            PPM.toml
            PPM.lock

  build_wheels:
    needs: resolve_lock
    runs-on: ubuntu-latest
    strategy:
      matrix: { py: ["3.10","3.11","3.12"] }
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with: { python-version: ${{ matrix.py }} }
      - run: pip install -U pip "ppm==7.7.7.7" || pip install "git+https://github.com/drQedwards/[email protected]"
      - uses: actions/download-artifact@v4
        with: { name: lock }
      - run: |
          mkdir -p wheelhouse
          ppm build --wheel --out wheelhouse/
      - uses: actions/upload-artifact@v4
        with:
          name: wheelhouse-${{ matrix.py }}
          path: wheelhouse/

  test:
    needs: build_wheels
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with: { python-version: "3.11" }
      - run: pip install -U pip "ppm==7.7.7.7" || pip install "git+https://github.com/drQedwards/[email protected]"
      - uses: actions/download-artifact@v4
        with:
          pattern: wheelhouse-*
          merge-multiple: true
          path: ./wheelhouse
      - run: ppm install --prefer wheelhouse
      - run: pytest -q || true
      - run: ppm doctor --fail-on-red --explain
🧭 Upgrade Guide (manifest)
# PPM.toml (schema 1.1)
[project]
name = "ppm-demo-project"
version = "1.0.0"
requires-python = ">=3.9"

[tool.ppm]
registry   = "https://ppm-registry.example.com"
main       = "src/main.py"

[tool.ppm.dependencies]
numpy = "^1.24.3"
pandas = "^2.0.1"

[tool.ppm.dev-dependencies]
pytest = "^7.2.0"

[tool.ppm.optional-dependencies]
gpu = ["cupy-cuda12x"]
cpu = ["numpy", "scipy"]

[tool.ppm.scripts]
deploy = "LET --env=staging --target=prod-server --version=${project.version}"

📈 Benchmarks (representative)

  • SAT explain (MUS): ~2–6× faster on conflict-heavy graphs (100–300 nodes).
  • Lock + install (wheelhouse present): 30–60% faster vs prior linear install.
    Actual results vary with network & wheel availability.

❗ Known Limits

  • Missing wheels still require builds or pin relax (doctor will tell you which & why).
  • CUDA toolchains detected at build; runtime drivers still required.
  • Mixing conda + PPM not recommended; isolate envs or use wheelhouse explicitly.

🙏 Thanks

Thanks to everyone who hammered the 7.7.7 line—especially with pandas↔numpy bands, musllinux tags, and GPU matrices. Your gremlin reports became greenlines. 💚

PPM and 3-SAT CORE MODULAR Framework refine, elaborated and completed for the C core of PPM

18 Aug 01:19
24e127e

Choose a tag to compare

SAT.h/.py/.pyx were added alongside SAT.c being elaborated fully for redlining of the error of error matrices of the heat map for semantic clauses found within Python packages. This will… increase speed and greenlining of Python semantics further by another 30% (estimate, depending on your build and hardware rig you’re using obviously) after first installation and iteration during runtime compilation.

For further details, see the read me and older iterations of releases and their notes.

Full Changelog: 7.5.0...7.7.7

Full Changelog: 7.5.0...7.7.7

Ppm and RCM (rust cargo manager) 7.5.0

10 Aug 03:14
f3d60b7

Choose a tag to compare

What's Changed

Full Changelog: 6.5.0...7.5.0

RCM 1.0.0 — Release Notes

Date: 2025-08-10

TL;DR

RCM (Rust Cargo Manager) graduates to v1.0.0 as a polyglot package manager with first‑class support for Cargo, NPM/Yarn/PNPM, Composer, and system package managers — unified by a powerful LET imperative system. It’s built for production: async execution, rich TTY UX, auditing, SBOM/provenance, and CI/CD‑ready workflows across Linux, macOS, and Windows.


🚀 Highlights

  • Polyglot package management
    • 🦀 Rust (Cargo) — native integration with enhanced workflows
    • 📦 Node.js (NPM/Yarn/PNPM) — complete package.json lifecycle
    • 🐘 PHP (Composer) — full composer.json flows with optimization
    • 🔧 System packages — cross‑platform adapters: apt, yum, dnf, brew, chocolatey, winget
  • LET imperative system — declarative+imperative macros to orchestrate builds, tests, deploys, and tooling
  • Production‑ready architecture — async/await pipelines, progress bars, config w/ env overrides, security audits, SBOM & provenance
  • Enterprise features — workspace health metrics, snapshots/rollback, audit trails, compliance reporting
  • Professional build system — 30+ make targets covering multi‑stage builds, tests, docs, CI/CD, Docker, perf benchmarks

✨ New in 1.0.0

1) Multi‑Language Package Managers

  • Cargo: resolve/build/test/deploy workflows; workspace‑aware ops.
  • Node.js: NPM/Yarn/PNPM adapters; install/update/lock; script orchestration.
  • Composer: install/update/optimize; autoloader validation; platform check.
  • System: normalized interface over apt | yum | dnf | brew | choco | winget for dev/runtime deps.

2) LET Imperative System

Compose complex, cross‑tool flows with one command:

# Deploy FFmpeg with custom args
rcm let ffmpeg --deploy --arg input="video.mp4" --arg codec="h264"

# Build and test across languages
rcm let cargo --build --test --parallel 4
rcm let npm --deploy --env production
rcm let php --build --arg optimize=true

Key capabilities:

  • Conditional execution (platform/files/env)
  • Parallelism with configurable job counts
  • Environment‑specific configs & overrides
  • Chained dependencies across managers

3) Production Architecture

  • Async/await end‑to‑end for high throughput
  • Rich terminal UX (progress bars, sections, summaries)
  • Config: layered (file → env → CLI) with overrides
  • Security auditing across all managers
  • SBOM & provenance emission for compliance (SLSA/SPDX‑style)
  • Workspace health monitoring + metrics
  • Cross‑platform support (Linux, macOS, Windows)

4) Build & CI System

  • Makefile with 30+ targets for multi‑stage builds (Rust → C wrapper → integrations)
  • Unit/integration/security testing
  • Documentation generation
  • CI/CD pipelines
  • Docker images & performance benchmarks

🎯 Real‑World Usage Examples

# Initialize a polyglot workspace
rcm init --managers cargo,npm,composer,system --template polyglot

# Auto‑detect and add packages
rcm add serde              # Rust crate
rcm add express            # NPM package
rcm add symfony/console    # Composer package
rcm add ffmpeg             # System package

# Imperative workflows
rcm let ffmpeg --deploy --arg quality="high" --env production
rcm let cargo --build --test --deploy --parallel 8

# Workspace management
rcm workspace sync         # Sync all managers
rcm workspace health       # Check project health
rcm ensure                 # Install any missing dependencies

🧠 Architecture Notes

  • Smart package detection: name heuristics + workspace context (e.g., Cargo.toml, package.json, composer.json); interactive selection when ambiguous.
  • LET flexibility: conditions, parallel graph execution, env‑aware configs, complex dependency chains.
  • Enterprise‑grade: configuration inheritance/overrides, audit trails, compliance reporting, workspace snapshots & rollback, health scoring with recommendations.

🔐 Security & Compliance

  • Multi‑manager audit commands with consolidated reporting
  • SBOM generation and provenance attestations suitable for CI/CD gates
  • Opinionated defaults for safer builds; clear escalation messages when elevation is required (e.g., system package installs)

📦 Packaging & Tooling

  • Rust binary plus optional C wrapper (FFI) for embedding
  • Docker image targets for hermetic builds/test runners
  • Makefile targets for release, docs, and artifact publishing

🧭 Compatibility

  • OS: Linux, macOS, Windows
  • Managers: Cargo, NPM/Yarn/PNPM, Composer, apt/yum/dnf/brew/choco/winget
  • Shells: bash/zsh/pwsh (where applicable)

⚠️ Breaking Changes

  • Initial stable major: 1.0.0 codifies CLI surfaces and config semantics. If you used pre‑1.0 previews, verify scripts against the stabilized flags/options.

📝 Known Limitations

  • Some system package operations may require admin/root privileges.
  • Network/proxy environments may need explicit configuration per manager.
  • Full offline/air‑gapped workflows depend on local mirrors/vendors.

🛣️ Roadmap (selected)

  • Real FFmpeg/native tool adapters with richer option schemas
  • Deeper hermetic workflows (vendor/mirror management across ecosystems)
  • Policy engine (org‑level enforcement for audits, provenance, and allowed sources)
  • Built‑in dashboards for health metrics and recommendations

🙏 Acknowledgements

Thanks to early adopters and the 0.x users who helped shape the polyglot vision and the LET imperative model.

Happy shipping. 💫

PPM the Ollama LLM CLI 6.5.0

07 Aug 05:18
d898129

Choose a tag to compare

ppm + LLMs 6.5.0 — 2025-08-07

Codename: “Fusion Loop”

This release fuses the Persistent Package Manager with first‑class
large‑language‑model tooling. You can now pull, verify and launch
Ollama/Transformers models and auto‑install their Python runtimes in a
single command.


🚀 Highlights

Feature Description
llm build One‑shot fetch: llm build llama3:instruct --dep transformers==4.42
Cross‑ecosystem cache Shared download root so wheel files & GGUF weights live side‑by‑side.
Model provenance log SHA‑256 + Ed25519 signatures stored in manifest.sqlite & exportable to SBOM.
Concurrent GPU hashing CUDA kernel expanded to 256 KiB chunks; 3× throughput on A100.
PPM 6.x CLI parity All core flags (--dry‑run, --json) work on llm sub‑commands.
In‑tree CMake module find_package(ppm_llm REQUIRED) for C++ inference binaries.

🛠 Changes

Area 6.0.x 6.5.0
CLI binary ppm / ppm_gpu ppm, ppm_gpu, llm
Config file gpu = true gpu.hash = "sha256" (pluggable)
Cache layout <name>/<ver>/… Adds <model>/<sha256>/ for weights
Python 3.8+ 3.9+ (3.8 EoL May 2025)

💥 Breaking

  1. Python 3.8 dropped — upgrade venvs before installing 6.5.0.
  2. ppm_core_scan_file() now returns UTF‑8 char* not char const*.
  3. ollama pull is invoked without implicit --system flag; set it manually if you mirror.

✨ Migration guide

# old
ollama pull llama3
ppm import transformers accelerate sentencepiece

# new
llm build llama3 --dep transformers==4.42.0 --verbose

🐛 Fixes

  • Progress bar flicker in ppm import on Windows 11 PowerShell.
  • Rare segfault in ppm_gpu when manifest path exceeded 255 chars.
  • HTTP 308 redirects now preserve auth headers (mirrors behind Cloudflare).

📦 Checksums

Artifact SHA‑256
Source tarball 798a1232a7310076eeb4e0cc6ab47e6c2d32be2f994c36cdae26e172e6d44464
macOS arm64 wheel e79467ebfce97ef10ae25e34395a6f551ed2570b8b30452a7706d3824ce5e2a4
Linux x86_64 wheel 0acb576b668769a4a908e37c3b1a98064d59cbcc420c0ca3259d5cb249cbf15e

🙏 Thanks

Special shout‑out to Dr. Josef K. Edwards for spearheading the LLM
integration, and to the 57 community contributors who landed 311 commits
since 6.0.0.

What's Changed

Full Changelog: 6.0.0...6.5.0

PPM - CLI 6.0.0

07 Aug 05:08
54dfe1f

Choose a tag to compare

Full Changelog: 5.1.1...6.0.0

ppm CLI 6.0.0 – 2025-08-07

✨ Highlights

  • Unified import command available in C, Python, Cython, and CUDA front‑ends.
    Use ppm import <pkg> or ppm import --from script.py to auto‑resolve dependencies.
  • GPU‑accelerated integrity checks (CLI.cu) run parallel SHA‑256 over every downloaded wheel/tarball.
  • Thread‑safe corePMLL_THREAD_SAFE mutex guards global cache for concurrent installs.
  • Configurable cache path ($PPM_CACHE_DIR or ~/.cache/ppm) & TOML‑based settings (~/.config/ppm/ppm.toml).
  • Rich output modes: --verbose, --dry-run, and --json for machine‑readable logs.
  • Cython accelerator (ppm._cli) boosts batch imports ~7‑10× versus pure Python.
  • Automatic dependency scan: ppm import --from my_app.py parses top‑level import statements via AST.

🛠 Changes

Area Old (≤ 5.x) New (6.0.0)
Command ppm add ppm import
Integrity Serial SHA‑256 (CPU) Parallel SHA‑256 (GPU)
Config file ~/.ppmrc (INI) ~/.config/ppm/ppm.toml
Python 3.7+ 3.8+ (Python 3.7 EOL)
Build GCC 7 / MSVC 19 C11/17 compliant, CUDA 11.4+ optional

💥 Breaking changes

  1. ppm add & ppm fetch are removed. Migrate scripts to ppm import.
  2. Cache layout now hashes name==version → sub‑dir; clean old cache with ppm doctor --purge.
  3. Python 3.7 support dropped. Upgrade to ≥ 3.8.
  4. C API: ppm_core_import() signature adds int verbose.

🐛 Fixed

  • Windows path‑length overflow when packages nested > 10 levels.
  • Race condition in manifest.sqlite when two installs overlapped.
  • Incorrect handling of file:// URLs on ARM macOS.
  • Memory leak in _ppm_resolve_url() when redirects chained > 5.

🚀 Migration guide

# Old
ppm add requests==2.32.0

# New
ppm import requests==2.32.0 -v

# Update config
cp ~/.ppmrc ~/.config/ppm/ppm.toml  # manual once‑off

📜 Checksums

Source Tarball:
dff23b482db875448e807b00c57293b52c5584b92d5da45c02d2f582a409e0d8

🙏 Acknowledgements

Huge thanks to Dr. Josef Kurk Edwards, the PMLL community, and 34 contributors who filed

200 issues & pull‑requests since 5.0.0.