[pull] main from off-grid-ai:main#39
Merged
Merged
Conversation
…HF vision repos Hits real Hugging Face (no mocks) for every curated vision repo + popular families, runs the real pair→rename→belongs pipeline, and asserts the projector belongs after rename. Red today for the ggml-org `mmproj-<ModelName>-<quant>` shape (SmolVLM, Qwen2.5-VL, pixtral, InternVL). Also locks the separate no-pairing bug set as a tracked ledger.
ggml-org names projectors `mmproj-<ModelName>-<quant>.gguf` (model name AFTER the mmproj token). The old `/mmproj.*$/` kept that model name, doubling the on-disk identity stem, so mmProjBelongsToModel refused it, linkOrphanMmProj cleared the link, and the model loaded text-only → initMultimodal never ran → 'Multimodal support not enabled' on a vision send (device 2026-07-23, iPhone 12, SmolVLM). Extract only the precision token so the on-disk stem always matches the model. Verified against live HF: 8 rename-broken repos now pass, the 6 already-working stay working.
…ne test Replace the always-network tests (flaky, slow) with the capture-once/reuse pattern: UPDATE_HF_FIXTURES=1 downloads the real HF listing + real GGUF header bytes for every vision repo into a committed fixture; normal runs replay the real pair→rename→belongs pipeline over that captured real data in ~0.5s, offline, deterministic. Reverting the fix flips the ggml-org curated repos red. Tracks the separate no-pairing bug as a ledger.
…eam) Fixes the second mmproj bug class found in the live-HF sweep, so ALL vision-projector shapes pair + belong: - `mmproj-model-<prec>` literal placeholder → treated as a generic repo-single-model projector (ggml-org gemma-3, openbmb MiniCPM). - unsloth `UD-` dynamic-quant packaging stripped from the identity stem so a UD-quant model matches its non-UD projector (Mistral-Small-3.1). - moondream `-text-model` weights marker normalized so the weights and `-mmproj` file share a stem. Strict matching preserved — E2B still refuses an E4B projector (unit test). Verified over live-HF fixture data: every curated + popular vision repo now pairs and its on-disk name belongs.
…oken) Addresses SonarCloud (super-linear regex backtracking, download.ts:35) and CodeRabbit (take the projector's OWN trailing precision, not the first precision-like token in the name) in one change. Also: fixture refresh now throws on a HF 429/5xx instead of silently persisting an empty fixture.
…d, root-cause pending device log
…Android fail was transient (load-timing watch-item, not a blocker)
… pointers Consolidate all repo rules into one canonical rules.md so the standard is identical whatever agent reads it (Claude/Codex/etc.). CLAUDE.md and AGENTS.md now just reference it (AGENTS.md was also stale — claimed pre-commit gates + unit+integration tests, contradicting the pre-push gates and lean one-integration-test doctrine). Adds an On-device testing & verification playbook that codifies the WDA(iOS)/adb(Android) direct-drive flow, coordinate math, fix-onto-device build paths, log-pull, the both-devices-before-merge gate, and the macOS/permission-dialog/flaky-gate gotchas.
…itialized fix(A1): iOS vision 'Multimodal support not enabled' — keep only precision in mmproj on-disk name
…tead The hosted android-build runner repeatedly hung for 3+ hours on the native C++ builds (react-native-audio-api, op-sqlite) and burned hours per PR. Move it to a LOCAL pre-merge gate: `cd android && ./gradlew assembleDebug assembleRelease` before merging any native/ Android/gradle/deps change (recorded in rules.md). JS-only / docs PRs don't need it.
docs: single tool-neutral rules.md; CLAUDE.md + AGENTS.md as thin pointers
Replaces the removed CI android-build with a LOCAL pre-push gate, and adds the iOS build too: - Android: `assembleDebug assembleRelease` when .kt/.kts, android/, or package*.json change. - iOS: simulator build (CODE_SIGNING_ALLOWED=NO) when .swift, ios/, or Podfile change. JS-only / docs pushes skip both and stay fast.
chore: move Android+iOS native builds from CI to a local pre-push gate
Update the pre-push gate table: Android (assembleDebug assembleRelease) and iOS (simulator, no-signing) builds now run locally on push, scoped to native/gradle/pods/deps changes. Note the CI android-build was removed (hung 3+ hours). Verified: assembleRelease builds both APKs locally.
…ilds docs(rules): native builds now run on pre-push, not CI
…(parity with Android) A native dep bump affects both platforms; the iOS trigger was missing package*.json (Android had it). Verified both hook build commands compile locally: Android assembleDebug+assembleRelease → both APKs; iOS simulator build (CODE_SIGNING_ALLOWED=NO) → OffgridMobile.app.
fix(hooks): package.json changes also trigger the iOS pre-push build (parity)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )