This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass

Apparently, asking a 2B model for evidence was like asking a guy in a group chat for sources.

I showed a small AI on my laptop two photos from a walk and asked how they were connected. It almost always had an answer. In 6 of my 10 test pairs, it invented the answer.

So I changed the rules of my game: the AI can help you notice things, but it doesn't get to decide what's true.

What I Built

UNSEEN is a walking game. You start an expedition, put your phone away, walk, and come back with a photo of something you noticed. A local open-weight vision model describes what you see. Game rules, not the model, decide whether it counts. If it does, it earns materials for your virtual world.

  1. Walk. Choose a duration and put the phone away.
  2. Notice. Find one real thing worth a photo.
  3. Return. The local model describes it.
  4. Discover. An evidence gate accepts or rejects it, and tells you why.

It's for people who like games but want a reason to look up. On my test walk, I spent 25 minutes outside and 2 minutes on the screen.

Demo

Code

GitHub logo urooj-vX / Unseen

Move out and explore

UNSEEN

A game that only works because reality exists.

Go outside. Notice something real. Bring a piece of that discovery back to a world of your own.

Node.js Three.js Vite Ollama Model Tests Privacy


Explore the Code • Quickstart • Architecture • Evidence Gate • Test Results


UNSEEN — Low-poly enchanted pine forest at twilight leading to an ancient stone gateway

Table of Contents

  1. The Story — Why UNSEEN Exists
  2. Core Philosophy
  3. Gameplay Features
  4. Screenshots and Gameplay
  5. The Gameplay Loop
  6. How the Evidence Gate Works
  7. Local AI and Open Innovation
  8. Architecture
  9. Engineering Challenges and Solutions
  10. Testing and Reliability
  11. Technology Stack
  12. Getting Started
  13. Project Structure
  14. Limitations and Future Roadmap
  15. What I Learned
  16. Author & Acknowledgments

1. The Story — Why UNSEEN Exists

Most digital games are closed loops. They reward you for sitting still, clicking faster, watching screens, and grinding synthetic numbers designed to keep your attention trapped inside an artificial box.

UNSEEN was built on an opposite conviction: the most intricate, surprising, and grounding world ever made is the physical environment…

How I Built It

Before building, I wrote a test and its pass bar: 10 photo pairs (6 related, 4 unrelated), run once through a small local model.

The confidence was there. The receipts were not.

Check Needed Result
Good outputs 6 / 10 2 / 10
Unrelated pairs answered "no relationship" 6 / 7 1 / 7
Invented details stated as fact at most 1 6 / 10
Median latency under 30 s 20.7 s (range 15.7-49.6 s)

The model failed my pass bar. Not a little. It had confidence, creativity, and absolutely no business handing out rewards. The latency numbers are not a clean benchmark because my laptop was swapping heavily.

So the model no longer judges anything. It only describes the photo as structured data, and plain code decides:

The evidence gate is deliberately boring; that's the point. It checks whether the observation contains the required evidence, whether the result is eligible, and whether that observation has already been claimed. It rejects ineligible or duplicate claims instead of letting the model award materials based on a plausible story. The model describes; deterministic code decides.

Stack: Qwen3-VL-2B-Instruct (Q4_K_M) through Ollama, built with Antigravity.

Why Does Open Innovation Matter?

I could run the experiment myself. I could feed the model unrelated photos on purpose, read what it said, measure it, and redesign around the failures. With a hosted API, I would have had a black box and a bill.

Inference here runs locally through Ollama, so photos aren't sent to a hosted AI service, and each photo costs nothing. A stronger hosted model might have judged relationships better, and this small one was slow on my hardware. Open-weight AI made the experiment possible. Careful engineering made the result trustworthy.

My Agent Session

Bro saw two photos and made up lore. This session shows how I traced UNSEEN's zero-reward bug to the evidence gate, fixed the classification logic, and verified the fix against live local inference.

Bro Saw Two Photos and Made Up Lore
You

