From 8901dd593d6460c64e9106b58ba2e97336a4e0ec Mon Sep 17 00:00:00 2001 From: Cameron Smith Date: Mon, 16 Feb 2026 21:04:53 -0500 Subject: [PATCH 1/2] fix(nix): pass explicit version to crane-maturin buildMaturinPackage Read workspace.package.version from Cargo.toml via builtins.fromTOML and pass it directly, bypassing crateNameFromCargoToml lookup that cannot resolve version from the dummySrc during buildDepsOnly. --- nix/packages/pnt-cli/default.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nix/packages/pnt-cli/default.nix b/nix/packages/pnt-cli/default.nix index f62ddcfe..c9840342 100644 --- a/nix/packages/pnt-cli/default.nix +++ b/nix/packages/pnt-cli/default.nix @@ -33,11 +33,14 @@ let filter = path: type: (sourceFilter path type) || (testFilter path type); }; + cargoToml = builtins.fromTOML (builtins.readFile ../../../packages/pnt-cli/Cargo.toml); + # Standalone crane-maturin build for test suite and Python package output. # nixpkgsPrebuilt installs from this derivation, avoiding duplicate Rust # compilation in the uv2nix overlay. passthru.tests provides checks. cmPackage = cmLib.buildMaturinPackage { pname = "pnt-cli"; + version = cargoToml.workspace.package.version; inherit src testSrc python; }; in From caf1da852e26e1a27225c3fc1c4cc341aa585eff Mon Sep 17 00:00:00 2001 From: Cameron Smith Date: Mon, 16 Feb 2026 21:05:01 -0500 Subject: [PATCH 2/2] chore(beads): sync --- .beads/issues.jsonl | 1 + 1 file changed, 1 insertion(+) diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 4196be93..2a6f4057 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -30,6 +30,7 @@ {"id":"pnt-dre.4","title":"Implement cached-ci-job composite action pattern","description":"Add .github/actions/cached-ci-job composite action following typescript-nix-template pattern. Content-addressed caching with hash-sources and force-run support. Update CI to use category-based matrix builds.\n\nPost-federation CI adaptation: the migration from uv workspace to per-package independent locks (pnt-4jg.1) means CI must now discover and iterate packages under packages/. The matrix strategy needs a package axis in addition to the category axis, producing either a {package} x {category} matrix or per-package reusable workflow dispatches. Review how ci.yaml currently enumerates packages and ensure the composite action pattern supports per-package resolution of lock files, dependency caches, and build artifacts.\n\nAcceptance criteria:\n- .github/actions/cached-ci-job composite action implemented\n- Content-addressed caching with hash-sources and force-run support\n- CI matrix discovers packages/ dynamically (not hardcoded)\n- Matrix crosses package x category dimensions\n- Per-package uv.lock files used for cache keys (not root lock)\n- Category-based builds follow typescript-nix-template pattern","status":"closed","priority":2,"issue_type":"task","owner":"cameron.ray.smith@gmail.com","created_at":"2026-01-19T11:54:56.79376-05:00","created_by":"Cameron Smith","updated_at":"2026-02-02T15:55:30.748155-05:00","closed_at":"2026-02-02T15:55:30.748155-05:00","close_reason":"Implemented cached-ci-job composite action (ported from typescript-nix-template), per-package CI justfile recipes (ci-sync, ci-lint, ci-test, ci-typecheck, ci-check, list-packages-json), rewrote python-test.yaml to use nix develop -c just \u003crecipe\u003e, added dynamic package discovery and force_run to ci.yaml. All CI steps expressible as nix develop -c just \u003crecipe\u003e.","dependencies":[{"issue_id":"pnt-dre.4","depends_on_id":"pnt-dre","type":"parent-child","created_at":"2026-01-19T11:54:56.794334-05:00","created_by":"Cameron Smith"}],"comments":[{"id":2,"issue_id":"pnt-dre.4","author":"Cameron Smith","text":"Minimal CI path fixes applied in d0cab2a as part of pnt-4jg.1 fixups: cache-dependency-glob updated to packages/*/uv.lock, uv sync/lint/test moved into per-package working-directory, ci.yaml path filters updated.\n\nRemaining for pnt-dre.4: replace setup-python/setup-uv actions with nix develop -c just \u003crecipe\u003e pattern, add justfile recipes for per-package sync/test/lint/typecheck, implement cached-ci-job composite action, dynamic package discovery.","created_at":"2026-02-02T20:17:02Z"}]} {"id":"pnt-dre.5","title":"Add omnix template integration","description":"Configure om.templates in flake with parameter definitions. Add template-verify justfile recipe. Create .github/workflows/template.yaml for CI validation.","status":"closed","priority":2,"issue_type":"task","owner":"cameron.ray.smith@gmail.com","created_at":"2026-01-19T11:54:57.668262-05:00","created_by":"Cameron Smith","updated_at":"2026-02-02T15:56:15.624906-05:00","closed_at":"2026-02-02T15:56:15.624906-05:00","close_reason":"om.templates, template-verify recipe, and template.yaml workflow already existed. Fixed stale path-ignore filters for per-package lock pattern.","dependencies":[{"issue_id":"pnt-dre.5","depends_on_id":"pnt-dre","type":"parent-child","created_at":"2026-01-19T11:54:57.66888-05:00","created_by":"Cameron Smith"}]} {"id":"pnt-dtx","title":"Simplify .envrc and remove set-git-env indirection","description":"Replace 41-line .envrc with 15-line version matching reference repos. Move git metadata exports to devshell shellHook as direct exports. Delete modules/git-env.nix. Remove set-git-env from devshell packages and shellHook.","status":"closed","priority":1,"issue_type":"task","owner":"cameron.ray.smith@gmail.com","created_at":"2026-02-05T22:46:42.329044-05:00","created_by":"Cameron Smith","updated_at":"2026-02-05T22:49:14.40069-05:00","closed_at":"2026-02-05T22:49:14.40069-05:00","close_reason":"Simplified .envrc from 41 to 14 lines, inlined git metadata exports, removed git-env.nix. 94f3298"} +{"id":"pnt-e06","title":"Fix crane version placeholder warning in pnt-cli nix derivation","description":"crane-maturin's buildMaturinPackage invokes crateNameFromCargoToml which cannot resolve version from the workspace-only Cargo.toml during the dummySrc phase. Pass version explicitly by reading it from the workspace Cargo.toml via builtins.fromTOML.","status":"closed","priority":2,"issue_type":"bug","owner":"cameron.ray.smith@gmail.com","created_at":"2026-02-16T21:04:25.204989-05:00","created_by":"Cameron Smith","updated_at":"2026-02-16T21:04:58.049709-05:00","closed_at":"2026-02-16T21:04:58.049709-05:00","close_reason":"Implemented in 8901dd5"} {"id":"pnt-edl","title":"Modernize nix module architecture and template validation","description":"Migrate python-nix-template to dendritic flake-parts architecture (import-tree) matching vanixiets, ironstar, and typescript-nix-template conventions. Fix template.yaml workflow to properly validate instantiated templates including PyO3/maturin extensions.\n\nMotivation: Current nix/modules/ uses hand-rolled readDir discovery instead of import-tree. Template CI test (test-omnix-template) fails because it runs nix develop -c pytest which cannot load PyO3 _native extension (maturin packages are excluded from editableOverlay by design). Both issues block PR #44 from being fully validated.\n\nReference implementations:\n- vanixiets: modules/ with import-tree, 200+ auto-discovered modules\n- ironstar: modules/ with import-tree, crane for Rust builds\n- typescript-nix-template: modules/ with import-tree, two-variant template testing\n\nSequencing: Migration first (structural), then template workflow fix (validation). Template test depends on knowing the final module layout.","status":"closed","priority":2,"issue_type":"epic","owner":"cameron.ray.smith@gmail.com","created_at":"2026-02-03T10:09:57.390595-05:00","created_by":"Cameron Smith","updated_at":"2026-02-03T17:47:25.690809-05:00","closed_at":"2026-02-03T17:47:25.690809-05:00","close_reason":"All children complete: pnt-j6f (dendritic flake-parts migration), pnt-3qp (test strategy validation), pnt-m1w (template workflow fix). Nix module architecture modernized with import-tree and conditional package composition."} {"id":"pnt-h2o","title":"Migrate from yarn to bun monorepo for semantic-release tooling","description":"The python-nix-template currently uses yarn@4.6.0 as its JavaScript package manager for semantic-release tooling, while vanixiets and typescript-nix-template both use bun@1.3.4. This divergence:\n- Complicates porting scripts between repositories (e.g., preview-version.sh needed bun-to-yarn adaptation)\n- Means the python-nix-template cannot use the exact same scripts/preview-version.sh as the other repos\n- Introduces yarn-specific configuration (.yarnrc.yml, yarn.lock) that differs from the ecosystem standard\n\nMigration scope:\n- Replace yarn.lock with bun.lockb\n- Update packageManager field in all package.json files from yarn to bun\n- Update all justfile recipes that reference yarn (preview-version, release-package, test-package-release, etc.)\n- Update scripts/preview-version.sh to use bun instead of yarn\n- Update CI workflows referencing yarn\n- Remove .yarnrc.yml and yarn-specific configuration\n- Verify semantic-release, semantic-release-monorepo, and all plugins work correctly under bun\n\nReference: vanixiets and typescript-nix-template for the target bun configuration.","status":"closed","priority":2,"issue_type":"task","owner":"cameron.ray.smith@gmail.com","created_at":"2026-02-04T20:34:43.898129-05:00","created_by":"Cameron Smith","updated_at":"2026-02-04T21:09:06.495921-05:00","closed_at":"2026-02-04T21:09:06.495921-05:00","close_reason":"Implemented in 06324ed. Migrated from yarn@4.6.0 to bun@1.3.4 across devShell, package.json (root + 3 packages), justfile, preview-version.sh, CI workflows, gitignore, and gitattributes.","dependencies":[{"issue_id":"pnt-h2o","depends_on_id":"pnt-wbq","type":"discovered-from","created_at":"2026-02-04T20:34:49.100152-05:00","created_by":"Cameron Smith"}]} {"id":"pnt-h2q","title":"Remove nixpkgs follows from pyproject-nix chain to restore cache hits","description":"The pyproject-nix, uv2nix, and pyproject-build-systems inputs all declare inputs.nixpkgs.follows = nixpkgs, which forces them to use our nixpkgs revision. Since pyproject-nix.cachix.org builds against their own pinned nixpkgs, the follows override causes derivation hash mismatches, forcing source rebuilds of maturin, python-libcst, and other build-system packages.\n\nRemove the nixpkgs follows from all three inputs while keeping the internal cross-references (pyproject-build-systems.inputs.pyproject-nix.follows and .uv2nix.follows) since those are co-released.\n\nBefore: source rebuilds of maturin/libcst on every devshell entry.\nAfter: cache hits from pyproject-nix.cachix.org for build-system packages.\nTradeoff: second nixpkgs evaluation during flake eval (acceptable for build tool cache hits).","status":"closed","priority":1,"issue_type":"task","owner":"cameron.ray.smith@gmail.com","created_at":"2026-02-03T15:48:30.164416-05:00","created_by":"Cameron Smith","updated_at":"2026-02-03T18:04:48.434561-05:00","closed_at":"2026-02-03T18:04:48.434561-05:00","close_reason":"Implemented in e3a9997"}