Skip to content

Intel suite v3: ISR tasking, espionage, counterintel, live feeds + combat on contacts - #2

Open
CarlBarl wants to merge 12 commits into
feature/game-loop-v2from
feature/intel-warfare-v3
Open

Intel suite v3: ISR tasking, espionage, counterintel, live feeds + combat on contacts#2
CarlBarl wants to merge 12 commits into
feature/game-loop-v2from
feature/intel-warfare-v3

Conversation

@CarlBarl

Copy link
Copy Markdown
Owner

What

  • Full intelligence suite: a five-tab INTEL command center (satellite tasking, SIGINT intercepts, named HUMINT sources you can task/rest/exfiltrate, a diegetic OSINT social feed, and an OPSEC tab). Satellite passes are gated by real-world cloud cover and produce classified imagery products rendered from real satellite tiles of the actual location.
  • Counterespionage both ways: Iran's counterintelligence hunts your spies (sweeps, arrests, encryption upgrades when you intercept too much) and analyzes your strike patterns — sloppy OPSEC leaks your strikes (35% miss, target scoots). You fight back with OPSEC sweeps and per-ship EMCON. Iran fields inflatable decoy TELs that only high-grade imagery or your IRGC source can unmask.
  • LIVE window with real data: a genuinely live geostationary weather satellite over the Gulf (15-min cadence), the Reuters Strait of Hormuz vessel stream, synthetic drone FMV over any tracked contact, and real live air traffic (ADS-B). All free keyless sources, credited in-app, all degrade gracefully offline.
  • Combat now runs on contacts, not ground truth: radar horizon physics (AWACS/E-2D become the long-range eyes), datalink fire control with quality-based miss chances, auto-engagement doctrine per ROE for both sides, and Iran's AI can only target what it actually tracks — hiding the carrier works.
  • Movement fixes (drawn naval waypoints were discarded; land units silently ate orders into water) and a log-scale time slider replacing the fixed speed buttons.

Why

The intel layer was a placebo (budget sliders gating nothing) and engagement ignored sensors entirely. This makes collection the game: find, confirm, strike, and protect your sources while Iran hunts them.

Verification

CarlBarl and others added 3 commits June 10, 2026 22:56
Units now fight on their intel picture instead of ground truth.

Radar realism (visibility): unit detection respects the radar horizon
(4/3-earth model, per-category target heights) and the antenna's sector
arc — a ship mast sees ~35-45 km against surface targets no matter its
nominal range, which makes AWACS/E-2D the long-range eyes they are.

Fire control: getFireControlQuality gates every shot — 'own' (shooter's
radar holds the target), 'datalink' (live nation track + shooter on a
datalink hub's network), or no shot. Fixed installations (airbases,
naval bases) are public-knowledge coordinates, always strikable, and
both sides start with them identified on the map. Datalink shots carry
a 12% miss chance against moving targets; misses surface in the feed.

Auto-engagement doctrine (friendly-ai, both nations): weapons_free
engages any valid track in weapon range, weapons_tight only inside a
75 km self-defense bubble, 90 s cooldown (was 5 min), salvo sized by
target class, nation-level re-engage guard against overkill, and an
AUTO_ENGAGEMENT feed event with the firing quality. Iran's strategic
AI uses the same fire-control gate, so hiding the carrier now works.

Movement: naval MOVE orders route around land per player waypoint leg
(drawn waypoints were silently discarded before); land units ordered
into water get an ORDER_REJECTED event instead of waypoints silently
vanishing mid-route.

434 tests green (8 new), tsc clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Design: docs/plans/intel-suite-v3.md (from a 5-agent research sweep of
real US ISR architecture, the OSINT ecosystem, Iran counterintelligence,
intel game design, and live-verified free data feeds).

Engine (complete): src/engine/systems/intel.ts — taskable satellite
passes with cloud-cover gating and NIIRS-based decoy reveal, SIGINT
intercept cards that leak true AI state (salvo warnings, hidden emitter
geolocation, leadership reads), four named HUMINT sources with the
exposure/rest/exfiltrate loop, Iranian counterintel (paranoia meter,
spy sweeps, encryption blackouts), player leak level with compromised
strikes (35% miss + TEL scoot), Iranian decoy TELs, wide-area Triton
sweeps and Iran's coarse carrier picture, EMCON (radar-silent units
drop out of ELINT and their own radar picture but keep the network).

Contracts: IntelState/IntelAsset/AgentSource/IntelProduct types, six
new commands, eleven new events with feed formatters, IntelViewState
snapshot slice, save/load + backfill for older saves.

