Skip to content

Template 0.1.18: Tools pin v0.3.0-alpha.1, pinned GitHub Actions, template CI, install rules - #33

Merged
guijacquemet merged 5 commits into
mainfrom
claude/template-0.1.18
Oct 14, 2026
Merged

guijacquemet merged 5 commits into
mainfrom
claude/template-0.1.18

Conversation

@guijacquemet

@guijacquemet guijacquemet commented Oct 13, 2026 •

Copy link
Copy Markdown
Collaborator

Tools tag v0.3.0-alpha.1 exists (Tools main 380f0e8)

The installers of this template pin LC_TOOLS_PIN="v0.3.0-alpha.1" and download LabConstrictor-Tools/archive/refs/tags/v0.3.0-alpha.1.zip. The tag now exists (commit 380f0e8 of LabConstrictor-Tools, which is Tools main) and the archive URL answers HTTP 200. The CI smoke install now installs that tag through post_install (the temporary LC_TOOLS_SPEC override of the job is removed), so the pin URL is tested.

What changes (template 0.1.17 -> 0.1.18)

  1. Tools pin. app/bash_bat_scripts/post_install.sh / .bat: v0.2.0-rc.1 -> v0.3.0-alpha.1; .tools/docs/tools_bridge.md names the pinned tag.
  2. Pinned actions. Every third-party uses: in .github/workflows/* is pinned by commit SHA with the tag as a comment (table in .tools/docs/migration_0_1_18.md). The SHAs are the ones the apps already carry (NucleiSky Template 0.1.20: lock files, no lost workflow pushes, fresh JupyterLab launch #37); the five workflows of the template are byte-identical to the apps' merged files, and the three migration-resource copies of workflows are pinned the same way.
  3. Template CI. New .github/workflows/tests.yml (pinned actions, contents: read, pull_request + push to main + dispatch, guarded by github.repository): pytest tests, ruff check and mypy on .template_sync, .tools/python, tests, configured in ruff.toml / mypy.ini to the current state. black is not run (it would rewrite frozen migrations). Second job smoke-install (below).
  4. Install doc .tools/docs/install.md: "Before you install", "Update an installed app", "Where the app is listed".
  5. Docs/manifest. .tools/docs/migration_0_1_18.md + index entry; template_version: 0.1.18.

App hosts: the installer passes the app's hosts: line to Tools

post_install.sh / .bat (all three OS) run register ... --app-manifest <install folder>/labconstrictor-app.yaml whenever the file is in the install; Tools reads it (BOM, quoted key, flow or block list). A manifest without hosts: registers without hosts and the Tools sentence reaches menuinst_debug.log; a missing file logs a WARNING plus the same sentence. bump_constructor.py adds the extra_files entry when the manifest exists. The migration step v0_1_17_to_v0_1_18.py (surgical, idempotent, never deletes) adds the entry and the hook lines. Tests: test_template_sync_0_1_18_hosts.py, test_post_install_hosts.py.

CI smoke install (smoke-install, Linux, macOS, Windows): runs the live post_install in a fake prefix, installs the pinned Tools tag v0.3.0-alpha.1 through the script itself, then reads the registry entry: hosts must equal the hosts: line of each real manifest, and [notebook, napari] for a BOM + quoted-key manifest; for a manifest without a hosts: line and for no manifest the entry has no hosts and the log has the sentence. If the tag does not install, the job fails (the installer log is printed).

Migration v0_1_17_to_v0_1_18.py

Pin moves only when the line still holds exactly v0.2.0-rc.1; workflows replaced only when equal to the previous template version; install doc sections inserted if missing; Tools guide rewritten only if it is the 0.1.17 text; app hosts as above. Chains from 0.0.0, 0.1.9, 0.1.14-0.1.17 reach 0.1.18.

Tests

pytest tests: 155 passed (171 subtests), ruff and mypy clean. One test (test_the_tests_workflow_of_the_template) now asserts that the workflow has no LC_TOOLS_SPEC override instead of exactly one.

Smoke (LabConstrictor-Tools smoke_migration.yml)

Needs the small CI-only Tools PR #131 (not merged); earlier runs against this branch used Tools main.

Not verified

  • That an installer built by constructor really contains labconstrictor-app.yaml (belongs to the Tools smoke_install.yml on an app built with the new template).
  • That the pinned action commits are free of malicious code (only that they match the tags and the apps' pins).
  • The apps' real workflows were not run with the new pins by this PR.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Y2SN8SuEakTdiWy3F2WUqN

…rules

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y2SN8SuEakTdiWy3F2WUqN

Copy link
Copy Markdown
Collaborator Author

Smoke results (LabConstrictor-Tools smoke_migration.yml from branch claude/smoke-migration-accept-0.1.18, Tools PR #131, template_ref claude/template-0.1.18 at 738d876). Both runs used tools_spec = the Tools main archive (.../archive/refs/heads/main.zip) because the tag v0.3.0-alpha.1 does not exist yet, so the pin URL itself is not exercised.

Template CI on this PR: Template tests (pytest 135 passed, ruff, mypy), Check App Centre manifest and Check App Centre schema copy are all green.

Still a draft: do not merge until the Tools tag v0.3.0-alpha.1 exists.


Generated by Claude Code

Found by the Tools agent: labconstrictor-app.yaml was not in the installer and
post_install did not pass --app-manifest, so every registered app had no hosts
and was listed in every host.

- post_install.sh / .bat: pass --app-manifest <installed yaml>; when the yaml is
  missing (or has no hosts: line) log a WARNING and the 'declares no hosts'
  sentence, then register without hosts.
- bump_constructor.py: bundle labconstrictor-app.yaml in extra_files when the
  file exists.
- Migration 0.1.17 -> 0.1.18: surgical, idempotent step that adds the extra_files
  entry (only if the app has the yaml) and the register argument; unknown shapes
  are SKIPPED with a note. Resources and install.md updated.
- Tests: migration on the frozen app fixtures (Playground, NucleiSky, VLab4Mic,
  GuessTheCondition, CellTracksColab-like), live post_install.sh run against a
  stub python, bump_constructor tests, and a CI smoke install (Linux, macOS,
  Windows) that checks the registry entry's hosts equal the manifest's hosts line
  (Tools from the PR 133 branch via LC_TOOLS_SPEC until the tag exists).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y2SN8SuEakTdiWy3F2WUqN
- post_install.sh/.bat no longer test for a hosts: line themselves (stricter than
  the Tools reader: BOM, quoted key). They pass --app-manifest whenever the file
  is there; a missing file still logs the 'declares no hosts' sentence. Tools
  (now merged, main 398198a) prints the sentence for a manifest without hosts.
- smoke-install: LC_TOOLS_SPEC is git+https://.../LabConstrictor-Tools (main)
  until the tag v0.3.0-alpha.1 exists (one commented place); new case: BOM and
  quoted hosts key.
- Tests, resources and docs updated.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y2SN8SuEakTdiWy3F2WUqN
…ry LC_TOOLS_SPEC)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y2SN8SuEakTdiWy3F2WUqN
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y2SN8SuEakTdiWy3F2WUqN
@guijacquemet
guijacquemet marked this pull request as ready for review October 14, 2026 11:41
@guijacquemet
guijacquemet merged commit 1a9b263 into main Oct 14, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants