Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
2c9aabf
Add issue 7 implementation generator
KeyffMS Aug 11, 2026
7909748
Run tested issue 7 candidate build
KeyffMS Aug 11, 2026
b402d5f
Correct issue 7 candidate generator
KeyffMS Aug 11, 2026
25cc050
Run corrected tested issue 7 candidate build
KeyffMS Aug 11, 2026
98c42f3
Add issue 8 implementation generator
KeyffMS Aug 11, 2026
f0e16d0
Add issue 9 implementation generator
KeyffMS Aug 11, 2026
9ff5850
Harden issue 8 and 9 candidate generators
KeyffMS Aug 11, 2026
7e395ba
Split issue 8 hardening pass
KeyffMS Aug 11, 2026
01c7c1b
Split issue 9 determinism hardening pass
KeyffMS Aug 11, 2026
c244415
Harden udev monitor and serial exclusivity APIs
KeyffMS Aug 11, 2026
14cac45
Add audited fixups for issues 1, 2 and 4
KeyffMS Aug 11, 2026
9256301
Run complete tested delivery for issues 1 through 9
KeyffMS Aug 11, 2026
80c6ba7
Remove remaining compile and determinism risks
KeyffMS Aug 11, 2026
a4ee82d
Finalize issue 7 API compatibility
KeyffMS Aug 11, 2026
dfb8fc1
Finalize issue 8 capability and Modbus APIs
KeyffMS Aug 11, 2026
743d3e0
Finalize deterministic issue 9 reducer
KeyffMS Aug 11, 2026
de99658
Enforce t3.5 between read retries
KeyffMS Aug 11, 2026
4fb48b8
Run hardened complete delivery for issues 1 through 9
KeyffMS Aug 11, 2026
b1c58ac
Fix closed-state reducer borrow semantics
KeyffMS Aug 11, 2026
87c0b65
Use stable serial error classification
KeyffMS Aug 11, 2026
b99e368
Complete BusActor public boundary and bounded statistics
KeyffMS Aug 11, 2026
81187a5
Keep intentional simulator architecture dependencies
KeyffMS Aug 11, 2026
ae6ffbc
Complete reconnect failures and idempotent shutdown
KeyffMS Aug 11, 2026
6c866fd
Run final complete delivery for issues 1 through 9
KeyffMS Aug 11, 2026
84d3f78
Align pinned libc with nix 0.31.3
KeyffMS Aug 11, 2026
8e28b08
Add final staged completion script
KeyffMS Aug 11, 2026
0a6662a
Run staged completion pipeline v7
KeyffMS Aug 11, 2026
b2772cb
Normalize tokio-serial path API
KeyffMS Aug 11, 2026
1c7781c
Expose backend future and use stable exception conversion
KeyffMS Aug 11, 2026
c2221ad
Derive hardened v8 completion pipeline
KeyffMS Aug 11, 2026
04b4f6d
Run staged completion pipeline v8
KeyffMS Aug 11, 2026
989cf71
Run completion pipeline from agent namespace
KeyffMS Aug 11, 2026
f6602cd
Derive PR-triggered completion pipeline
KeyffMS Aug 11, 2026
b56aa86
Restore the stable lantern-app API after issue #9 generation
KeyffMS Aug 12, 2026
d6602f9
Compact the active session variant and simplify the verified gate
KeyffMS Aug 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions .github/workflows/build-issue7-candidate-v2.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: Build corrected issue 7 candidate

on:
push:
branches: [automation/finish-issues-1-9-v3]

permissions:
contents: write