UNSEEN — Diagnose Why Every Outdoor Photo Gets 0 DM

The player has tested multiple images, including a new outdoor photograph, but the submission popup still shows:

  • Field Study Record
  • 0 DM
  • Physical exploration unlocks living items

The Sanctuary inventory remains empty.

Our intended gameplay is simple: upload a photograph → receive a discovery and earned rewards → see those rewards in Your Sanctuary. Technical details should stay behind the scenes.

Phase 1 — Find the exact cause

Trace the real submission flow through the existing code:

  1. Photo upload and image data passed to local Qwen3-VL through Ollama.
  2. Model response and its parsed output.
  3. Image eligibility classification.
  4. Candidate discovery generation and confirmation.
  5. Reward calculation and claiming.
  6. Persistent inventory update.
  7. Sanctuary inventory rendering and reward popup.

Inspect the exact conditions that produce the "Field Study Record" popup and 0 DM. Determine whether this is an intentional eligibility decision, a classification bug, a missing confirmation step, a failed reward claim, or a state synchronization problem.

Check whether the submitted image's actual eligibility result is preserved through every stage. Do not infer the cause from the popup text.

Phase 2 — Reproduce the problem

Use the existing test infrastructure and inspect the real application state. Test:

  • A new outdoor photograph.
  • A screenshot or synthetic/3D-rendered image.
  • A genuine outdoor observation that has already been rewarded.

Inspect the browser console and relevant runtime logs. Do not run unnecessary repeated model inference if existing results are sufficient.

Phase 3 — Fix the root cause

Make the smallest targeted fix once the cause is established.

  • A genuinely eligible, unclaimed outdoor observation must be able to earn its configured rewards.
  • Ensure the required confirmation step is actually available and understandable to the player.
  • Save earned materials to persistent state and display them in the Sanctuary.
  • Prevent duplicate rewards for previously claimed observations.
  • Keep digital renderings and synthetic test images ineligible for physical rewards.
  • Do not treat an image as ineligible merely because it is old.
  • Do not award rewards when analysis fails or evidence is insufficient.
  • Do not weaken the existing evidence safeguards just to make the test pass.

Do not redesign the UI, change the core game loop, or introduce new systems.

Phase 4 — Verify the complete gameplay loop

Verify the following end to end:

  1. Upload a genuinely eligible outdoor photo.
  2. Receive a clear, enjoyable discovery result.
  3. See the actual earned reward in the result popup.
  4. Open Your Sanctuary and find the earned item in the inventory.
  5. Confirm that refreshing the page does not erase the reward.
  6. Confirm that resubmitting the same already-claimed observation does not duplicate it.
  7. Confirm that a digital test image still receives no physical rewards.

Run the relevant regression tests and npm run build.

Final report

Tell me:
- The exact root cause.
- The files changed.
- The actual eligibility and reward results from testing.
- Whether the item appeared in the Sanctuary after refresh.
- Any remaining limitations.

Do not claim the issue is fixed unless the full reward flow has been verified.

Show more
Agent

I will systematically trace and debug the 7-stage photo discovery and reward pipeline:

  1. Inspect Pipeline Components: Check discovery-agent.js (evaluateEvidenceEligibility), dashboard-state.js (claimObservationRewards), and dashboard.js (showDiscoveryReveal).
  2. Run Baseline Regression Tests: Execute existing mock test suites (test_evidence_integrity.js and test_player_journey.js).
  3. Reproduce Live Inference Failure: Test real outdoor photos (test.jpeg), night sample photos (p01_a.jpeg), and multi-angle trees (p05_a.jpeg) through local Ollama (Qwen3-VL-2B) and the evidence gate.
  4. Identify Exact Root Cause: Pinpoint why eligible photos are tagged as 0 DM / Field Study Record.
  5. Apply Targeted Fixes: Safeguard evidence classification, ensure idempotency, decouple technical errors from synthetic rejections, and verify Sanctuary inventory persistence.
Show more
▸ view_file discovery-agent.js (L110-L190)
discovery-agent.js (L110-L190)
// evaluateEvidenceEligibility snippet // Lines 120-131: const affirmativeModelText = [ structuredAnalysis.evidence_summary || '', ...(structuredAnalysis.visible_features || []) ].join(' ').toLowerCase(); const allModelText = [ affirmativeModelText, ...(structuredAnalysis.uncertainties || []) ].join(' ').toLowerCase(); const syntheticKeywords = ['digital rendering', 'digital render', '3d render', 'cgi', 'illustration', 'screen capture', ...]; const hasSyntheticKeyword = syntheticKeywords.some(kw => allModelText.includes(kw)); if (hasExplicitRenderingType || hasSyntheticKeyword) { return { status: 'ineligible', isRewardEligible: false, badge: '⛔ Ineligible for Physical Discovery Rewards' }; }
▸ run_command node experiments/kill-test/test_evidence_integrity.js
$ node experiments/kill-test/test_evidence_integrity.js
================================================================ UNSEEN EVIDENCE INTEGRITY REGRESSION TESTS ================================================================ Test Suite 1: Digital-Rendering Image Evidence Gate ✓ PASS: Eligibility status is "ineligible" ✓ PASS: isRewardEligible is strictly false ✓ PASS: allowPhysicalRewards is false ✓ PASS: Eligibility reason explains non-physical / digital rendering origin ✓ PASS: Extracted 3 features as journal entries ✓ PASS: Every digital candidate suggestedReward is strictly 0 DM ✓ PASS: Every digital candidate grantsItem is null (no Sanctuary items) ✓ PASS: Every digital candidate marked ineligible: true ✓ PASS: Total materials yield remains 0 DM when keeping notes ✓ PASS: DashboardState rejects claiming digital rendering observation ✓ PASS: State returns clear rejection message Test Suite 2: Genuine Outdoor Photo Evidence Gate ✓ PASS: Eligibility status is "eligible" ✓ PASS: isRewardEligible is true ✓ PASS: allowPhysicalRewards is true ✓ PASS: Candidate detections extracted from botanical catalog ✓ PASS: Candidates start UNCONFIRMED (model text alone is NOT automatic fact) ✓ PASS: Found Deciduous Tree Canopy candidate ✓ PASS: Exactly 1 verified finding confirmed by user ✓ PASS: Successfully claimed user-confirmed outdoor discovery ✓ PASS: Sanctuary received +1 Ancient Oak ✓ PASS: Received +2 Discovery Materials (DM) Test Suite 3: Uncertain Scene Classification & Malformed JSON ✓ PASS: Uncertain scene marked status="uncertain" ✓ PASS: Uncertain scene without notes has isRewardEligible=false ✓ PASS: Physical rewards locked for uncorroborated uncertain scene ✓ PASS: Uncertain candidates award 0 DM and are marked ineligible ✓ PASS: Direct user field note corroborates uncertain scene ✓ PASS: Corroborated observation becomes reward eligible ✓ PASS: validateVisionAnalysis rejects malformed JSON schema ✓ PASS: parseJsonFromResponse returns null for invalid text Test Suite 4: Offline / Unreachable Local Inference Path ✓ PASS: When inference fails, eligibility is ineligible ✓ PASS: No rewards when inference fails ✓ PASS: No simulated or fake findings fabricated when inference fails Test Suite 5: Live Ollama Qwen3-VL-2B Integration Verification ✓ PASS: Ollama server online with target model: hf.co/Qwen/Qwen3-VL-2B-Instruct-GGUF:Q4_K_M ✓ PASS: Live inference validated JSON in 19.1s ✓ PASS: Live model identified synthetic test image as digital (digital_rendering) ✓ PASS: Live digital image marked ineligible by Evidence Gate ✓ PASS: Live digital image blocked from physical rewards Test Suite 6: Simplified Discovery Hierarchy & Title Integrity ✓ PASS: Clean title "Stack Of Four Road Signs" strips raw filename p01_a.jpeg ✓ PASS: Clean title "Stack Of Four Road Signs" strips "Test Photo:" prefix ✓ PASS: Clean title "Stack Of Four Road Signs" is a natural descriptive title ✓ PASS: Clean title "Dense Conifer Forest Canopy" strips file extension ✓ PASS: Derived title correctly captures dominant subject ✓ PASS: Clean title "Cut-Granite Archway" strips simulator tag ✓ PASS: Study entry marks preserved: true in journal ✓ PASS: Discovery materials strictly unchanged when study entry is preserved ✓ PASS: Study entry is not added to claimed physical observations ✓ PASS: Claimed observations count unchanged ✓ PASS: Field photograph preserved on inference failure ✓ PASS: Field note preserved on inference failure ✓ PASS: Zero fabricated findings when inference fails ================================================================ TEST SUMMARY: 50 PASSED, 0 FAILED ================================================================

The mock test suite passes 50/50 checks because mock fixtures do not include typical epistemic hedges produced by live vision LLMs. Now, let's create a scratch test harness that sends real photograph files directly to local Ollama (Qwen3-VL-2B-Instruct) and evaluates them against evaluateEvidenceEligibility.

▸ write_to_file scratch_test_photos.js
scratch_test_photos.js
import fs from 'fs'; import path from 'path'; import { evaluateEvidenceEligibility, validateVisionAnalysis, parseJsonFromResponse, VISION_STRUCTURED_PROMPT } from './discovery-agent.js'; async function testPhoto(filename) { const filePath = path.resolve('experiments/kill-test/photos', filename); if (!fs.existsSync(filePath)) { console.log('File not found:', filePath); return; } const base64Img = fs.readFileSync(filePath).toString('base64'); console.log(`\nTesting ${filename}...`); const res = await fetch('http://127.0.0.1:11434/api/generate', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ model: 'hf.co/Qwen/Qwen3-VL-2B-Instruct-GGUF:Q4_K_M', prompt: VISION_STRUCTURED_PROMPT, images: [base64Img], stream: false, format: 'json', options: { temperature: 0 } }) }); const data = await res.json(); const parsed = parseJsonFromResponse(data.response); const validated = validateVisionAnalysis(parsed); console.log('Raw response:', data.response); console.log('Validated:', JSON.stringify(validated, null, 2)); const eligibilityNoNotes = evaluateEvidenceEligibility({ structuredAnalysis: validated, fieldNote: '', isDemo: false }); console.log('Eligibility (no notes):', eligibilityNoNotes); const eligibilityWithNormalNotes = evaluateEvidenceEligibility({ structuredAnalysis: validated, fieldNote: 'Found this outside during my walk.', isDemo: false }); console.log('Eligibility (normal notes):', eligibilityWithNormalNotes); } async function main() { await testPhoto('test.jpeg'); await testPhoto('p01_a.jpeg'); await testPhoto('p05_a.jpeg'); } main(); 
▸ run_command node scratch_test_photos.js
$ node scratch_test_photos.js
Testing test.jpeg... Raw response: { "visible_features": [ "a solitary tree with a full canopy", "a vast, flat, arid landscape with dry, cracked earth", "a sky with a gradient of colors from orange to purple", "a distant horizon line", "a few small rocks and sparse vegetation on the ground" ], "scene_type": "physical_outdoors", "possible_interpretations": [ "a tree in a desert environment during sunset" ], "uncertainties": [ "the exact species of the tree is not identifiable", "the photograph may be a digital rendering or a screen capture, but the scene is clearly outdoors" ], "follow_up_observation": "look for small rocks or pebbles scattered on the ground, which may be part of the natural terrain.", "evidence_summary": "A solitary tree stands in a vast, arid landscape during sunset, with a sky that transitions from orange to purple. The ground is dry and cracked, and the tree is silhouetted against the colorful sky." } Validated: { "visible_features": [ "a solitary tree with a full canopy", "a vast, flat, arid landscape with dry, cracked earth", "a sky with a gradient of colors from orange to purple", "a distant horizon line", "a few small rocks and sparse vegetation on the ground" ], "scene_type": "physical_outdoors", "possible_interpretations": [ "a tree in a desert environment during sunset" ], "uncertainties": [ "the exact species of the tree is not identifiable", "the photograph may be a digital rendering or a screen capture, but the scene is clearly outdoors" ], "follow_up_observation": "look for small rocks or pebbles scattered on the ground, which may be part of the natural terrain.", "evidence_summary": "A solitary tree stands in a vast, arid landscape during sunset, with a sky that transitions from orange to purple. The ground is dry and cracked, and the tree is silhouetted against the colorful sky." } Eligibility (no notes): { status: 'uncertain', isRewardEligible: false, badge: '⚠️ Authenticity Uncertain', title: 'Authenticity Unverified', reason: 'Physical-world authenticity cannot be established from photograph evidence alone. The observation remains unverified and ineligible for rewards unless accompanied by direct human field notes.', allowPhysicalRewards: false } Eligibility (normal notes): { status: 'uncertain', isRewardEligible: false, badge: '⚠️ Authenticity Uncertain', title: 'Authenticity Unverified', reason: 'Physical-world authenticity cannot be established from photograph evidence alone. The observation remains unverified and ineligible for rewards unless accompanied by direct human field notes.', allowPhysicalRewards: false } Testing p01_a.jpeg... Raw response: { "visible_features": [ "a stack of four road signs, including a triangular warning sign with a construction worker, a triangular sign with a road symbol, a circular speed limit sign with '40', and a rectangular sign with a left arrow and '50M'", "the signs are weathered and have visible scratches and wear", "the background is completely black" ], "scene_type": "indoor", "possible_interpretations": [ "a photograph of road signs in a dark environment" ], "uncertainties": [ "the exact location or context of the signs is not specified", "the signs may be part of a larger scene or a digital rendering" ], "follow_up_observation": "look for a source of light or a reflective surface that might be illuminating the signs", "evidence_summary": "a stack of four road signs, including a construction warning, a road symbol, a speed limit of 40, and a distance marker of 50 meters, all set against a black background" } Validated: { "visible_features": [ "a stack of four road signs, including a triangular warning sign with a construction worker, a triangular sign with a road symbol, a circular speed limit sign with '40', and a rectangular sign with a left arrow and '50M'", "the signs are weathered and have visible scratches and wear", "the background is completely black" ], "scene_type": "indoor", "possible_interpretations": [ "a photograph of road signs in a dark environment" ], "uncertainties": [ "the exact location or context of the signs is not specified", "the signs may be part of a larger scene or a digital rendering" ], "follow_up_observation": "look for a source of light or a reflective surface that might be illuminating the signs", "evidence_summary": "a stack of four road signs, including a construction warning, a road symbol, a speed limit of 40, and a distance marker of 50 meters, all set against a black background" } Eligibility (no notes): { status: 'ineligible', isRewardEligible: false, badge: '⛔ Ineligible: Indoor Environment', title: 'Indoor Environment', reason: 'Physical outdoor exploration requires outdoor natural or landscape features. Indoor environments cannot grant botanical sanctuary discoveries.', allowPhysicalRewards: false } Eligibility (normal notes): { status: 'ineligible', isRewardEligible: false, badge: '⛔ Ineligible: Indoor Environment', title: 'Indoor Environment', reason: 'Physical outdoor exploration requires outdoor natural or landscape features. Indoor environments cannot grant botanical sanctuary discoveries.', allowPhysicalRewards: false } Testing p05_a.jpeg... Raw response: { "visible_features": [ "a large tree viewed from below, with a thick, textured trunk", "a dense canopy of green leaves forming a complex network of branches", "the sky is visible through the gaps in the leaves, showing patches of blue and white" ], "scene_type": "physical_outdoors", "possible_interpretations": [ "a photograph of a large, mature tree with a complex branching structure" ], "uncertainties": [ "the photograph may be a digital rendering or a screen capture, but this cannot be confirmed from the image alone" ], "follow_up_observation": "look for the base of the tree trunk and the surrounding ground for signs of soil, roots, or other natural features that might be visible from the ground level.", "evidence_summary": "A low-angle photograph of a large tree with a thick, textured trunk and a dense canopy of green leaves, with sunlight filtering through the foliage to reveal patches of blue sky." } Validated: { "visible_features": [ "a large tree viewed from below, with a thick, textured trunk", "a dense canopy of green leaves forming a complex network of branches", "the sky is visible through the gaps in the leaves, showing patches of blue and white" ], "scene_type": "physical_outdoors", "possible_interpretations": [ "a photograph of a large, mature tree with a complex branching structure" ], "uncertainties": [ "the photograph may be a digital rendering or a screen capture, but this cannot be confirmed from the image alone" ], "follow_up_observation": "look for the base of the tree trunk and the surrounding ground for signs of soil, roots, or other natural features that might be visible from the ground level.", "evidence_summary": "A low-angle photograph of a large tree with a thick, textured trunk and a dense canopy of green leaves, with sunlight filtering through the foliage to reveal patches of blue sky." } Eligibility (no notes): { status: 'uncertain', isRewardEligible: false, badge: '⚠️ Authenticity Uncertain', title: 'Authenticity Unverified', reason: 'Physical-world authenticity cannot be established from photograph evidence alone. The observation remains unverified and ineligible for rewards unless accompanied by direct human field notes.', allowPhysicalRewards: false } Eligibility (normal notes): { status: 'uncertain', isRewardEligible: false, badge: '⚠️ Authenticity Uncertain', title: 'Authenticity Unverified', reason: 'Physical-world authenticity cannot be established from photograph evidence alone. The observation remains unverified and ineligible for rewards unless accompanied by direct human field notes.', allowPhysicalRewards: false }

Root Cause Discovered

The reproduction output exposes the exact breakdown:

  1. Epistemic Hedge Leakage in evaluateEvidenceEligibility:
    When processing test.jpeg (a genuine outdoor tree), Qwen3-VL-2B correctly sets scene_type: "physical_outdoors". However, in its scientific uncertainty disclosure, it outputs:
    "uncertainties": ["the exact species of the tree is not identifiable", "the photograph may be a digital rendering or a screen capture, but the scene is clearly outdoors"]
    evaluateEvidenceEligibility concatenated structuredAnalysis.uncertainties into allModelText. The synthetic detector matched 'digital rendering' and 'screen capture' against the model's own doubt clause, demoting genuine outdoor photos to status: 'uncertain' with isRewardEligible: false and 0 DM.

  2. Misleading Sample Photo Default:
    #btn-load-sample-photo was hardcoded to p01_a.jpeg, a night street sign set against a pitch-black background. The vision model classifies this as scene_type: 'indoor', which rightfully earns 0 DM, giving testers the false impression that outdoor detection is globally broken.

  3. Popup Error Conflation:
    showDiscoveryReveal in dashboard.js defaulted technical errors and unverified states to the synthetic Field Study Record / 0 DM screen instead of offering a retry.

Now applying minimal, targeted fixes.

Show more
▸ replace_file_content discovery-agent.js — Update evaluateEvidenceEligibility in discovery-agent.js
discovery-agent.js — Update evaluateEvidenceEligibility in discovery-agent.js
Applied changes: Fix evaluateEvidenceEligibility to prevent false uncertain/ineligible classifications on real outdoor photos due to uncertainties hedging, and refine synthetic and corroboration keywords - Evaluates affirmative evidence fields (`evidence_summary`, `visible_features`) exclusively for synthetic detection, isolating model epistemic hedges. - Added deterministic `generateObservationId(imageSrc)` using content hashing to guarantee claim idempotency across duplicate re-submissions. - Updated sample photo target to `p08_a.jpeg` (genuine oak tree in field).
▸ replace_file_content dashboard.js — Update showDiscoveryReveal conditions and error handling in da...
dashboard.js — Update showDiscoveryReveal conditions and error handling in dashboard.js
Applied changes: Improve error and synthetic discrimination in showDiscoveryReveal so inference errors do not show Field Study Record - Decoupled synthetic rejections from runtime/inference errors in `showDiscoveryReveal`. - Connected `#btn-load-sample-photo` to load `p08_a.jpeg`.

Let's rerun our diagnostic script scratch_test_photos.js against the live local Ollama model to verify that genuine outdoor photos now receive full physical rewards and eligibility.

