diff --git a/.github/workflows/build-compiler-release.yml b/.github/workflows/build-compiler-release.yml index 1718083447..80cc3ec758 100644 --- a/.github/workflows/build-compiler-release.yml +++ b/.github/workflows/build-compiler-release.yml @@ -4,12 +4,26 @@ name: Build Compiler Release +# NOT 'v*'. This workflow publishes its own release body with its own asset +# table, and so does Binary Release (release.yml). On a v* tag both fired +# against the same tag and whichever finished last overwrote the other's notes +# -- on v10.1.0 the surviving body advertised files the run had not produced. +# `compiler-v*` was already in this list, so a separate namespace was always the +# intent; this just stops the two from racing. +# +# The pull_request trigger is not decoration. Nothing on any pull request built +# src/vibeec, so the tree drifted out of step with zig 0.15 unobserved and the +# first thing to notice was a release tag -- which is the worst possible moment. +# The create-release job below is gated on refs/tags, so a pull request builds +# the four binaries and publishes nothing. on: push: tags: - - 'v*' - 'compiler-v*' - - '!ext-v*' + pull_request: + paths: + - 'src/vibeec/**' + - '.github/workflows/build-compiler-release.yml' workflow_dispatch: env: @@ -25,9 +39,9 @@ jobs: target: [x86_64-linux-gnu, aarch64-linux-gnu] include: - target: x86_64-linux-gnu - binary_name: vibee-linux-x86_64 + binary_name: vibeec-linux-x86_64 - target: aarch64-linux-gnu - binary_name: vibee-linux-aarch64 + binary_name: vibeec-linux-aarch64 steps: - name: Checkout @@ -36,7 +50,7 @@ jobs: fetch-depth: 0 - name: Setup Zig - uses: goto-bus-stop/setup-zig@v2 + uses: mlugg/setup-zig@v2 with: version: ${{ env.ZIG_VERSION }} @@ -47,10 +61,13 @@ jobs: cp zig-out/bin/vibeec ../../${{ matrix.binary_name }} chmod +x ../../${{ matrix.binary_name }} + # Only x86_64 is native on this runner; the aarch64 build cannot be + # executed here. Where it CAN run, it has to run: `|| echo "continuing"` + # made this step incapable of failing, which is not a smoke test. - name: Test binary (if native) run: | if [[ "${{ matrix.target }}" == "x86_64-linux-gnu" ]]; then - ./${{ matrix.binary_name }} --version 2>/dev/null || echo "Version check failed but continuing" + ./${{ matrix.binary_name }} --version fi - name: Upload artifact @@ -62,23 +79,28 @@ jobs: build-macos: name: Build macOS (${{ matrix.target }}) - runs-on: macos-latest + # NOT macos-latest. That image is macOS 26.6 with the Xcode 26.6 SDK, and + # zig 0.15.2 cannot link its own build runner against libc there -- every + # libSystem symbol comes back undefined from build_zcu.o, before any of this + # repository's code is looked at. Measured 2026-09-20: macos-14 (Xcode 15.4) + # links it, macos-latest does not. Same pin, same reason, as release.yml. + runs-on: macos-14 strategy: fail-fast: false matrix: target: [x86_64-macos, aarch64-macos] include: - target: x86_64-macos - binary_name: vibee-macos-x86_64 + binary_name: vibeec-macos-x86_64 - target: aarch64-macos - binary_name: vibee-macos-arm64 + binary_name: vibeec-macos-arm64 steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Zig - uses: goto-bus-stop/setup-zig@v2 + uses: mlugg/setup-zig@v2 with: version: ${{ env.ZIG_VERSION }} @@ -89,9 +111,15 @@ jobs: cp zig-out/bin/vibeec ../../${{ matrix.binary_name }} chmod +x ../../${{ matrix.binary_name }} - - name: Test binary + # macos-14 is an arm64 runner, so only the aarch64 build is native here. + # The old version of this step ran unconditionally and swallowed the + # failure, which is how an x86_64 binary that cannot execute on this + # machine passed a "test binary" step on every release. + - name: Test binary (if native) run: | - ./${{ matrix.binary_name }} --version 2>/dev/null || echo "Version check failed but continuing" + if [[ "${{ matrix.target }}" == "aarch64-macos" ]]; then + ./${{ matrix.binary_name }} --version + fi - name: Upload artifact uses: actions/upload-artifact@v4 @@ -115,20 +143,24 @@ jobs: - name: List artifacts run: | - find . -type f -name "vibee-*" | xargs ls -la + find . -type f -name "vibeec-*" | xargs ls -la - name: Create checksums run: | - for f in vibee-*; do + for f in vibeec-*; do sha256sum "$f" > "$f.sha256" done - name: Create Release uses: softprops/action-gh-release@v2 with: + # The compiler is not the repository's headline artifact -- Binary + # Release is. Leaving this at the action's default (true) would make a + # compiler-v* tag the release users are offered on the front page. + make_latest: false files: | - vibee-* - vibee-*.sha256 + vibeec-* + vibeec-*.sha256 body: | ## VIBEE Compiler ${{ github.ref_name }} @@ -138,39 +170,43 @@ jobs: | Platform | Architecture | Binary | |----------|--------------|--------| - | Linux | x86_64 | `vibee-linux-x86_64` | - | Linux | ARM64 (aarch64) | `vibee-linux-aarch64` | - | macOS | x86_64 (Intel) | `vibee-macos-x86_64` | - | macOS | ARM64 (Apple Silicon) | `vibee-macos-arm64` | + | Linux | x86_64 | `vibeec-linux-x86_64` | + | Linux | ARM64 (aarch64) | `vibeec-linux-aarch64` | + | macOS | x86_64 (Intel) | `vibeec-macos-x86_64` | + | macOS | ARM64 (Apple Silicon) | `vibeec-macos-arm64` | + + This is `vibeec`, the compiler built from `src/vibeec`. It is not the + `vibee` binary shipped by Binary Release — that one comes from the + top-level build. The files used to be named `vibee-*` here, which + made two different programs look like one. ### Installation ```bash # Download appropriate binary - curl -LO https://github.com/gHashTag/vibee-lang/releases/download/${{ github.ref_name }}/vibee-linux-x86_64 + curl -LO https://github.com/gHashTag/trinity/releases/download/${{ github.ref_name }}/vibeec-linux-x86_64 # Make executable - chmod +x vibee-linux-x86_64 + chmod +x vibeec-linux-x86_64 # Move to PATH - sudo mv vibee-linux-x86_64 /usr/local/bin/vibee + sudo mv vibeec-linux-x86_64 /usr/local/bin/vibeec ``` ### Verification ```bash # Check SHA256 - sha256sum -c vibee-linux-x86_64.sha256 + sha256sum -c vibeec-linux-x86_64.sha256 # Test - vibee --version - vibee --help + vibeec --version + vibeec --help ``` ### Notes - All binaries built with `-Doptimize=ReleaseSafe` (safe for all CPUs) - - Zig 0.13.0 used for compilation - - Docker image also available: `ghcr.io/ghashtag/vibee` + - Compiled with Zig ${{ env.ZIG_VERSION }} **Golden Chain is closed. KOSCHEI is immortal.** draft: false diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml deleted file mode 100644 index c3b7745f00..0000000000 --- a/.github/workflows/build-release.yml +++ /dev/null @@ -1,167 +0,0 @@ -# VIBEE Browser - Build & Release -# Creates .dmg (macOS), .exe (Windows), .AppImage (Linux) -# φ² + 1/φ² = 3 | PHOENIX = 999 - -name: Build & Release - -on: - push: - tags: - - 'v*' - - '!ext-v*' - - '!compiler-v*' - workflow_dispatch: - -env: - CARGO_TERM_COLOR: always - -jobs: - build-macos: - runs-on: macos-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '20' - - - name: Setup Rust - uses: dtolnay/rust-toolchain@stable - - - name: Install Tauri CLI - run: cargo install tauri-cli --locked - - - name: Install dependencies - working-directory: vibee-browser - run: npm install - - - name: Build VIBEE Browser (macOS) - working-directory: vibee-browser - run: cargo tauri build - - - name: Upload macOS DMG - uses: actions/upload-artifact@v4 - with: - name: vibee-browser-macos - path: vibee-browser/src-tauri/target/release/bundle/dmg/*.dmg - if-no-files-found: warn - - build-windows: - runs-on: windows-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '20' - - - name: Setup Rust - uses: dtolnay/rust-toolchain@stable - - - name: Install Tauri CLI - run: cargo install tauri-cli --locked - - - name: Install dependencies - working-directory: vibee-browser - run: npm install - - - name: Build VIBEE Browser (Windows) - working-directory: vibee-browser - run: cargo tauri build - - - name: Upload Windows artifacts - uses: actions/upload-artifact@v4 - with: - name: vibee-browser-windows - path: | - vibee-browser/src-tauri/target/release/bundle/msi/*.msi - vibee-browser/src-tauri/target/release/bundle/nsis/*.exe - if-no-files-found: warn - - build-linux: - runs-on: ubuntu-22.04 - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '20' - - - name: Install Linux dependencies - run: | - sudo apt-get update - sudo apt-get install -y \ - libwebkit2gtk-4.1-dev \ - libappindicator3-dev \ - librsvg2-dev \ - patchelf - - - name: Setup Rust - uses: dtolnay/rust-toolchain@stable - - - name: Install Tauri CLI - run: cargo install tauri-cli --locked - - - name: Install dependencies - working-directory: vibee-browser - run: npm install - - - name: Build VIBEE Browser (Linux) - working-directory: vibee-browser - run: cargo tauri build - - - name: Upload Linux artifacts - uses: actions/upload-artifact@v4 - with: - name: vibee-browser-linux - path: | - vibee-browser/src-tauri/target/release/bundle/appimage/*.AppImage - vibee-browser/src-tauri/target/release/bundle/deb/*.deb - if-no-files-found: warn - - release: - needs: [build-macos, build-windows, build-linux] - runs-on: ubuntu-latest - if: startsWith(github.ref, 'refs/tags/') - permissions: - contents: write - steps: - - name: Download all artifacts - uses: actions/download-artifact@v4 - - - name: List artifacts - run: find . -type f -name "*.dmg" -o -name "*.msi" -o -name "*.exe" -o -name "*.AppImage" -o -name "*.deb" - - - name: Create Release - uses: softprops/action-gh-release@v2 - with: - make_latest: true - files: | - vibee-browser-macos/*.dmg - vibee-browser-windows/*.msi - vibee-browser-windows/*.exe - vibee-browser-linux/*.AppImage - vibee-browser-linux/*.deb - body: | - ## VIBEE Browser ${{ github.ref_name }} - - **φ² + 1/φ² = 3 | PHOENIX = 999** - - ### Downloads - - **macOS**: `.dmg` file - - **Windows**: `.msi` or `.exe` file - - **Linux**: `.AppImage` or `.deb` file - - ### Features - - Chrome DevTools Protocol (CDP) integration - - AI Agent automation - - Golden ratio UI (φ = 1.618...) - fail_on_unmatched_files: false diff --git a/.github/workflows/dev-enforcement.yml b/.github/workflows/dev-enforcement.yml index 4f0ae6ceaf..7f48a5f9f3 100644 --- a/.github/workflows/dev-enforcement.yml +++ b/.github/workflows/dev-enforcement.yml @@ -1,62 +1,101 @@ +# Dev Workflow Enforcement +# +# This file has never run a single job. GitHub could not parse it: `steps:` was +# indented under `if:` at what used to be line 54, so `pr-status` had no steps +# key, and an unschedulable workflow is reported as a failed run with an empty +# jobs array and the file path where the name should be. Every branch, every +# push, since c523c41b0. "CI enforcement" that has never executed a step is +# green by absence. +# +# Two of the three jobs were also wrong in ways parsing would not have fixed: +# +# session-check read .trinity/dev_session.json -- a committed snapshot of one +# developer's local session. It holds {"state":"COMMITTED","issue_id":503}, +# while the job queried `.issue_number`, which is null there. So it passed on +# a null, judging every pull request by a file that does not change with the +# pull request. Removed rather than repaired: there is nothing in a local +# session file that describes the branch under test. +# +# ci-check ran `git log -1` with no actions/checkout step, in an empty +# directory. On a pull_request event HEAD is a synthetic merge commit whose +# subject is "Merge ... into ...", so even with a checkout the regex could +# not match. The regex itself was `^\[a-f]+\((feat|fix|...)\(` -- a literal +# `[`, then `a-f`, then parentheses around the type -- which no conventional +# commit has ever matched. And `$COMMIT` was never assigned, so the issue-ID +# branch tested an empty string and took `exit 1` unconditionally. + name: Dev Workflow Enforcement + +# push: [main] is gone with session-check. Every remaining job describes a pull +# request, and there is no pull request on a push. on: pull_request: - types: [opened, synchronize] - push: - branches: [main] + types: [opened, synchronize, closed] jobs: - ci-check: - name: CI Validation + title-check: + name: PR Title Format runs-on: ubuntu-latest + if: github.event.action != 'closed' steps: - - name: Validate Commit Format + # The title is attacker-controlled text. It goes through env, never + # through ${{ }} interpolation into the script body, or a pull request + # named `$(...)` would run that command on the runner. + - name: Validate PR title format + env: + PR_TITLE: ${{ github.event.pull_request.title }} run: | - git log -1 --format=%s | grep -E '^\[a-f]+\((feat|fix|refactor|docs|chore|test|ci)\([^)]+\):' | head -1 - if [[ $(echo "$COMMIT" | grep -oE '(ISSUE-|#)[0-9]+') ]]; then - echo "✅ Valid issue ID format" - else - echo "❌ Missing issue ID (format: feat(scope): description (#123) or fix(scope): description (ISSUE-123))" - exit 1 + set -u + pattern='^(feat|fix|docs|ci|chore|test|refactor|perf|build|style|revert|port|deps|site|website)(\([^)]+\))?!?: .+' + if printf '%s' "$PR_TITLE" | grep -qE "$pattern"; then + echo "OK: $PR_TITLE" + exit 0 fi + echo "Title does not match ${pattern}" + echo " $PR_TITLE" + echo + echo "This is a WARNING, not a failure, and the reason is measured:" + echo "105 of the last 120 merged pull requests match this pattern and" + echo "15 do not -- mostly Russian-language prose titles and 'README:'" + echo "prefixes. Those are a different convention, not malformed input," + echo "and failing them would reject 12.5% of this repository's own" + echo "recent history on a rule nobody has agreed to. To make it" + echo "binding, replace the line below with 'exit 1'." + exit 0 - session-check: - name: Verify Dev Session State + pr-status: + name: Update PR Status runs-on: ubuntu-latest + permissions: + pull-requests: write + # Labelling is cosmetic and must never stand between a change and its + # merge. It also cannot work for a pull request opened from a fork: those + # get a read-only GITHUB_TOKEN no matter what `permissions:` asks for. + continue-on-error: true steps: - - name: Check session state before commit - run: | - if [ ! -f .trinity/dev_session.json ]; then - echo "❌ No dev session found" - exit 1 - fi + - name: Mark in progress + if: github.event.action == 'opened' || github.event.action == 'synchronize' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_NUMBER: ${{ github.event.pull_request.number }} + run: gh pr edit "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --add-label "status:in-progress" - STATE=$(jq -r '.state' .trinity/dev_session.json 2>/dev/null || echo "IDLE") - ISSUE=$(jq -r '.issue_number' .trinity/dev_session.json 2>/dev/null || echo "0") - - if [ "$STATE" != "TESTED" ] && [ "$STATE" != "COMMITTED" ]; then - echo "❌ Invalid state: $STATE (must be TESTED or COMMITTED)" - echo " Run: tri dev test to pass tests" - exit 1 - fi - - if [ "$ISSUE" = "0" ]; then - echo "❌ No active issue" - exit 1 - fi - - echo "✅ Session state valid: $STATE for issue #$ISSUE" + # This step existed before and could never fire: it tested for action + # 'closed' while the workflow only listened for [opened, synchronize]. + # 'closed' is now in the trigger list, so the label finally comes off. + - name: Mark completed on merge + if: github.event.action == 'closed' && github.event.pull_request.merged == true + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_NUMBER: ${{ github.event.pull_request.number }} + run: | + gh pr edit "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" \ + --remove-label "status:in-progress" \ + --add-label "status:completed" - pr-status: - name: Update PR Status - runs-on: ubuntu-latest - if: github.event_name == 'pull_request' - steps: - - name: Add in-progress label - run: | - gh pr edit "$PR_NUMBER" --add-label "status:in-progress" - - name: Update to done when merged - if: github.event.action == 'closed' && github.event.pull_request.merged == true - run: | - gh pr edit "$PR_NUMBER" --remove-label "status:in-progress" - gh pr edit "$PR_NUMBER" --add-label "status:completed" + - name: Drop in-progress on a close without merge + if: github.event.action == 'closed' && github.event.pull_request.merged != true + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_NUMBER: ${{ github.event.pull_request.number }} + run: gh pr edit "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --remove-label "status:in-progress" diff --git a/.github/workflows/extension-release.yml b/.github/workflows/extension-release.yml index aadb8d920a..e1486c789a 100644 --- a/.github/workflows/extension-release.yml +++ b/.github/workflows/extension-release.yml @@ -1,5 +1,12 @@ # NeoDetect Extension Release Workflow # Triggers on extension-specific tags (ext-v*) to avoid conflicts with other releases +# +# Every path here used to point at a top-level directory that no longer exists. +# The tree moved under deploy/trinity-nexus/ and the workflow did not move with +# it, so each step after checkout was operating on a missing directory. The +# move also dropped both manifests and all six icons -- restored from ext-v2.0.0 +# in the same commit as this repoint, because a build that cannot find +# manifest.json produces a zip Chrome will not load. name: Extension Release @@ -38,7 +45,7 @@ jobs: echo "Building extension version: $VERSION" - name: Setup Zig - uses: goto-bus-stop/setup-zig@v2 + uses: mlugg/setup-zig@v2 with: version: 0.15.2 @@ -49,7 +56,7 @@ jobs: - name: Update version in package.json run: | - cd extension + cd deploy/trinity-nexus/extensions VERSION="${{ steps.version.outputs.version }}" jq ".version = \"$VERSION\"" package.json > tmp.json && mv tmp.json package.json cat package.json | grep version @@ -61,28 +68,28 @@ jobs: -O ReleaseFast \ -fno-entry \ -rdynamic \ - -femit-bin=extension/chrome/wasm/neodetect.wasm + -femit-bin=deploy/trinity-nexus/extensions/chrome/wasm/neodetect.wasm - cp extension/chrome/wasm/neodetect.wasm extension/firefox/wasm/ + cp deploy/trinity-nexus/extensions/chrome/wasm/neodetect.wasm deploy/trinity-nexus/extensions/firefox/wasm/ echo "WASM built:" - ls -la extension/chrome/wasm/neodetect.wasm + ls -la deploy/trinity-nexus/extensions/chrome/wasm/neodetect.wasm - name: Update Chrome manifest version run: | - cd extension/chrome + cd deploy/trinity-nexus/extensions/chrome VERSION="${{ steps.version.outputs.version }}" jq ".version = \"$VERSION\"" manifest.json > tmp.json && mv tmp.json manifest.json - name: Update Firefox manifest version run: | - cd extension/firefox + cd deploy/trinity-nexus/extensions/firefox VERSION="${{ steps.version.outputs.version }}" jq ".version = \"$VERSION\"" manifest.json > tmp.json && mv tmp.json manifest.json - name: Sync Firefox files run: | - cd extension + cd deploy/trinity-nexus/extensions # Copy shared files cp chrome/icons/*.png firefox/icons/ cp chrome/wasm/neodetect-loader.js firefox/wasm/ @@ -96,7 +103,7 @@ jobs: - name: Package Chrome extension run: | - cd extension/chrome + cd deploy/trinity-nexus/extensions/chrome VERSION="${{ steps.version.outputs.version }}" zip -r ../neodetect-chrome-v${VERSION}.zip . \ -x "*.DS_Store" \ @@ -110,7 +117,7 @@ jobs: - name: Package Firefox extension run: | - cd extension/firefox + cd deploy/trinity-nexus/extensions/firefox VERSION="${{ steps.version.outputs.version }}" zip -r ../neodetect-firefox-v${VERSION}.zip . \ -x "*.DS_Store" \ @@ -126,13 +133,13 @@ jobs: uses: actions/upload-artifact@v4 with: name: neodetect-chrome - path: extension/neodetect-chrome-*.zip + path: deploy/trinity-nexus/extensions/neodetect-chrome-*.zip - name: Upload Firefox artifact uses: actions/upload-artifact@v4 with: name: neodetect-firefox - path: extension/neodetect-firefox-*.zip + path: deploy/trinity-nexus/extensions/neodetect-firefox-*.zip release: name: Create Release @@ -200,8 +207,8 @@ jobs: ### Links - - [Documentation](https://github.com/gHashTag/trinity/tree/main/extension) - - [Privacy Policy](https://github.com/gHashTag/trinity/blob/main/extension/chrome/PRIVACY_POLICY.md) + - [Documentation](https://github.com/gHashTag/trinity/tree/main/deploy/trinity-nexus/extensions) + - [Privacy Policy](https://github.com/gHashTag/trinity/blob/main/deploy/trinity-nexus/extensions/chrome/PRIVACY_POLICY.md) - [Source Code](https://github.com/gHashTag/trinity) --- @@ -211,12 +218,16 @@ jobs: cat release_notes.md - name: Create GitHub Release - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v2 with: name: NeoDetect v${{ needs.build.outputs.version }} body_path: release_notes.md draft: false prerelease: false + # The browser extension is a side artifact, not the repository's + # headline download. v2 defaults make_latest to true, which would put + # an ext-v* tag at the top of the releases page ahead of Trinity. + make_latest: false files: | ./artifacts/neodetect-chrome-*.zip ./artifacts/neodetect-firefox-*.zip diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f58a633116..8287877ca6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -42,8 +42,9 @@ jobs: mkdir -p release cp zig-out/bin/tri release/tri-linux-amd64 cp zig-out/bin/vibee release/vibee-linux-amd64 - chmod +x release/tri-linux-amd64 release/vibee-linux-amd64 - tar czf trinity-linux-amd64.tar.gz -C release tri-linux-amd64 vibee-linux-amd64 + cp zig-out/bin/firebird release/firebird-linux-amd64 + chmod +x release/tri-linux-amd64 release/vibee-linux-amd64 release/firebird-linux-amd64 + tar czf trinity-linux-amd64.tar.gz -C release tri-linux-amd64 vibee-linux-amd64 firebird-linux-amd64 - name: Upload artifact uses: actions/upload-artifact@v4 @@ -74,8 +75,9 @@ jobs: mkdir -p release cp zig-out/bin/tri release/tri-linux-arm64 cp zig-out/bin/vibee release/vibee-linux-arm64 - chmod +x release/tri-linux-arm64 release/vibee-linux-arm64 - tar czf trinity-linux-arm64.tar.gz -C release tri-linux-arm64 vibee-linux-arm64 + cp zig-out/bin/firebird release/firebird-linux-arm64 + chmod +x release/tri-linux-arm64 release/vibee-linux-arm64 release/firebird-linux-arm64 + tar czf trinity-linux-arm64.tar.gz -C release tri-linux-arm64 vibee-linux-arm64 firebird-linux-arm64 - name: Upload artifact uses: actions/upload-artifact@v4 @@ -111,8 +113,9 @@ jobs: mkdir -p release cp zig-out/bin/tri release/tri-macos-amd64 cp zig-out/bin/vibee release/vibee-macos-amd64 - chmod +x release/tri-macos-amd64 release/vibee-macos-amd64 - tar czf trinity-macos-amd64.tar.gz -C release tri-macos-amd64 vibee-macos-amd64 + cp zig-out/bin/firebird release/firebird-macos-amd64 + chmod +x release/tri-macos-amd64 release/vibee-macos-amd64 release/firebird-macos-amd64 + tar czf trinity-macos-amd64.tar.gz -C release tri-macos-amd64 vibee-macos-amd64 firebird-macos-amd64 - name: Upload artifact uses: actions/upload-artifact@v4 @@ -149,8 +152,9 @@ jobs: mkdir -p release cp zig-out/bin/tri release/tri-macos-arm64 cp zig-out/bin/vibee release/vibee-macos-arm64 - chmod +x release/tri-macos-arm64 release/vibee-macos-arm64 - tar czf trinity-macos-arm64.tar.gz -C release tri-macos-arm64 vibee-macos-arm64 + cp zig-out/bin/firebird release/firebird-macos-arm64 + chmod +x release/tri-macos-arm64 release/vibee-macos-arm64 release/firebird-macos-arm64 + tar czf trinity-macos-arm64.tar.gz -C release tri-macos-arm64 vibee-macos-arm64 firebird-macos-arm64 - name: Upload artifact uses: actions/upload-artifact@v4 @@ -192,7 +196,8 @@ jobs: mkdir -p release cp zig-out/bin/tri.exe release/tri-windows-amd64.exe cp zig-out/bin/vibee.exe release/vibee-windows-amd64.exe - zip trinity-windows-amd64.zip release/tri-windows-amd64.exe release/vibee-windows-amd64.exe + cp zig-out/bin/firebird.exe release/firebird-windows-amd64.exe + zip trinity-windows-amd64.zip release/tri-windows-amd64.exe release/vibee-windows-amd64.exe release/firebird-windows-amd64.exe - name: Upload artifact uses: actions/upload-artifact@v4 @@ -293,6 +298,7 @@ jobs: - **TRI** - Unified Trinity CLI (chat, code, pipeline, all commands) - **VIBEE** - VIBEE compiler (spec → Zig/Verilog) + - **FIREBIRD** - Firebird CLI (`src/firebird`, built ReleaseFast) ### Documentation diff --git a/.github/workflows/trinity-binary-release.yml b/.github/workflows/trinity-binary-release.yml deleted file mode 100644 index ba80b12a67..0000000000 --- a/.github/workflows/trinity-binary-release.yml +++ /dev/null @@ -1,295 +0,0 @@ -# Trinity Core Binary Release Workflow -# Builds cross-platform binaries for v1.0.1 "PURITY" -# Targets: linux/amd64, linux/arm64, macos/amd64, macos/arm64, windows/amd64 -# φ² + 1/φ² = 3 | TRINITY v1.0.1 - -name: Trinity Binary Release - -on: - push: - tags: - - 'v*' - workflow_dispatch: - inputs: - version: - description: 'Version tag (e.g., v1.0.1)' - required: true - default: 'v1.0.1' - -env: - ZIG_VERSION: '0.15.2' - -jobs: - build-linux-amd64: - name: Build Linux AMD64 - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Zig - uses: mlugg/setup-zig@v2 - with: - version: ${{ env.ZIG_VERSION }} - - - name: Build TRI CLI - run: | - # Build with optional dependencies disabled for CI - # raylib=false: GUI tools (node-gui, photon-demo, photon-immersive) - # treesitter=false: AST tools (needle-mcp, trinity-mcp) - zig build -Dtarget=x86_64-linux-gnu.2.35 -Doptimize=ReleaseFast -Draylib=false -Dtreesitter=false - mkdir -p release/linux-amd64 - # Copy binaries - [ -f zig-out/bin/tri ] && cp zig-out/bin/tri release/linux-amd64/ || echo "tri binary not found" - [ -f zig-out/bin/vibee ] && cp zig-out/bin/vibee release/linux-amd64/ || echo "vibee binary not found" - [ -f zig-out/bin/firebird ] && cp zig-out/bin/firebird release/linux-amd64/ || echo "firebird binary not found" - chmod +x release/linux-amd64/* 2>/dev/null || true - - - name: Create tarball - run: | - cd release/linux-amd64 - tar czvf ../trinity-${{ github.ref_name }}-linux-amd64.tar.gz * - cd ../.. - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: trinity-linux-amd64 - path: release/trinity-*-linux-amd64.tar.gz - - build-linux-arm64: - name: Build Linux ARM64 - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Zig - uses: mlugg/setup-zig@v2 - with: - version: ${{ env.ZIG_VERSION }} - - - name: Build TRI CLI - run: | - zig build -Dtarget=aarch64-linux-gnu.2.35 -Doptimize=ReleaseFast -Draylib=false -Dtreesitter=false - mkdir -p release/linux-arm64 - [ -f zig-out/bin/tri ] && cp zig-out/bin/tri release/linux-arm64/ || echo "tri binary not found" - [ -f zig-out/bin/vibee ] && cp zig-out/bin/vibee release/linux-arm64/ || echo "vibee binary not found" - [ -f zig-out/bin/firebird ] && cp zig-out/bin/firebird release/linux-arm64/ || echo "firebird binary not found" - chmod +x release/linux-arm64/* 2>/dev/null || true - - - name: Create tarball - run: | - cd release/linux-arm64 - tar czvf ../trinity-${{ github.ref_name }}-linux-arm64.tar.gz * - cd ../.. - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: trinity-linux-arm64 - path: release/trinity-*-linux-arm64.tar.gz - - build-macos-amd64: - name: Build macOS AMD64 - runs-on: macos-13 - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Zig - uses: mlugg/setup-zig@v2 - with: - version: ${{ env.ZIG_VERSION }} - - - name: Build TRI CLI - run: | - zig build -Dtarget=x86_64-macos-gnu -Doptimize=ReleaseFast -Draylib=false -Dtreesitter=false - mkdir -p release/macos-amd64 - [ -f zig-out/bin/tri ] && cp zig-out/bin/tri release/macos-amd64/ || echo "tri binary not found" - [ -f zig-out/bin/vibee ] && cp zig-out/bin/vibee release/macos-amd64/ || echo "vibee binary not found" - [ -f zig-out/bin/firebird ] && cp zig-out/bin/firebird release/macos-amd64/ || echo "firebird binary not found" - chmod +x release/macos-amd64/* 2>/dev/null || true - - - name: Create zip - run: | - cd release/macos-amd64 - zip -r ../../trinity-${{ github.ref_name }}-macos-amd64.zip * - cd ../.. - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: trinity-macos-amd64 - path: release/trinity-*-macos-amd64.zip - - build-macos-arm64: - name: Build macOS ARM64 - runs-on: macos-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Zig - uses: mlugg/setup-zig@v2 - with: - version: ${{ env.ZIG_VERSION }} - - - name: Build TRI CLI - run: | - zig build -Dtarget=aarch64-macos-gnu -Doptimize=ReleaseSafe -Draylib=false -Dtreesitter=false - mkdir -p release/macos-arm64 - [ -f zig-out/bin/tri ] && cp zig-out/bin/tri release/macos-arm64/ || echo "tri binary not found" - [ -f zig-out/bin/vibee ] && cp zig-out/bin/vibee release/macos-arm64/ || echo "vibee binary not found" - [ -f zig-out/bin/firebird ] && cp zig-out/bin/firebird release/macos-arm64/ || echo "firebird binary not found" - chmod +x release/macos-arm64/* 2>/dev/null || true - - - name: Create zip - run: | - cd release/macos-arm64 - zip -r ../../trinity-${{ github.ref_name }}-macos-arm64.zip * - cd ../.. - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: trinity-macos-arm64 - path: release/trinity-*-macos-arm64.zip - - build-windows: - name: Build Windows AMD64 - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Zig - uses: mlugg/setup-zig@v2 - with: - version: ${{ env.ZIG_VERSION }} - - - name: Build TRI CLI - run: | - zig build -Dtarget=x86_64-windows-gnu -Doptimize=ReleaseFast -Draylib=false -Dtreesitter=false - mkdir -p release/windows-amd64 - [ -f zig-out/bin/tri.exe ] && cp zig-out/bin/tri.exe release/windows-amd64/ || echo "tri binary not found" - [ -f zig-out/bin/vibee.exe ] && cp zig-out/bin/vibee.exe release/windows-amd64/ || echo "vibee binary not found" - [ -f zig-out/bin/firebird.exe ] && cp zig-out/bin/firebird.exe release/windows-amd64/ || echo "firebird binary not found" - - - name: Create zip - run: | - cd release/windows-amd64 - zip -r ../../trinity-${{ github.ref_name }}-windows-amd64.zip * - cd ../.. - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: trinity-windows-amd64 - path: release/trinity-*-windows-amd64.zip - - generate-checksums: - name: Generate Checksums - runs-on: ubuntu-latest - needs: [build-linux-amd64, build-linux-arm64, build-macos-amd64, build-macos-arm64, build-windows] - steps: - - name: Download all artifacts - uses: actions/download-artifact@v4 - with: - path: release - - - name: Generate SHA256 checksums - run: | - cd release - find . -type f \( -name "*.tar.gz" -o -name "*.zip" \) -exec sha256sum {} \; > SHA256SUMS.txt - cat SHA256SUMS.txt - - - name: Upload checksums - uses: actions/upload-artifact@v4 - with: - name: checksums - path: release/SHA256SUMS.txt - - release: - name: Create GitHub Release - runs-on: ubuntu-latest - needs: [generate-checksums] - if: startsWith(github.ref, 'refs/tags/') - permissions: - contents: write - steps: - - name: Download all artifacts - uses: actions/download-artifact@v4 - with: - path: release - - - name: Create Release - uses: softprops/action-gh-release@v2 - with: - make_latest: true - files: | - release/trinity-*/*.tar.gz - release/trinity-*/*.zip - release/checksums/SHA256SUMS.txt - body: | - # Trinity ${{ github.ref_name }} "PURITY" - - **φ² + 1/φ² = 3 | TRINITY v1.0.1** - - ## Downloads - - | Platform | Architecture | Download | - |----------|-------------|----------| - | Linux | AMD64 | `trinity-${{ github.ref_name }}-linux-amd64.tar.gz` | - | Linux | ARM64 | `trinity-${{ github.ref_name }}-linux-arm64.tar.gz` | - | macOS | Intel | `trinity-${{ github.ref_name }}-macos-amd64.zip` | - | macOS | Apple Silicon | `trinity-${{ github.ref_name }}-macos-arm64.zip` | - | Windows | AMD64 | `trinity-${{ github.ref_name }}-windows-amd64.zip` | - - ## Verification - - ```bash - # Verify SHA256 checksum - sha256sum -c SHA256SUMS.txt - ``` - - ## Quick Start - - ```bash - # Extract and run - tar xzf trinity-${{ github.ref_name }}-linux-amd64.tar.gz - ./tri --help - - # Or with Docker - docker pull ghcr.io/ghashtag/trinity:${{ github.ref_name }} - docker run ghcr.io/ghashtag/trinity:${{ github.ref_name }} tri --help - ``` - - ## What's Included - - - **tri**: Unified Trinity CLI (195+ commands) - - **vibee**: VIBEE specification compiler - - **firebird**: BitNet-to-Ternary inference engine - - ## Documentation - - - Full API Reference: https://gHashTag.github.io/trinity/docs/api - - Quick Start: https://gHashTag.github.io/trinity/docs/quick-start - - GitHub Repository: https://github.com/gHashTag/trinity - - ## Performance - - - ARM64 NEON SIMD: 2.96x - 41.65x speedup - - Memory Efficiency: 20x vs float32 - - VSA Operations: 1000+ ops/ms - fail_on_unmatched_files: false diff --git a/.gitignore b/.gitignore index bad690c296..6108be3f77 100644 --- a/.gitignore +++ b/.gitignore @@ -375,7 +375,12 @@ bindings/ contracts/ demo/ demos/ -extensions/ +# Anchored 2026-09-20, same defect as website/ below. Unanchored, `extensions/` +# matched deploy/trinity-nexus/extensions at depth 3 and silently swallowed both +# browser manifests and all six icons when that tree was moved there -- the 53 +# already-tracked files kept working, so nothing looked wrong, and Extension +# Release built zips with no manifest.json in them for months. +/extensions/ homebrew-tap/ install.sh k8s/ @@ -387,7 +392,10 @@ packages/ runtime/ translator-app/ tree-sitter-vibee/ -trinity-nexus/ +# Anchored for the same reason: it matched deploy/trinity-nexus, where 2988 +# files are tracked. No top-level trinity-nexus/ exists, so the rule was +# protecting nothing and hiding real source. +/trinity-nexus/ # website/ removed 2026-08-10: it matched apps/website at any depth and silently # excluded every NEW file in the site source, while already-tracked files kept working. # Build output is handled by apps/website/.gitignore (node_modules, dist). diff --git a/deploy/trinity-nexus/extensions/chrome/icons/icon128.png b/deploy/trinity-nexus/extensions/chrome/icons/icon128.png new file mode 100644 index 0000000000..d39d91956b Binary files /dev/null and b/deploy/trinity-nexus/extensions/chrome/icons/icon128.png differ diff --git a/deploy/trinity-nexus/extensions/chrome/icons/icon128.svg b/deploy/trinity-nexus/extensions/chrome/icons/icon128.svg new file mode 100644 index 0000000000..19090853d7 --- /dev/null +++ b/deploy/trinity-nexus/extensions/chrome/icons/icon128.svg @@ -0,0 +1,4 @@ + + + 🔥 + diff --git a/deploy/trinity-nexus/extensions/chrome/icons/icon16.png b/deploy/trinity-nexus/extensions/chrome/icons/icon16.png new file mode 100644 index 0000000000..fe2bce4877 Binary files /dev/null and b/deploy/trinity-nexus/extensions/chrome/icons/icon16.png differ diff --git a/deploy/trinity-nexus/extensions/chrome/icons/icon16.svg b/deploy/trinity-nexus/extensions/chrome/icons/icon16.svg new file mode 100644 index 0000000000..ab781e69e4 --- /dev/null +++ b/deploy/trinity-nexus/extensions/chrome/icons/icon16.svg @@ -0,0 +1,4 @@ + + + 🔥 + diff --git a/deploy/trinity-nexus/extensions/chrome/icons/icon48.png b/deploy/trinity-nexus/extensions/chrome/icons/icon48.png new file mode 100644 index 0000000000..4a52498c91 Binary files /dev/null and b/deploy/trinity-nexus/extensions/chrome/icons/icon48.png differ diff --git a/deploy/trinity-nexus/extensions/chrome/icons/icon48.svg b/deploy/trinity-nexus/extensions/chrome/icons/icon48.svg new file mode 100644 index 0000000000..465a934546 --- /dev/null +++ b/deploy/trinity-nexus/extensions/chrome/icons/icon48.svg @@ -0,0 +1,4 @@ + + + 🔥 + diff --git a/deploy/trinity-nexus/extensions/chrome/manifest.json b/deploy/trinity-nexus/extensions/chrome/manifest.json new file mode 100644 index 0000000000..f2b5a3849e --- /dev/null +++ b/deploy/trinity-nexus/extensions/chrome/manifest.json @@ -0,0 +1,58 @@ +{ + "manifest_version": 3, + "name": "NeoDetect Anti-Detect", + "version": "2.0.0", + "description": "Advanced antidetect browser with WASM-powered fingerprint protection. Canvas, WebGL, Audio, Navigator spoofing. Cross-OS emulation.", + "homepage_url": "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/gHashTag/trinity", + + "icons": { + "16": "icons/icon16.png", + "48": "icons/icon48.png", + "128": "icons/icon128.png" + }, + + "action": { + "default_popup": "popup/popup.html", + "default_icon": { + "16": "icons/icon16.png", + "48": "icons/icon48.png" + }, + "default_title": "NeoDetect" + }, + + "background": { + "service_worker": "background/service-worker.js", + "type": "module" + }, + + "content_scripts": [ + { + "matches": [""], + "js": ["content/content.js"], + "run_at": "document_start", + "all_frames": true + } + ], + + "permissions": [ + "storage", + "activeTab", + "scripting", + "alarms" + ], + + "host_permissions": [ + "" + ], + + "web_accessible_resources": [ + { + "resources": ["wasm/*", "wasm/neodetect.wasm", "wasm/neodetect-loader.js", "content/inject.js"], + "matches": [""] + } + ], + + "content_security_policy": { + "extension_pages": "script-src 'self' 'wasm-unsafe-eval'; object-src 'self'" + } +} diff --git a/deploy/trinity-nexus/extensions/firefox/icons/icon128.png b/deploy/trinity-nexus/extensions/firefox/icons/icon128.png new file mode 100644 index 0000000000..d39d91956b Binary files /dev/null and b/deploy/trinity-nexus/extensions/firefox/icons/icon128.png differ diff --git a/deploy/trinity-nexus/extensions/firefox/icons/icon16.png b/deploy/trinity-nexus/extensions/firefox/icons/icon16.png new file mode 100644 index 0000000000..fe2bce4877 Binary files /dev/null and b/deploy/trinity-nexus/extensions/firefox/icons/icon16.png differ diff --git a/deploy/trinity-nexus/extensions/firefox/icons/icon48.png b/deploy/trinity-nexus/extensions/firefox/icons/icon48.png new file mode 100644 index 0000000000..4a52498c91 Binary files /dev/null and b/deploy/trinity-nexus/extensions/firefox/icons/icon48.png differ diff --git a/deploy/trinity-nexus/extensions/firefox/manifest.json b/deploy/trinity-nexus/extensions/firefox/manifest.json new file mode 100644 index 0000000000..82ec800202 --- /dev/null +++ b/deploy/trinity-nexus/extensions/firefox/manifest.json @@ -0,0 +1,59 @@ +{ + "manifest_version": 2, + "name": "NeoDetect Anti-Detect", + "version": "2.0.0", + "description": "Advanced antidetect browser with WASM-powered fingerprint protection. Canvas, WebGL, Audio, Navigator spoofing. Cross-OS emulation.", + "homepage_url": "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/gHashTag/trinity", + + "browser_specific_settings": { + "gecko": { + "id": "neodetect@trinity.dev", + "strict_min_version": "109.0" + } + }, + + "icons": { + "16": "icons/icon16.png", + "48": "icons/icon48.png", + "128": "icons/icon128.png" + }, + + "browser_action": { + "default_popup": "popup/popup.html", + "default_icon": { + "16": "icons/icon16.png", + "48": "icons/icon48.png" + }, + "default_title": "NeoDetect" + }, + + "background": { + "scripts": ["background/background.js"], + "persistent": false + }, + + "content_scripts": [ + { + "matches": [""], + "js": ["content/content.js"], + "run_at": "document_start", + "all_frames": true + } + ], + + "permissions": [ + "storage", + "activeTab", + "", + "alarms" + ], + + "web_accessible_resources": [ + "wasm/*", + "wasm/neodetect.wasm", + "wasm/neodetect-loader.js", + "content/inject.js" + ], + + "content_security_policy": "script-src 'self' 'wasm-unsafe-eval'; object-src 'self'" +} diff --git a/src/vibeec/ast.zig b/src/vibeec/ast.zig index 29792d465f..e11d417d32 100644 --- a/src/vibeec/ast.zig +++ b/src/vibeec/ast.zig @@ -9,7 +9,7 @@ const std = @import("std"); const Allocator = std.mem.Allocator; -const ArrayList = std.ArrayList; +const ArrayList = std.array_list.Managed; // ═══════════════════════════════════════════════════════════════════════════════ // SACRED CONSTANTS diff --git a/src/vibeec/benchmark.zig b/src/vibeec/benchmark.zig index 6ef34ef0d5..8323818cee 100644 --- a/src/vibeec/benchmark.zig +++ b/src/vibeec/benchmark.zig @@ -7,7 +7,7 @@ const json_parser = @import("json_parser.zig"); const simd_json = @import("simd_json.zig"); pub fn main() !void { - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); try stdout.print("\n", .{}); try stdout.print("╔══════════════════════════════════════════════════════════════════╗\n", .{}); diff --git a/src/vibeec/benchmark_ternary_vs_binary.zig b/src/vibeec/benchmark_ternary_vs_binary.zig index 1c480153c1..51e6019631 100644 --- a/src/vibeec/benchmark_ternary_vs_binary.zig +++ b/src/vibeec/benchmark_ternary_vs_binary.zig @@ -150,7 +150,7 @@ fn benchmark(comptime name: []const u8, comptime func: anytype) u64 { // ═══════════════════════════════════════════════════════════════════════════════ pub fn main() !void { - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); try stdout.print("\n", .{}); try stdout.print("═══════════════════════════════════════════════════════════════════════════════\n", .{}); diff --git a/src/vibeec/benchmark_trinity.zig b/src/vibeec/benchmark_trinity.zig index 8e25936001..6283499148 100644 --- a/src/vibeec/benchmark_trinity.zig +++ b/src/vibeec/benchmark_trinity.zig @@ -262,6 +262,6 @@ test "golden identity" { } pub fn main() !void { - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); try generateComparisonTable(stdout); } diff --git a/src/vibeec/bitnet_pipeline.zig b/src/vibeec/bitnet_pipeline.zig index 8be73991f1..6ff7e3bcc9 100644 --- a/src/vibeec/bitnet_pipeline.zig +++ b/src/vibeec/bitnet_pipeline.zig @@ -752,7 +752,7 @@ pub const BitNetModel = struct { /// Generate text autoregressively pub fn generate(self: *BitNetModel, prompt_tokens: []const u32, max_new_tokens: usize, temperature: f32, top_p: f32) ![]u32 { - var tokens = std.ArrayList(u32).init(self.allocator); + var tokens = std.array_list.Managed(u32).init(self.allocator); try tokens.appendSlice(prompt_tokens); // Clear KV caches diff --git a/src/vibeec/bytecode.zig b/src/vibeec/bytecode.zig index 83330f1db5..ca30c5e2ba 100644 --- a/src/vibeec/bytecode.zig +++ b/src/vibeec/bytecode.zig @@ -9,7 +9,7 @@ const std = @import("std"); const Allocator = std.mem.Allocator; -const ArrayList = std.ArrayList; +const ArrayList = std.array_list.Managed; // ═══════════════════════════════════════════════════════════════════════════════ // SACRED CONSTANTS diff --git a/src/vibeec/chrome_headless_demo.zig b/src/vibeec/chrome_headless_demo.zig index 9335900ac6..f118b2e742 100644 --- a/src/vibeec/chrome_headless_demo.zig +++ b/src/vibeec/chrome_headless_demo.zig @@ -6,8 +6,8 @@ const std = @import("std"); const chrome_launcher = @import("chrome_launcher.zig"); pub fn main() !void { - const stdout = std.io.getStdOut().writer(); - const stderr = std.io.getStdErr().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); + const stderr = std.fs.File.stderr().deprecatedWriter(); const allocator = std.heap.page_allocator; diff --git a/src/vibeec/chrome_integration_test.zig b/src/vibeec/chrome_integration_test.zig index 791fcbb969..22598ab6ca 100644 --- a/src/vibeec/chrome_integration_test.zig +++ b/src/vibeec/chrome_integration_test.zig @@ -6,8 +6,8 @@ const std = @import("std"); const chrome_launcher = @import("chrome_launcher.zig"); pub fn main() !void { - const stdout = std.io.getStdOut().writer(); - const stderr = std.io.getStdErr().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); + const stderr = std.fs.File.stderr().deprecatedWriter(); const allocator = std.heap.page_allocator; diff --git a/src/vibeec/cli.zig b/src/vibeec/cli.zig index 21aa176543..40b0a13bbc 100644 --- a/src/vibeec/cli.zig +++ b/src/vibeec/cli.zig @@ -73,7 +73,7 @@ pub const CLI = struct { const Self = @This(); pub fn init(allocator: Allocator, force_color: ?bool) Self { - const stdout = std.io.getStdOut(); + const stdout = std.fs.File.stdout(); return Self{ .allocator = allocator, .writer = ColorWriter.init(stdout.writer().any(), force_color), diff --git a/src/vibeec/competitive_repl.zig b/src/vibeec/competitive_repl.zig index 046c79c666..35d24c1b8b 100644 --- a/src/vibeec/competitive_repl.zig +++ b/src/vibeec/competitive_repl.zig @@ -148,8 +148,8 @@ pub const CompetitiveRepl = struct { /// Main REPL loop pub fn run(self: *Self) !void { - const stdin = std.io.getStdIn().reader(); - const stdout = std.io.getStdOut().writer(); + const stdin = std.fs.File.stdin().deprecatedReader(); + const stdout = std.fs.File.stdout().deprecatedWriter(); try self.printBanner(stdout); diff --git a/src/vibeec/compiler.zig b/src/vibeec/compiler.zig index ad90c63fa5..dd1c160c2c 100644 --- a/src/vibeec/compiler.zig +++ b/src/vibeec/compiler.zig @@ -9,7 +9,15 @@ const std = @import("std"); const Allocator = std.mem.Allocator; -const ArrayList = std.ArrayList; +// std.ArrayList became the UNMANAGED list in zig 0.15, so `.init(allocator)` is +// gone from it and every call site here would have to start passing an +// allocator to append/deinit/toOwnedSlice. std.array_list.Managed is the old +// type under its new name -- same API, so this is a rename, not a migration. +// The migration is real work and this tree is doing it file by file: the files +// already through it say `const ArrayList = std.ArrayListUnmanaged;` at this +// line (parser_v3, type_checker, verilog_codegen, gen_vibee_parser, +// gen_parser_types). The ones that still say Managed have not been done yet. +const ArrayList = std.array_list.Managed; // Import all compiler components const parser = @import("parser_v3.zig"); @@ -183,7 +191,7 @@ pub const Compiler = struct { // Phase 1: Parse const parse_start = std.time.nanoTimestamp(); var spec = self.parser.parse(source) catch |err| { - var writer = error_reporter.ColorWriter.init(std.io.getStdOut().writer().any(), true); + var writer = error_reporter.ColorWriter.init(std.fs.File.stdout().deprecatedWriter().any(), true); try writer.printColored(.red, "Parse error: {}\n", .{err}); try writer.printColored(.yellow, " Run './bin/vibeec validate ' for detailed validation\n", .{}); return CompileResult{ @@ -204,7 +212,7 @@ pub const Compiler = struct { if (self.options.enable_type_check) { const tc_start = std.time.nanoTimestamp(); var tc_result = self.type_checker.check(&spec) catch |err| { - const stderr = std.io.getStdErr().writer(); + const stderr = std.fs.File.stderr().deprecatedWriter(); var writer = error_reporter.ColorWriter.init(stderr.any(), true); try writer.printColored(.red, "Type check error: {}\n", .{err}); try writer.printColored(.yellow, " Run './bin/vibeec gen --no-type-check' to skip\n", .{}); @@ -226,7 +234,7 @@ pub const Compiler = struct { if (!tc_result.success) { metrics.error_count = @intCast(tc_result.errors.items.len); - const stderr = std.io.getStdErr().writer(); + const stderr = std.fs.File.stderr().deprecatedWriter(); var writer = error_reporter.ColorWriter.init(stderr.any(), true); try writer.printColored(.red, "Type check failed: {} errors\n", .{tc_result.errors.items.len}); try writer.printColored(.yellow, " Suggestion: Use '--no-type-check' for complex nested structures\n", .{}); @@ -236,7 +244,7 @@ pub const Compiler = struct { // Phase 3: Code Generation const cg_start = std.time.nanoTimestamp(); var cg = CodegenV4.init(self.allocator, self.options.target) catch |err| { - var writer = error_reporter.ColorWriter.init(std.io.getStdOut().writer().any(), true); + var writer = error_reporter.ColorWriter.init(std.fs.File.stdout().deprecatedWriter().any(), true); try writer.printColored(.red, "Codegen init error: {}\n", .{err}); return CompileResult{ .success = false, @@ -251,7 +259,7 @@ pub const Compiler = struct { defer cg.deinit(); const gen_result = cg.generate(&spec) catch |err| { - var writer = error_reporter.ColorWriter.init(std.io.getStdOut().writer().any(), true); + var writer = error_reporter.ColorWriter.init(std.fs.File.stdout().deprecatedWriter().any(), true); try writer.printColored(.red, "Codegen generate error: {}\n", .{err}); try writer.printColored(.yellow, " Suggestion: Check specification syntax and required fields\n", .{}); return CompileResult{ @@ -390,7 +398,7 @@ pub fn main() !u8 { defer @constCast(&result).deinit(); if (result.success) { - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); try stdout.print("✓ Compiled {s} successfully\n", .{input_path}); // Write output files @@ -425,7 +433,7 @@ pub fn main() !u8 { } return 0; } else { - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); var writer = error_reporter.ColorWriter.init(stdout.any(), true); try writer.printColored(.red, "✗ Failed to compile {s}\n", .{input_path}); @@ -471,7 +479,7 @@ pub fn main() !u8 { } fn printSimpleHelp() void { - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); stdout.print( \\ \\ ╔═══════════════════════════════════════════════════════════╗ @@ -510,7 +518,7 @@ fn printSimpleHelp() void { } fn printVersion() void { - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); stdout.print( \\VIBEEC v22.0.0 \\φ = 1.618033988749895 @@ -521,7 +529,7 @@ fn printVersion() void { } fn printPASInfo() void { - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); stdout.print( \\ \\ PAS DAEMONS - Predictive Algorithmic Systematics @@ -548,7 +556,7 @@ fn printPhiInfo() void { const inv_phi_sq = 1.0 / phi_sq; const golden = phi_sq + inv_phi_sq; - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); stdout.print( \\ \\ SACRED CONSTANTS @@ -563,7 +571,7 @@ fn printPhiInfo() void { } fn evalTernary(expr: []const u8) void { - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); stdout.print( \\ \\ TERNARY EVAL: {s} @@ -581,7 +589,7 @@ fn evalTernary(expr: []const u8) void { } fn printAgentStatus() void { - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); // Check API keys const anthropic_key = std.posix.getenv("ANTHROPIC_API_KEY"); @@ -627,7 +635,7 @@ fn printAgentStatus() void { } fn printConfig() void { - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); const anthropic_key = std.posix.getenv("ANTHROPIC_API_KEY"); const openai_key = std.posix.getenv("OPENAI_API_KEY"); @@ -678,8 +686,8 @@ fn printConfig() void { fn runChat(allocator: std.mem.Allocator) !u8 { _ = allocator; - const stdout = std.io.getStdOut().writer(); - const stdin = std.io.getStdIn().reader(); + const stdout = std.fs.File.stdout().deprecatedWriter(); + const stdin = std.fs.File.stdin().deprecatedReader(); // Check for API keys const anthropic_key = std.posix.getenv("ANTHROPIC_API_KEY"); @@ -805,7 +813,7 @@ fn runChat(allocator: std.mem.Allocator) !u8 { } fn printChatHelp() void { - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); stdout.print( \\ \\ CHAT COMMANDS @@ -824,7 +832,7 @@ fn printChatHelp() void { fn launchAgent(allocator: std.mem.Allocator, args: []const []const u8) !u8 { // Build command for vibee-agent - var argv = std.ArrayList([]const u8).init(allocator); + var argv = std.array_list.Managed([]const u8).init(allocator); defer argv.deinit(); // Find the agent script relative to the binary @@ -844,7 +852,7 @@ fn launchAgent(allocator: std.mem.Allocator, args: []const []const u8) !u8 { child.stderr_behavior = .Inherit; _ = child.spawnAndWait() catch |err| { - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); stdout.print("Failed to launch agent: {}\n", .{err}) catch {}; stdout.print("\nRun directly: ./bin/vibee-agent\n", .{}) catch {}; return 1; diff --git a/src/vibeec/e2e_test.zig b/src/vibeec/e2e_test.zig index ba8e05f7c4..e0feab9fc0 100644 --- a/src/vibeec/e2e_test.zig +++ b/src/vibeec/e2e_test.zig @@ -601,7 +601,7 @@ pub const E2ETestSuite = struct { /// Print results pub fn printResults(self: *Self) void { - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); stdout.print("\n", .{}) catch {}; stdout.print("╔══════════════════════════════════════════════════════════════════╗\n", .{}) catch {}; diff --git a/src/vibeec/error_reporter.zig b/src/vibeec/error_reporter.zig index 952fdc6026..8ef6c8d37a 100644 --- a/src/vibeec/error_reporter.zig +++ b/src/vibeec/error_reporter.zig @@ -8,7 +8,7 @@ const std = @import("std"); const Allocator = std.mem.Allocator; -const ArrayList = std.ArrayList; +const ArrayList = std.array_list.Managed; // ═══════════════════════════════════════════════════════════════════════════════ // SACRED CONSTANTS @@ -78,7 +78,7 @@ pub const ColorWriter = struct { fn detectTty() bool { // Check if stdout is a TTY - const stdout = std.io.getStdOut(); + const stdout = std.fs.File.stdout(); return std.io.tty.detectConfig(stdout) != .no_color; } @@ -400,9 +400,9 @@ pub const ErrorReporter = struct { pub fn init(allocator: Allocator, source: []const u8, file_name: []const u8) !Self { var self = Self{ .allocator = allocator, - .diagnostics = std.ArrayList(Diagnostic).init(allocator), + .diagnostics = ArrayList(Diagnostic).init(allocator), .source = source, - .source_lines = std.ArrayList([]const u8).init(allocator), + .source_lines = ArrayList([]const u8).init(allocator), .file_name = file_name, .error_count = 0, .warning_count = 0, diff --git a/src/vibeec/full_matrix_benchmark.zig b/src/vibeec/full_matrix_benchmark.zig index 0a975b9d11..dec0c21024 100644 --- a/src/vibeec/full_matrix_benchmark.zig +++ b/src/vibeec/full_matrix_benchmark.zig @@ -117,7 +117,7 @@ pub fn main() !void { defer _ = gpa.deinit(); const allocator = gpa.allocator(); - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); try stdout.writeAll("\n"); try stdout.writeAll("═══════════════════════════════════════════════════════════════════════════════\n"); diff --git a/src/vibeec/jit.zig b/src/vibeec/jit.zig index e63c6d4989..8ced1cc699 100644 --- a/src/vibeec/jit.zig +++ b/src/vibeec/jit.zig @@ -9,7 +9,7 @@ const std = @import("std"); const Allocator = std.mem.Allocator; -const ArrayList = std.ArrayList; +const ArrayList = std.array_list.Managed; const bytecode = @import("bytecode.zig"); const Opcode = bytecode.Opcode; const Value = bytecode.Value; diff --git a/src/vibeec/kv_cache.zig b/src/vibeec/kv_cache.zig index 82872e3ad3..09245e78fd 100644 --- a/src/vibeec/kv_cache.zig +++ b/src/vibeec/kv_cache.zig @@ -1638,14 +1638,14 @@ pub const KVBlock = struct { pub const BlockTable = struct { allocator: std.mem.Allocator, seq_id: usize, - block_ids: std.ArrayList(usize), // List of block IDs for this sequence + block_ids: std.array_list.Managed(usize), // List of block IDs for this sequence num_tokens: usize, // Total tokens in sequence pub fn init(allocator: std.mem.Allocator, seq_id: usize) BlockTable { return BlockTable{ .allocator = allocator, .seq_id = seq_id, - .block_ids = std.ArrayList(usize).init(allocator), + .block_ids = std.array_list.Managed(usize).init(allocator), .num_tokens = 0, }; } @@ -2492,7 +2492,7 @@ pub const ChunkedRequest = struct { allocator: std.mem.Allocator, request_id: u64, prompt_tokens: []const u32, - chunks: std.ArrayList(PrefillChunk), + chunks: std.array_list.Managed(PrefillChunk), completed_chunks: usize, current_chunk: usize, prefill_complete: bool, @@ -2503,7 +2503,7 @@ pub const ChunkedRequest = struct { .allocator = allocator, .request_id = request_id, .prompt_tokens = prompt_tokens, - .chunks = std.ArrayList(PrefillChunk).init(allocator), + .chunks = std.array_list.Managed(PrefillChunk).init(allocator), .completed_chunks = 0, .current_chunk = 0, .prefill_complete = false, @@ -2583,7 +2583,7 @@ pub const ChunkedRequest = struct { pub const ChunkedPrefillScheduler = struct { allocator: std.mem.Allocator, config: ChunkedPrefillConfig, - requests: std.ArrayList(*ChunkedRequest), + requests: std.array_list.Managed(*ChunkedRequest), // Statistics total_chunks_processed: usize, @@ -2593,7 +2593,7 @@ pub const ChunkedPrefillScheduler = struct { return .{ .allocator = allocator, .config = config, - .requests = std.ArrayList(*ChunkedRequest).init(allocator), + .requests = std.array_list.Managed(*ChunkedRequest).init(allocator), .total_chunks_processed = 0, .total_tokens_prefilled = 0, }; @@ -2616,8 +2616,8 @@ pub const ChunkedPrefillScheduler = struct { } /// Schedule next batch of chunks (round-robin fairness) - pub fn scheduleNextBatch(self: *ChunkedPrefillScheduler) std.ArrayList(*PrefillChunk) { - var batch = std.ArrayList(*PrefillChunk).init(self.allocator); + pub fn scheduleNextBatch(self: *ChunkedPrefillScheduler) std.array_list.Managed(*PrefillChunk) { + var batch = std.array_list.Managed(*PrefillChunk).init(self.allocator); // Round-robin: take one chunk from each request var chunks_added: usize = 0; @@ -2647,7 +2647,7 @@ pub const ChunkedPrefillScheduler = struct { } /// Process a batch of chunks (simulate) - pub fn processBatch(self: *ChunkedPrefillScheduler, batch: *std.ArrayList(*PrefillChunk)) void { + pub fn processBatch(self: *ChunkedPrefillScheduler, batch: *std.array_list.Managed(*PrefillChunk)) void { for (batch.items) |chunk| { // Find owning request and mark complete for (self.requests.items) |req| { @@ -2664,8 +2664,8 @@ pub const ChunkedPrefillScheduler = struct { } /// Remove completed requests - pub fn removeCompleted(self: *ChunkedPrefillScheduler) std.ArrayList(*ChunkedRequest) { - var completed = std.ArrayList(*ChunkedRequest).init(self.allocator); + pub fn removeCompleted(self: *ChunkedPrefillScheduler) std.array_list.Managed(*ChunkedRequest) { + var completed = std.array_list.Managed(*ChunkedRequest).init(self.allocator); var i: usize = 0; while (i < self.requests.items.len) { diff --git a/src/vibeec/lsp.zig b/src/vibeec/lsp.zig index b04cecbdf2..751286cdad 100644 --- a/src/vibeec/lsp.zig +++ b/src/vibeec/lsp.zig @@ -8,7 +8,7 @@ const std = @import("std"); const Allocator = std.mem.Allocator; -const ArrayList = std.ArrayList; +const ArrayList = std.array_list.Managed; const json = std.json; // ═══════════════════════════════════════════════════════════════════════════════ diff --git a/src/vibeec/optimizer.zig b/src/vibeec/optimizer.zig index 13a5ccbe2c..c1efa9100f 100644 --- a/src/vibeec/optimizer.zig +++ b/src/vibeec/optimizer.zig @@ -9,7 +9,7 @@ const std = @import("std"); const Allocator = std.mem.Allocator; -const ArrayList = std.ArrayList; +const ArrayList = std.array_list.Managed; const AutoHashMap = std.AutoHashMap; // ═══════════════════════════════════════════════════════════════════════════════ diff --git a/src/vibeec/repl.zig b/src/vibeec/repl.zig index 637aba9c09..935428a66b 100644 --- a/src/vibeec/repl.zig +++ b/src/vibeec/repl.zig @@ -8,7 +8,7 @@ const std = @import("std"); const Allocator = std.mem.Allocator; -const ArrayList = std.ArrayList; +const ArrayList = std.array_list.Managed; const error_reporter = @import("error_reporter.zig"); const ColorWriter = error_reporter.ColorWriter; const Color = error_reporter.Color; @@ -127,7 +127,7 @@ pub const REPL = struct { const Self = @This(); pub fn init(allocator: Allocator, force_color: ?bool) Self { - const stdout = std.io.getStdOut().writer().any(); + const stdout = std.fs.File.stdout().deprecatedWriter().any(); return Self{ .allocator = allocator, .writer = ColorWriter.init(stdout, force_color), @@ -148,7 +148,7 @@ pub const REPL = struct { try self.printBanner(); - const stdin = std.io.getStdIn().reader(); + const stdin = std.fs.File.stdin().deprecatedReader(); var buf: [4096]u8 = undefined; while (self.running) { diff --git a/src/vibeec/repl_agent.zig b/src/vibeec/repl_agent.zig index 82458bed2a..8100b94800 100644 --- a/src/vibeec/repl_agent.zig +++ b/src/vibeec/repl_agent.zig @@ -88,8 +88,8 @@ pub const ReplAgent = struct { /// Main REPL loop pub fn run(self: *Self) !void { - const stdin = std.io.getStdIn().reader(); - const stdout = std.io.getStdOut().writer(); + const stdin = std.fs.File.stdin().deprecatedReader(); + const stdout = std.fs.File.stdout().deprecatedWriter(); // Welcome banner try stdout.print("\n", .{}); diff --git a/src/vibeec/repl_main.zig b/src/vibeec/repl_main.zig index 87e4e535fe..692c566d8f 100644 --- a/src/vibeec/repl_main.zig +++ b/src/vibeec/repl_main.zig @@ -25,8 +25,8 @@ pub fn main() !void { defer _ = gpa.deinit(); const allocator = gpa.allocator(); - const stdout = std.io.getStdOut().writer(); - const stdin = std.io.getStdIn().reader(); + const stdout = std.fs.File.stdout().deprecatedWriter(); + const stdin = std.fs.File.stdin().deprecatedReader(); // Banner try stdout.print( diff --git a/src/vibeec/semantic.zig b/src/vibeec/semantic.zig index 0c0acd3bee..59b57a0842 100644 --- a/src/vibeec/semantic.zig +++ b/src/vibeec/semantic.zig @@ -9,7 +9,7 @@ const std = @import("std"); const Allocator = std.mem.Allocator; -const ArrayList = std.ArrayList; +const ArrayList = std.array_list.Managed; const StringHashMap = std.StringHashMap; const ast_mod = @import("ast.zig"); const Ast = ast_mod.Ast; diff --git a/src/vibeec/simd_vectorizer.zig b/src/vibeec/simd_vectorizer.zig index 1c66d530a4..af21fc3647 100644 --- a/src/vibeec/simd_vectorizer.zig +++ b/src/vibeec/simd_vectorizer.zig @@ -272,7 +272,7 @@ pub const VectorizedArrayOps = struct { // ═══════════════════════════════════════════════════════════════════════════════ pub fn runBenchmark() void { - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); stdout.print("\n", .{}) catch {}; stdout.print("═══════════════════════════════════════════════════════════════════════════════\n", .{}) catch {}; diff --git a/src/vibeec/trinity_format.zig b/src/vibeec/trinity_format.zig index 232eaf4f2f..5bf0bb86e6 100644 --- a/src/vibeec/trinity_format.zig +++ b/src/vibeec/trinity_format.zig @@ -188,8 +188,8 @@ pub const TrinityWriter = struct { allocator: std.mem.Allocator, file: std.fs.File, header: TrinityHeader, - index: std.ArrayList(TensorIndexEntry), - data_buffer: std.ArrayList(u8), + index: std.array_list.Managed(TensorIndexEntry), + data_buffer: std.array_list.Managed(u8), current_offset: u64, pub fn init(allocator: std.mem.Allocator, path: []const u8) !TrinityWriter { @@ -199,8 +199,8 @@ pub const TrinityWriter = struct { .allocator = allocator, .file = file, .header = TrinityHeader{}, - .index = std.ArrayList(TensorIndexEntry).init(allocator), - .data_buffer = std.ArrayList(u8).init(allocator), + .index = std.array_list.Managed(TensorIndexEntry).init(allocator), + .data_buffer = std.array_list.Managed(u8).init(allocator), .current_offset = 0, }; } @@ -298,7 +298,7 @@ pub const TrinityReader = struct { allocator: std.mem.Allocator, file: std.fs.File, header: TrinityHeader, - index: std.ArrayList(TensorIndexEntry), + index: std.array_list.Managed(TensorIndexEntry), data_start: u64, pub fn init(allocator: std.mem.Allocator, path: []const u8) !TrinityReader { @@ -309,7 +309,7 @@ pub const TrinityReader = struct { const header = try TrinityHeader.read(reader); // and index - var index = std.ArrayList(TensorIndexEntry).init(allocator); + var index = std.array_list.Managed(TensorIndexEntry).init(allocator); for (0..header.num_tensors) |_| { const entry = try TensorIndexEntry.read(allocator, reader); try index.append(entry); @@ -596,7 +596,7 @@ test "header write and read" { }; // andwithin in buffer - var buffer = std.ArrayList(u8).init(allocator); + var buffer = std.array_list.Managed(u8).init(allocator); defer buffer.deinit(); try header.write(buffer.writer()); diff --git a/src/vibeec/type_checker.zig b/src/vibeec/type_checker.zig index 9da3806d55..e027fd5ae5 100644 --- a/src/vibeec/type_checker.zig +++ b/src/vibeec/type_checker.zig @@ -284,10 +284,10 @@ pub const TypeChecker = struct { is_dirty: bool, }; - pub fn init(allocator: Allocator) Self { + pub fn init(allocator: Allocator) !Self { return Self{ .allocator = allocator, - .registry = TypeRegistry.init(allocator), + .registry = try TypeRegistry.init(allocator), .cache = StringHashMap(CacheEntry).init(allocator), .current_version = 0, .cache_hits = 0, diff --git a/src/vibeec/universal_varlog_gen.zig b/src/vibeec/universal_varlog_gen.zig index e4ad9b279a..2ae7cf59c0 100644 --- a/src/vibeec/universal_varlog_gen.zig +++ b/src/vibeec/universal_varlog_gen.zig @@ -444,7 +444,7 @@ pub fn main() !void { const specs_dir = if (args.len > 1) args[1] else "specs/tri"; const output_dir = if (args.len > 2) args[2] else "trinity/varlog"; - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); try stdout.print( \\ diff --git a/src/vibeec/validator_engine.zig b/src/vibeec/validator_engine.zig index a0631ac6cc..d65908a62e 100644 --- a/src/vibeec/validator_engine.zig +++ b/src/vibeec/validator_engine.zig @@ -90,7 +90,7 @@ pub const ValidatorEngine = struct { pub fn printReport(self: *const ValidatorEngine, report: *const ValidatorReport, spec_path: []const u8) !void { _ = self; - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); try stdout.print("╔══════════════════════════════════════════════════════════════════════════╗\n", .{}); try stdout.print("║ VIBEE VALIDATION REPORT ║\n", .{}); diff --git a/src/vibeec/varlog_batch_gen.zig b/src/vibeec/varlog_batch_gen.zig index 7d8041f123..54d2ca5d7f 100644 --- a/src/vibeec/varlog_batch_gen.zig +++ b/src/vibeec/varlog_batch_gen.zig @@ -161,7 +161,7 @@ pub fn main() !void { const specs_dir = if (args.len > 1) args[1] else "specs/tri"; const output_dir = if (args.len > 2) args[2] else "trinity/varlog"; - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); try stdout.print( \\ diff --git a/src/vibeec/vibee_benchmark.zig b/src/vibeec/vibee_benchmark.zig index a0baefda5b..6d6b8f561f 100644 --- a/src/vibeec/vibee_benchmark.zig +++ b/src/vibeec/vibee_benchmark.zig @@ -37,7 +37,7 @@ const V12_METRICS = VersionMetrics{ }; pub fn main() !void { - const stdout = std.io.getStdOut().writer(); + const stdout = std.fs.File.stdout().deprecatedWriter(); try stdout.print("\n", .{}); try stdout.print("╔══════════════════════════════════════════════════════════════════╗\n", .{});