jobs:
build:
runs-on: ubuntu-24.04
container: debian:trixie-slim@sha256:020c0d20b9880058cbe785a9db107156c3c75c2ac944a6aa7ab59f2add76a7bd
steps:
- name: Install system dependencies
run: |
apt-get update
apt-get install --yes --no-install-recommends \
build-essential ca-certificates git libudev-dev pkg-config python3 rustup
- name: Check out automation branch
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Install pinned Rust toolchain
run: |
rustup toolchain install 1.97.1 --profile minimal --component rustfmt --component clippy
rustup default 1.97.1
- name: Build and validate logical issue 7 commit
id: validate
shell: bash
run: |
set -euo pipefail
exec > >(tee /tmp/issue7-validation.log) 2>&1
git config --global --add safe.directory "$GITHUB_WORKSPACE"
cp automation/issue7.py /tmp/issue7.py
cp automation/patch_issue7_v2.py /tmp/patch_issue7_v2.py
git fetch origin agent/issues-1-9
git checkout -B issue7 origin/agent/issues-1-9
python3 /tmp/issue7.py
python3 /tmp/patch_issue7_v2.py
cargo generate-lockfile
cargo fmt --all
cargo metadata --locked --format-version 1 --no-deps >/dev/null
cargo build --workspace --locked
cargo clippy --workspace --all-targets --all-features --locked -- -D warnings
cargo test --workspace --all-features --locked
cargo doc --workspace --no-deps --locked
sh scripts/check-architecture.sh
sh scripts/check-supply-chain-baseline.sh
git diff --check
git config user.name "vfd-lantern-ci"
git config user.email "actions@users.noreply.github.com"
git add -A
git commit -m "Implement serial discovery and Linux RS-485 support (#7)"
test "$(git rev-list --count origin/main..HEAD)" -eq 7
git push --force origin HEAD:agent/issues-1-9-candidate
- name: Upload validation log
if: always()
uses: actions/upload-artifact@v4
with:
name: issue7-validation-log
path: /tmp/issue7-validation.log
if-no-files-found: warn
retention-days: 1
53 changes: 53 additions & 0 deletions .github/workflows/build-issue7-candidate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Build tested issue 7 candidate

on:
push:
branches: [automation/finish-issues-1-9]

permissions:
contents: write

jobs:
build:
runs-on: ubuntu-24.04
container: debian:trixie-slim@sha256:020c0d20b9880058cbe785a9db107156c3c75c2ac944a6aa7ab59f2add76a7bd
steps:
- name: Install system dependencies
run: |
apt-get update
apt-get install --yes --no-install-recommends \
build-essential ca-certificates git libudev-dev pkg-config python3 rustup
- name: Check out automation branch
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Install pinned Rust toolchain
run: |
rustup toolchain install 1.97.1 --profile minimal --component rustfmt --component clippy
rustup default 1.97.1
- name: Build and validate logical issue 7 commit
shell: bash
run: |
set -euo pipefail
git config --global --add safe.directory "$GITHUB_WORKSPACE"
cp automation/issue7.py /tmp/issue7.py
git fetch origin agent/issues-1-9
git checkout -B issue7 origin/agent/issues-1-9
python3 /tmp/issue7.py
cargo generate-lockfile
cargo fmt --all
cargo metadata --locked --format-version 1 --no-deps >/dev/null
cargo build --workspace --locked
cargo clippy --workspace --all-targets --all-features --locked -- -D warnings
cargo test --workspace --all-features --locked
cargo doc --workspace --no-deps --locked
sh scripts/check-architecture.sh
sh scripts/check-supply-chain-baseline.sh
git diff --check
git config user.name "vfd-lantern-ci"
git config user.email "actions@users.noreply.github.com"
git add -A
git commit -m "Implement serial discovery and Linux RS-485 support (#7)"
test "$(git rev-list --count origin/main..HEAD)" -eq 7
git push --force origin HEAD:agent/issues-1-9-candidate
210 changes: 210 additions & 0 deletions .github/workflows/complete-issues-1-9-v5.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,210 @@
name: Complete and validate issues 1-9 v5

on:
push:
branches: [automation/finish-issues-1-9-v5]

permissions:
contents: write
actions: read
pull-requests: write
issues: write