Data: src/data/feeds.ts — central config of verified keyless+CORS real
data sources (Esri imagery, NASA Worldview/GIBS, EUMETSAT live WMS,
airplanes.live ADS-B, Open-Meteo, Reuters Hormuz stream) with the
attribution roster; ISR asset/agent/OSINT-account rosters.

434 tests green, tsc clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ds, time slider

UI for the v3 engine (docs/plans/intel-suite-v3.md), built by four parallel
agents on the frozen scaffold contracts, integrated and verified.

INTEL command center (IntelPanel rewritten): five tabs. ISR — asset cards
with next-pass countdowns, TASK PASS with an AOI picker that fetches real
cloud cover (Open-Meteo) before queueing; SIGINT — precedence-tagged
intercept cards + encryption-blackout banner; HUMINT — source cards with
exposure bars and TASK/REST/EXFILTRATE; OSINT — the diegetic feed;
OPSEC — leak-level gauge, sweep button, paranoia band, EMCON quick-toggles.
UnitInfoPanel gains an EMCON toggle.

Products and feeds: ImintViewer renders pass products as classified imagery
(real Esri tiles of the actual AOI, banners, NIIRS, Z-times, scanlines) with
a new-product toast. LiveFeeds window: EUMETSAT Meteosat-9 IODC live
(15-min cadence, IR at night), Reuters Hormuz traffic stream, synthetic
drone FMV over any tracked contact (real imagery + Ken-Burns + IR mode),
live ADS-B table of real Gulf aircraft, agency-style source credits.
OSINT feed generator: 8 fictional accounts with per-archetype delay, error
rate and templates, consuming the true event stream; ticker above the feed.

Map: AOU rings that grow on stale contacts, radar-horizon sensor rings on
selection, queued-pass swaths, revealed-decoy styling, live ADS-B layer,
GIBS daily VIIRS recon-mosaic basemap toggle (RCN/ADS-B/OVL in MapToggle).

TopBar: log-scale time slider 0 to 1h/s with snap detents and a pause/play
toggle (user request), plus the LIVE window button.

515 tests green (81 new: 38 intel engine, panel/feed/TopBar suites),
tsc clean, Playwright smoke extended (intel tabs, live feeds, slider-driven
war) and passing end to end.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 10, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
ashfall-command Ready Ready Preview, Comment Jun 11, 2026 7:59pm

CarlBarl and others added 3 commits June 11, 2026 19:34
Player call 2026-06-11: the hard radar-horizon cap felt bad (400 km
radars seeing 40 km). New model: radar coverage is its nominal radius;
height pays instead of physics gating — a high-sited radar (terrain +
antenna) reaches up to +50% further, high-sitting targets stand out and
are spotted up to +30% further, and elevated emitters shine further for
enemy ELINT (easier to intercept). Terrain line-of-sight blocking,
sector arcs and low-altitude clutter against sea-skimmers all remain.
Sensor rings on the map show effective range, dashed baseline when
height-boosted.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New ARSENAL table in the player block: per weapon type the loaded
count across units (colored when running dry), the reserve sitting at
bases, and the domestic-industry production rate (+N/h, with an
INDUSTRY total in the header). Data was already simulated (base
production runs hourly in logistics) — it was just invisible.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ge teleports

Player report replicated and pinned by a new regression suite
(missile-terrain.test.ts). Four defects in the class:

- Ballistic altitude dipped to ~0 at BOTH phase seams (the midcourse
  parabola did not match the boost/terminal endpoints), so every
  ballistic shot visibly smashed into the ground at 15% and 70% of its
  flight and resurrected. Arc is now continuous through apogee.
- Terminal dives ended at sea level: targets on high plateaus had the
  last seconds of the dive underground. Dives now end at the target''s
  ground elevation.
- Cruise terrain-following only sampled the current cell, so steep
  ridge faces caused multi-km altitude teleports on arrival. The
  follower now looks 2/5/8 km ahead along the heading and starts the
  climb before the wall.
- Fuel-starved missiles vanished silently (read as terrain crashes).
  They now emit MISSILE_CRASHED with a feed line and map position, and
  launches carry a 15% fuel reserve so terrain detours and waypoint
  legs do not starve max-range shots.