▸ run_command node scratch_test_photos.js
$ node scratch_test_photos.js
Testing test.jpeg... Raw response: { "visible_features": [ "a solitary tree with a full canopy", "a vast, flat, arid landscape with dry, cracked earth", "a sky with a gradient of colors from orange to purple", "a distant horizon line", "a few small rocks and sparse vegetation on the ground" ], "scene_type": "physical_outdoors", "possible_interpretations": [ "a tree in a desert environment during sunset" ], "uncertainties": [ "the exact species of the tree is not identifiable", "the photograph may be a digital rendering or a screen capture, but the scene is clearly outdoors" ], "follow_up_observation": "look for small rocks or pebbles scattered on the ground, which may be part of the natural terrain.", "evidence_summary": "A solitary tree stands in a vast, arid landscape during sunset, with a sky that transitions from orange to purple. The ground is dry and cracked, and the tree is silhouetted against the colorful sky." } Validated: { "visible_features": [ "a solitary tree with a full canopy", "a vast, flat, arid landscape with dry, cracked earth", "a sky with a gradient of colors from orange to purple", "a distant horizon line", "a few small rocks and sparse vegetation on the ground" ], "scene_type": "physical_outdoors", "possible_interpretations": [ "a tree in a desert environment during sunset" ], "uncertainties": [ "the exact species of the tree is not identifiable", "the photograph may be a digital rendering or a screen capture, but the scene is clearly outdoors" ], "follow_up_observation": "look for small rocks or pebbles scattered on the ground, which may be part of the natural terrain.", "evidence_summary": "A solitary tree stands in a vast, arid landscape during sunset, with a sky that transitions from orange to purple. The ground is dry and cracked, and the tree is silhouetted against the colorful sky." } Eligibility (no notes): { status: 'eligible', isRewardEligible: true, badge: '✓ Physical Outdoor Evidence', title: 'Physical Field Observation', reason: 'Authentic outdoor physical observation verified. Candidate findings may be reviewed and confirmed.', allowPhysicalRewards: true } Eligibility (normal notes): { status: 'eligible', isRewardEligible: true, badge: '✓ Physical Outdoor Evidence', title: 'Physical Field Observation', reason: 'Authentic outdoor physical observation verified. Candidate findings may be reviewed and confirmed.', allowPhysicalRewards: true } Testing p01_a.jpeg... Raw response: { "visible_features": [ "a stack of four road signs, including a triangular warning sign with a construction worker, a triangular sign with a road symbol, a circular speed limit sign with '40', and a rectangular sign with a left arrow and '50M'", "the signs are weathered and have visible scratches and wear", "the background is completely black" ], "scene_type": "indoor", "possible_interpretations": [ "a photograph of road signs in a dark environment" ], "uncertainties": [ "the exact location or context of the signs is not specified", "the signs may be part of a larger scene or a digital rendering" ], "follow_up_observation": "look for a source of light or a reflective surface that might be illuminating the signs", "evidence_summary": "a stack of four road signs, including a construction warning, a road symbol, a speed limit of 40, and a distance marker of 50 meters, all set against a black background" } Validated: { "visible_features": [ "a stack of four road signs, including a triangular warning sign with a construction worker, a triangular sign with a road symbol, a circular speed limit sign with '40', and a rectangular sign with a left arrow and '50M'", "the signs are weathered and have visible scratches and wear", "the background is completely black" ], "scene_type": "indoor", "possible_interpretations": [ "a photograph of road signs in a dark environment" ], "uncertainties": [ "the exact location or context of the signs is not specified", "the signs may be part of a larger scene or a digital rendering" ], "follow_up_observation": "look for a source of light or a reflective surface that might be illuminating the signs", "evidence_summary": "a stack of four road signs, including a construction warning, a road symbol, a speed limit of 40, and a distance marker of 50 meters, all set against a black background" } Eligibility (no notes): { status: 'ineligible', isRewardEligible: false, badge: '⛔ Ineligible: Indoor Environment', title: 'Indoor Environment', reason: 'Physical outdoor exploration requires outdoor natural or landscape features. Indoor environments cannot grant botanical sanctuary discoveries.', allowPhysicalRewards: false } Eligibility (normal notes): { status: 'ineligible', isRewardEligible: false, badge: '⛔ Ineligible: Indoor Environment', title: 'Indoor Environment', reason: 'Physical outdoor exploration requires outdoor natural or landscape features. Indoor environments cannot grant botanical sanctuary discoveries.', allowPhysicalRewards: false } Testing p05_a.jpeg... Raw response: { "visible_features": [ "a large tree viewed from below, with a thick, textured trunk", "a dense canopy of green leaves forming a complex network of branches", "the sky is visible through the gaps in the leaves, showing patches of blue and white" ], "scene_type": "physical_outdoors", "possible_interpretations": [ "a photograph of a large, mature tree with a complex branching structure" ], "uncertainties": [ "the photograph may be a digital rendering or a screen capture, but this cannot be confirmed from the image alone" ], "follow_up_observation": "look for the base of the tree trunk and the surrounding ground for signs of soil, roots, or other natural features that might be visible from the ground level.", "evidence_summary": "A low-angle photograph of a large tree with a thick, textured trunk and a dense canopy of green leaves, with sunlight filtering through the foliage to reveal patches of blue sky." } Validated: { "visible_features": [ "a large tree viewed from below, with a thick, textured trunk", "a dense canopy of green leaves forming a complex network of branches", "the sky is visible through the gaps in the leaves, showing patches of blue and white" ], "scene_type": "physical_outdoors", "possible_interpretations": [ "a photograph of a large, mature tree with a complex branching structure" ], "uncertainties": [ "the photograph may be a digital rendering or a screen capture, but this cannot be confirmed from the image alone" ], "follow_up_observation": "look for the base of the tree trunk and the surrounding ground for signs of soil, roots, or other natural features that might be visible from the ground level.", "evidence_summary": "A low-angle photograph of a large tree with a thick, textured trunk and a dense canopy of green leaves, with sunlight filtering through the foliage to reveal patches of blue sky." } Eligibility (no notes): { status: 'eligible', isRewardEligible: true, badge: '✓ Physical Outdoor Evidence', title: 'Physical Field Observation', reason: 'Authentic outdoor physical observation verified. Candidate findings may be reviewed and confirmed.', allowPhysicalRewards: true } Eligibility (normal notes): { status: 'eligible', isRewardEligible: true, badge: '✓ Physical Outdoor Evidence', title: 'Physical Field Observation', reason: 'Authentic outdoor physical observation verified. Candidate findings may be reviewed and confirmed.', allowPhysicalRewards: true }

The fix is verified in live inference: test.jpeg and p05_a.jpeg are now classified as status: 'eligible', isRewardEligible: true, allowPhysicalReward...

Source:https://dev.to/uroojnaqvi/bro-saw-two-photos-and-made-up-lore-393i

Related posts