jobs:
complete:
runs-on: ubuntu-24.04
timeout-minutes: 340
container: debian:trixie-slim@sha256:020c0d20b9880058cbe785a9db107156c3c75c2ac944a6aa7ab59f2add76a7bd
steps:
- name: Install system dependencies
run: |
apt-get update
apt-get install --yes --no-install-recommends \
build-essential ca-certificates gh git jq libudev-dev pkg-config python3 rustup
- name: Check out automation branch and full history
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Install pinned Rust toolchain
run: |
rustup toolchain install 1.97.1 \
--profile minimal --component rustfmt --component clippy --component llvm-tools-preview
rustup default 1.97.1
- name: Build, test and promote nine logical commits
shell: bash
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -euo pipefail
exec > >(tee /tmp/issues-1-9-v5.log) 2>&1
git config --global --add safe.directory "$GITHUB_WORKSPACE"
git config user.name "vfd-lantern-ci"
git config user.email "actions@users.noreply.github.com"

cp automation/issue7.py /tmp/issue7.py
cp automation/patch_issue7_v2.py /tmp/patch_issue7_v2.py
cp automation/patch_issue7_v3.py /tmp/patch_issue7_v3.py
cp automation/patch_issue7_final.py /tmp/patch_issue7_final.py
cp automation/issue8.py /tmp/issue8.py
cp automation/patch_issue8.py /tmp/patch_issue8.py
cp automation/patch_issue8_final.py /tmp/patch_issue8_final.py
cp automation/patch_issue8_timing.py /tmp/patch_issue8_timing.py
cp automation/issue9.py /tmp/issue9.py
cp automation/patch_issue9.py /tmp/patch_issue9.py
cp automation/patch_issue9_final.py /tmp/patch_issue9_final.py
cp automation/audit_fixups.py /tmp/audit_fixups.py

git fetch origin main agent/issues-1-9
git checkout -B delivery origin/agent/issues-1-9

validate_core() {
cargo metadata --locked --format-version 1 --no-deps >/dev/null
cargo build --workspace --locked
cargo fmt --all -- --check
cargo clippy --workspace --all-targets --all-features --locked -- -D warnings
cargo test --workspace --all-features --locked
cargo doc --workspace --no-deps --locked
sh scripts/check-architecture.sh
sh scripts/check-supply-chain-baseline.sh
git diff --check
}

echo '=== issue #7 ==='
python3 /tmp/issue7.py
python3 /tmp/patch_issue7_v2.py
python3 /tmp/patch_issue7_v3.py
python3 /tmp/patch_issue7_final.py
cargo generate-lockfile
cargo fmt --all
validate_core
git add -A
git commit -m "Implement serial discovery and Linux RS-485 support (#7)"
test "$(git rev-list --count origin/main..HEAD)" -eq 7

echo '=== issue #8 ==='
python3 /tmp/issue8.py
python3 /tmp/patch_issue8.py
python3 /tmp/patch_issue8_final.py
python3 /tmp/patch_issue8_timing.py
cargo generate-lockfile
cargo fmt --all
validate_core
git add -A
git commit -m "Implement the single Modbus RTU bus actor (#8)"
test "$(git rev-list --count origin/main..HEAD)" -eq 8

echo '=== issue #9 ==='
python3 /tmp/issue9.py
python3 /tmp/patch_issue9.py
python3 /tmp/patch_issue9_final.py
cargo generate-lockfile
cargo fmt --all
validate_core
git add -A
git commit -m "Implement the verified session state machine (#9)"
test "$(git rev-list --count origin/main..HEAD)" -eq 9

echo '=== audited fixup for #1 ==='
issue1="$(git log --format='%H %s' origin/main..HEAD | awk '/\(#1\)$/ {print $1; exit}')"
python3 /tmp/audit_fixups.py issue1
chmod +x scripts/check-roadmap-contracts.sh
git add -A
git commit --fixup "$issue1"

echo '=== audited fixup for #4 ==='
issue4="$(git log --format='%H %s' origin/main..HEAD | awk '/\(#4\)$/ {print $1; exit}')"
python3 /tmp/audit_fixups.py issue4
mkdir -p crates/lantern-profile/tests/golden
cargo run --locked -p lantern-profile --example dump_canonical \
| python3 -c 'import sys; data=sys.stdin.buffer.read(); sys.stdout.buffer.write(data[:-1] if data.endswith(b"\n") else data)' \
> crates/lantern-profile/tests/golden/canonical-profile-v1.json
cargo generate-lockfile --manifest-path fuzz/Cargo.toml
cargo fmt --all
cargo fmt --manifest-path fuzz/Cargo.toml --all
cargo check --manifest-path fuzz/Cargo.toml --bins --locked
validate_core
git add -A
git commit --fixup "$issue4"