522 tests green (6 new), tsc clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
CarlBarl and others added 2 commits June 11, 2026 19:50
The viewshed checked visibility of the bare GROUND, so every 30 m
coastal berm shadowed its entire ray and the overlay drew jagged green
fans (player screenshot, Patriot/Qatar). It also ignored the new
elevation range bonus. Coverage is now raycast against a low-flying
air target (100 m AGL) out to the effective radius (nominal x height
bonus): clean radius/sector arcs over water, real shadows only behind
actual mountain ranges.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Remaining raggedness after the arc fix: 50-150 m desert hills still
shadowed rays against a 100 m reference target, and single-ray needles
came from elevation-grid aliasing. Coverage is now drawn against a
500 m AGL air target (air-defense chart semantics — only real mountain
ranges carve shadows) and ray distances get a 5-wide circular median
pass.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
CarlBarl and others added 2 commits June 11, 2026 20:47
… engine smalls

Panels: drag by the title bar with per-title position memory, click
raises a panel above its siblings (SITREP no longer buries the strike
dialog), Escape closes the topmost closable panel.

Strike timing moved into the engine: LAUNCH_SALVO gained spacingTicks
and a state.scheduledLaunches queue processed per tick — spaced salvos
now respect pause, scale with game speed, survive save/load, and carry
exactly one strike-leak roll per salvo. Staggered/sequential space
rounds within the salvo (2 s / 8 s); the old wall-clock setTimeout
chains (which kept firing while paused) are gone.

Navigation/copy: MAIN MENU from the ··· menu with a two-step confirm,
CONFIRM WAR shows a visible 5-second countdown instead of silently
disarming, lane/supply names render properly (Bab el-Mandeb, not
BAB EL_MANDEB).

Engine smalls: multi-radar units now evaluate every radar sensor with
its own range/antenna/sector (max range was paired with the first
radar's antenna and arc — wrong since antenna height drives the range
bonus); detectThreats gets a per-tick memo (was computed up to 3× per
unit per tick); the cursor elevation listener detaches when the ELV
overlay is off.

556 tests green (34 new), tsc clean, Playwright smoke passes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Waves: A feel (hillshade, TOT strikes, unit images, sound, combat
legibility), B opt-in TILT 3D, C air war (squadron pools + flights +
CAP/strike/AEW), D elevation fidelity (0.01-degree core grid + z11
terrarium LRU), E longevity (replay foundation, daily challenge,
scenario sharing, campaign week). All external sources live-verified.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ibility, scale guard

Hillshade: real DEM relief (Mapterhorn terrarium tiles, keyless, SRTM
30 m) dark-tuned into both map styles, replacing the static elevation
overlay; ELV toggle now drives it, on by default. 2D shading only.

TOT strikes: new "TOT — simultaneous impact" timing mode computes
launch_i = TOT − flightTime_i per launcher on the engine's scheduled-
launch queue (LAUNCH_SALVO delayTicks + scheduleSalvo). The plan shows
the derived launch schedule, an estimated-leakers comparison (all-at-
TOT vs spread, from fire-channel capacity) and a "first launch at T−X
may be detected" warning when slow weapons telegraph the package.
Iran's ATTRITION AI now builds TOT-compressed ballistic packages
against the densest player air defense.

Unit recognition photos: 22 classes fetched from Wikimedia Commons
(PD/CC only, licenses recorded, script in scripts/fetch-unit-images.mjs),
shown in the hover tooltip (300 ms delay) and unit panel with author ·
license credit — enemy photos only at identified (intel reward).

Sound: fully procedural WebAudio kit (klaxon, sonar ping, radio
squelch, launch whoosh, impacts, UI blips, looping CIC room tone) —
zero assets, zero licenses; event-mapped with per-sound debounce,
master/sfx/ambient buses, persisted mute in the TopBar.

Legibility: DEFCON-style kill markers (expanding blot → persistent X,
cap 60), fading track-history trails on enemy contacts, 250 ms fade-in
transitions on sensor/AOU rings.

Scale guard: 500-unit/100-tick stress test with measured numbers —
shipped scenarios are comfortably real-time; missile count (not units,
not terrain) dominates at saturation. Findings in BACKLOG.

641 tests green (85 new), tsc clean, smoke passes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Design docs/plans/air-war-v5.md. Types (SquadronState, AirMission,
flight metadata, surge ops), three commands, five feed events, airframe
performance table (CVW-9 + IRIAF per the research), air wings attached
at scenario init with a 30% maintenance stand-down, mission validation/
cancel/surge handlers, snapshot slice (own-side pools only — enemy
strength stays BDA-territory), save/load + backfill. processAirOps is
a frozen-contract stub for the build wave.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant