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", .{});