echo '=== audited fixup for #2 and actual supply-chain verification ==='
issue2="$(git log --format='%H %s' origin/main..HEAD | awk '/\(#2\)$/ {print $1; exit}')"
python3 /tmp/audit_fixups.py issue2
chmod +x scripts/check-supply-chain-tools.sh
cargo install --locked cargo-machete --version 0.8.0
cargo install --locked cargo-deny --version 0.18.5
cargo install --locked cargo-audit --version 0.21.2
cargo install --locked cargo-vet --version 0.10.2
cargo machete --fix || true
cargo generate-lockfile
if [ ! -f supply-chain/config.toml ]; then
cargo vet init
fi
sh scripts/check-supply-chain-tools.sh
validate_core
git add -A
git commit --fixup "$issue2"

echo '=== autosquash audited corrections ==='
GIT_SEQUENCE_EDITOR=: git rebase -i --autosquash origin/main

echo '=== final local gate ==='
cargo generate-lockfile
cargo fmt --all
cargo fmt --manifest-path fuzz/Cargo.toml --all
validate_core
cargo check --manifest-path fuzz/Cargo.toml --bins --locked
sh scripts/check-roadmap-contracts.sh
sh scripts/check-supply-chain-tools.sh

test "$(git rev-list --count origin/main..HEAD)" -eq 9
if git log --format='%s' origin/main..HEAD | grep -q '^fixup!'; then
printf 'fixup commit remained after autosquash\n' >&2
exit 1
fi
for number in 1 2 3 4 5 6 7 8 9; do
test "$(git log --format='%s' origin/main..HEAD | grep -Ec "\\(#${number}\\)$")" -eq 1
done
test -z "$(git status --porcelain)"

final_sha="$(git rev-parse HEAD)"
git push --force origin HEAD:agent/issues-1-9-final-candidate-v5

wait_for_workflow() {
workflow="$1"
for _ in $(seq 1 120); do
runs="$(gh api "repos/$GITHUB_REPOSITORY/actions/workflows/$workflow/runs?head_sha=$final_sha&event=push&per_page=20")"
status="$(printf '%s' "$runs" | jq -r --arg sha "$final_sha" '[.workflow_runs[] | select(.head_sha == $sha)] | sort_by(.created_at) | last | .status // empty')"
conclusion="$(printf '%s' "$runs" | jq -r --arg sha "$final_sha" '[.workflow_runs[] | select(.head_sha == $sha)] | sort_by(.created_at) | last | .conclusion // empty')"
if [ "$status" = completed ]; then
test "$conclusion" = success
return 0
fi
sleep 15
done
printf 'timed out waiting for %s\n' "$workflow" >&2
return 1
}
wait_for_workflow ci.yml
wait_for_workflow supply-chain.yml

git push --force-with-lease=refs/heads/agent/issues-1-9:$(git rev-parse origin/agent/issues-1-9) \
origin HEAD:agent/issues-1-9

commit_table="$(git log --reverse --format='- `%h` %s' origin/main..HEAD)"
gh api "repos/$GITHUB_REPOSITORY/issues/33/comments" \
-f body="## Końcowa walidacja #1–#9: PASS

Finalny SHA: \`$final_sha\`

$commit_table

Bramki: Debian 13 Trixie amd64/arm64, fmt, Clippy -D warnings, testy, dokumentacja, PTY/udev/RS-485, BusActor, SessionStateMachine, fuzz check, architecture contracts, cargo machete, cargo deny, cargo audit i cargo vet. Gałąź dostawcza zawiera dokładnie dziewięć logicznych commitów i nie zawiera plików automatyzacyjnych."
- name: Upload completion log
if: always()
uses: actions/upload-artifact@v4
with:
name: issues-1-9-v5-log
path: /tmp/issues-1-9-v5.log
if-no-files-found: warn
retention-days: 2
Loading
Loading