From e50fcd8f069648b712fcc955987819e576c79533 Mon Sep 17 00:00:00 2001 From: Richard-Otterli Date: Tue, 27 Jan 2026 21:50:15 +0000 Subject: [PATCH 1/8] Use uv instead of pip --- .github/workflows/specleft-demo.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/specleft-demo.yml b/.github/workflows/specleft-demo.yml index 7986730..dc4bbf1 100644 --- a/.github/workflows/specleft-demo.yml +++ b/.github/workflows/specleft-demo.yml @@ -81,11 +81,11 @@ jobs: with: python-version: '3.12' - - name: Install SpecLeft + - name: Install uv and Sync Dependencies run: | - python -m pip install --upgrade pip - pip install . - echo "PYTHONPATH=${GITHUB_WORKSPACE}:${PYTHONPATH}" >> $GITHUB_ENV + curl -LsSf https://astral.sh/uv/install.sh | sh + echo "$HOME/.local/bin" >> $GITHUB_PATH + uv sync --frozen - name: Core Behaviour Coverage [SpecLeft] run: specleft enforce .specleft/licenses/policy-core.yml @@ -109,11 +109,11 @@ jobs: with: python-version: '3.12' - - name: Install SpecLeft + - name: Install uv and Sync Dependencies run: | - python -m pip install --upgrade pip - pip install . - echo "PYTHONPATH=${GITHUB_WORKSPACE}:${PYTHONPATH}" >> $GITHUB_ENV + curl -LsSf https://astral.sh/uv/install.sh | sh + echo "$HOME/.local/bin" >> $GITHUB_PATH + uv sync --frozen - name: Enforce Feature Intent [SpecLeft] run: specleft enforce .specleft/licenses/policy.yml From a6a1a2c73e1f97a8d724cfbf970c06a66e28e7b5 Mon Sep 17 00:00:00 2001 From: Richard-Otterli Date: Tue, 27 Jan 2026 21:53:23 +0000 Subject: [PATCH 2/8] Upgrade setuptools --- .github/workflows/specleft-demo.yml | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/.github/workflows/specleft-demo.yml b/.github/workflows/specleft-demo.yml index dc4bbf1..b6455f1 100644 --- a/.github/workflows/specleft-demo.yml +++ b/.github/workflows/specleft-demo.yml @@ -29,8 +29,10 @@ jobs: - name: Install Dependencies run: | - python -m pip install --upgrade pip + python -m pip install --upgrade pip setuptools wheel + pip cache purge pip install . + echo "PYTHONPATH=${GITHUB_WORKSPACE}:${PYTHONPATH}" >> $GITHUB_ENV # Stage 1: Tool Health & Safety - name: Tool Health Check (Doctor) @@ -81,11 +83,12 @@ jobs: with: python-version: '3.12' - - name: Install uv and Sync Dependencies + - name: Install SpecLeft run: | - curl -LsSf https://astral.sh/uv/install.sh | sh - echo "$HOME/.local/bin" >> $GITHUB_PATH - uv sync --frozen + python -m pip install --upgrade pip setuptools wheel + pip cache purge + pip install . + echo "PYTHONPATH=${GITHUB_WORKSPACE}:${PYTHONPATH}" >> $GITHUB_ENV - name: Core Behaviour Coverage [SpecLeft] run: specleft enforce .specleft/licenses/policy-core.yml @@ -109,11 +112,12 @@ jobs: with: python-version: '3.12' - - name: Install uv and Sync Dependencies + - name: Install SpecLeft run: | - curl -LsSf https://astral.sh/uv/install.sh | sh - echo "$HOME/.local/bin" >> $GITHUB_PATH - uv sync --frozen + python -m pip install --upgrade pip setuptools wheel + pip cache purge + pip install . + echo "PYTHONPATH=${GITHUB_WORKSPACE}:${PYTHONPATH}" >> $GITHUB_ENV - name: Enforce Feature Intent [SpecLeft] run: specleft enforce .specleft/licenses/policy.yml From 5b56323985875b69ea195b3e3de460ead7ac595d Mon Sep 17 00:00:00 2001 From: Richard-Otterli Date: Tue, 27 Jan 2026 22:01:59 +0000 Subject: [PATCH 3/8] Continue specleft doctor on error --- .github/workflows/specleft-demo.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/specleft-demo.yml b/.github/workflows/specleft-demo.yml index b6455f1..fd5920c 100644 --- a/.github/workflows/specleft-demo.yml +++ b/.github/workflows/specleft-demo.yml @@ -35,8 +35,9 @@ jobs: echo "PYTHONPATH=${GITHUB_WORKSPACE}:${PYTHONPATH}" >> $GITHUB_ENV # Stage 1: Tool Health & Safety - - name: Tool Health Check (Doctor) + - name: Tool Health Check (Doctor) # Skip temporarily run: specleft doctor --format json + continue-on-error: true - name: Agent Safety Contract run: specleft contract --format json From fd39c3a0fb0a32a5cdae24a9822769bd91b59201 Mon Sep 17 00:00:00 2001 From: Richard-Otterli Date: Tue, 27 Jan 2026 23:07:08 +0000 Subject: [PATCH 4/8] Upgrade specleft --- .github/workflows/specleft-demo.yml | 2 +- pyproject.toml | 2 +- uv.lock | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/specleft-demo.yml b/.github/workflows/specleft-demo.yml index fd5920c..b678abd 100644 --- a/.github/workflows/specleft-demo.yml +++ b/.github/workflows/specleft-demo.yml @@ -35,7 +35,7 @@ jobs: echo "PYTHONPATH=${GITHUB_WORKSPACE}:${PYTHONPATH}" >> $GITHUB_ENV # Stage 1: Tool Health & Safety - - name: Tool Health Check (Doctor) # Skip temporarily + - name: Tool Health Check (Doctor) run: specleft doctor --format json continue-on-error: true diff --git a/pyproject.toml b/pyproject.toml index 5eb0532..3086ac4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,5 +10,5 @@ dependencies = [ "passlib[bcrypt]>=1.7.4", "pytest>=9.0.2", "python-jose[cryptography]>=3.5.0", - "specleft>=0.1.0", + "specleft>=0.1.1", ] diff --git a/uv.lock b/uv.lock index 7f55a8b..712908b 100644 --- a/uv.lock +++ b/uv.lock @@ -323,7 +323,7 @@ requires-dist = [ { name = "passlib", extras = ["bcrypt"], specifier = ">=1.7.4" }, { name = "pytest", specifier = ">=9.0.2" }, { name = "python-jose", extras = ["cryptography"], specifier = ">=3.5.0" }, - { name = "specleft", specifier = ">=0.1.0" }, + { name = "specleft", specifier = ">=0.1.1" }, ] [[package]] @@ -1053,7 +1053,7 @@ wheels = [ [[package]] name = "specleft" -version = "0.1.0" +version = "0.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, @@ -1065,9 +1065,9 @@ dependencies = [ { name = "python-slugify" }, { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/61/61/1550ef6e6ed22c43ab7fd4c840a9975f1ce5ea60be58d7f05f8ec456af5c/specleft-0.1.0.tar.gz", hash = "sha256:60eb04f813bbe3b56d4c913ee1da4622d03679bd655f6a1c2005fc213ab0fdd6", size = 68281, upload-time = "2026-01-26T17:15:42.485Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/b0/36f00f01b693735e4d9fc6eba7c6bdd90d109c9ccb6bb5e0b922ad67ccdc/specleft-0.1.1.tar.gz", hash = "sha256:f5632d9d6dfe3047b6dc8fdc5751ee4f561ab83f81c4551d8cd1b8a1240aacad", size = 68283, upload-time = "2026-01-27T22:51:13.517Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ab/63/3eb029ab6d9d7400f631f1fe2140c49654f89434667d74a620a987822bb2/specleft-0.1.0-py3-none-any.whl", hash = "sha256:7f3cfb1ece6df8526eacd3d00b83c91e28b9db61b0daa9dcf7f70af2889e083a", size = 80803, upload-time = "2026-01-26T17:15:41.316Z" }, + { url = "https://files.pythonhosted.org/packages/fa/95/8a93a52255529c296c1f13b0126b9f9258f7d72101996d11b16b2b180236/specleft-0.1.1-py3-none-any.whl", hash = "sha256:1e0a28074960ea97885f9b5107232da97c8429e1911fc76202d0ae4d4513c5f0", size = 80813, upload-time = "2026-01-27T22:51:12.254Z" }, ] [[package]] From 6722c00b0460ba26dcabee4580b2a529f2946d54 Mon Sep 17 00:00:00 2001 From: Richard-Otterli Date: Tue, 27 Jan 2026 23:07:42 +0000 Subject: [PATCH 5/8] Don't continue on error --- .github/workflows/specleft-demo.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/specleft-demo.yml b/.github/workflows/specleft-demo.yml index b678abd..b6455f1 100644 --- a/.github/workflows/specleft-demo.yml +++ b/.github/workflows/specleft-demo.yml @@ -37,7 +37,6 @@ jobs: # Stage 1: Tool Health & Safety - name: Tool Health Check (Doctor) run: specleft doctor --format json - continue-on-error: true - name: Agent Safety Contract run: specleft contract --format json From 26fec19eea86353c5e5297a393618e3715b57556 Mon Sep 17 00:00:00 2001 From: Richard-Otterli Date: Tue, 27 Jan 2026 23:22:40 +0000 Subject: [PATCH 6/8] Fix CI pythonpath --- .github/workflows/specleft-demo.yml | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/.github/workflows/specleft-demo.yml b/.github/workflows/specleft-demo.yml index b6455f1..bf89869 100644 --- a/.github/workflows/specleft-demo.yml +++ b/.github/workflows/specleft-demo.yml @@ -29,8 +29,7 @@ jobs: - name: Install Dependencies run: | - python -m pip install --upgrade pip setuptools wheel - pip cache purge + python -m pip install --upgrade pip pip install . echo "PYTHONPATH=${GITHUB_WORKSPACE}:${PYTHONPATH}" >> $GITHUB_ENV @@ -50,7 +49,6 @@ jobs: run: | pytest --junitxml=report.xml # Continue so we can generate report even if tests fail - continue-on-error: true # Stage 3: Reporting - name: Generate SpecLeft Test Report @@ -85,8 +83,7 @@ jobs: - name: Install SpecLeft run: | - python -m pip install --upgrade pip setuptools wheel - pip cache purge + python -m pip install --upgrade pip pip install . echo "PYTHONPATH=${GITHUB_WORKSPACE}:${PYTHONPATH}" >> $GITHUB_ENV @@ -114,8 +111,7 @@ jobs: - name: Install SpecLeft run: | - python -m pip install --upgrade pip setuptools wheel - pip cache purge + python -m pip install --upgrade pip pip install . echo "PYTHONPATH=${GITHUB_WORKSPACE}:${PYTHONPATH}" >> $GITHUB_ENV From bcce2e5a3ac29418496712f8d82f31d31ef3e3d6 Mon Sep 17 00:00:00 2001 From: Richard-Otterli Date: Tue, 27 Jan 2026 23:32:18 +0000 Subject: [PATCH 7/8] Git ignore. Export pythonpath --- .github/workflows/specleft-demo.yml | 6 +++--- .gitignore | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/specleft-demo.yml b/.github/workflows/specleft-demo.yml index bf89869..a30f711 100644 --- a/.github/workflows/specleft-demo.yml +++ b/.github/workflows/specleft-demo.yml @@ -31,7 +31,7 @@ jobs: run: | python -m pip install --upgrade pip pip install . - echo "PYTHONPATH=${GITHUB_WORKSPACE}:${PYTHONPATH}" >> $GITHUB_ENV + export PYTHONPATH=$PWD:$PYTHONPATH # Stage 1: Tool Health & Safety - name: Tool Health Check (Doctor) @@ -85,7 +85,7 @@ jobs: run: | python -m pip install --upgrade pip pip install . - echo "PYTHONPATH=${GITHUB_WORKSPACE}:${PYTHONPATH}" >> $GITHUB_ENV + export PYTHONPATH=$PWD:$PYTHONPATH - name: Core Behaviour Coverage [SpecLeft] run: specleft enforce .specleft/licenses/policy-core.yml @@ -113,7 +113,7 @@ jobs: run: | python -m pip install --upgrade pip pip install . - echo "PYTHONPATH=${GITHUB_WORKSPACE}:${PYTHONPATH}" >> $GITHUB_ENV + export PYTHONPATH=$PWD:$PYTHONPATH - name: Enforce Feature Intent [SpecLeft] run: specleft enforce .specleft/licenses/policy.yml diff --git a/.gitignore b/.gitignore index 4b09d50..baf4ab5 100644 --- a/.gitignore +++ b/.gitignore @@ -209,3 +209,4 @@ marimo/_lsp/ __marimo__/ FEEDBACK.md report.html +.vscode/settings.json From 636c02bdb3bec5e1921a4e8e2b56edb0449b1504 Mon Sep 17 00:00:00 2001 From: Richard-Otterli Date: Tue, 27 Jan 2026 23:36:09 +0000 Subject: [PATCH 8/8] Pythonpath in CI --- .github/workflows/specleft-demo.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/specleft-demo.yml b/.github/workflows/specleft-demo.yml index a30f711..f40c6ad 100644 --- a/.github/workflows/specleft-demo.yml +++ b/.github/workflows/specleft-demo.yml @@ -31,7 +31,7 @@ jobs: run: | python -m pip install --upgrade pip pip install . - export PYTHONPATH=$PWD:$PYTHONPATH + echo "PYTHONPATH=$GITHUB_WORKSPACE" >> $GITHUB_ENV # Stage 1: Tool Health & Safety - name: Tool Health Check (Doctor) @@ -85,7 +85,7 @@ jobs: run: | python -m pip install --upgrade pip pip install . - export PYTHONPATH=$PWD:$PYTHONPATH + echo "PYTHONPATH=$GITHUB_WORKSPACE" >> $GITHUB_ENV - name: Core Behaviour Coverage [SpecLeft] run: specleft enforce .specleft/licenses/policy-core.yml @@ -113,7 +113,7 @@ jobs: run: | python -m pip install --upgrade pip pip install . - export PYTHONPATH=$PWD:$PYTHONPATH + echo "PYTHONPATH=$GITHUB_WORKSPACE" >> $GITHUB_ENV - name: Enforce Feature Intent [SpecLeft] run: specleft enforce .specleft/licenses/policy.yml