15 Commits
Author SHA1 Message Date
thepraandClaude Opus 5.5 6623c6f9f1 me-web? 0.5.1: the route from the server back to you arrives
Build / Desktop, server and tools (push) Successful in 1m39s
Release / Every platform, the server, the release (push) Successful in 8m9s
- With the test from outside, the route from the publisher's server back to your address
  came back empty: the trace program holds its output until it ends, and it was stopped
  first while waiting on routers that never answer. It now reports each router as soon as it
  answers and stops after three silent ones, so the routers in front of your provider's exit
  reach the app.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
2026-10-15 11:36:14 +02:00
thepraandClaude Opus 5.5 eb8be87284 me-web? 0.5: the shared exit measured, the route from the server, the network's upstreams
Build / Desktop, server and tools (push) Successful in 59s
Release / Every platform, the server, the release (push) Successful in 8m42s
- Behind your provider's shared address, me-web? now shows how its exit hands out ports
  (kept, one after another, from one block, or at random), the range it gave this device,
  and how many customers may share the address at most; the estimate sharpens with each
  check on the same address.
- It tests whether two devices behind the same address can reach each other (hairpin), and
  how long an unused connection stays open: the card says "measuring" for about two minutes
  after the check, then the answer.
- With the test from outside, the publisher's server also traces the route back to your
  address: your provider's routers and the networks in between appear on the path, with
  their names.
- The provider card says which networks your provider reaches the internet through.
- On mobile data, the path shows the operator and the type of network (5G, 4G) read from the
  phone; on Android 13 and later the phone asks once for permission to read the network type.
- The speed card adds the round trip to the publisher's server.
- The network data now comes from the publisher's server, refreshed there from open sources:
  iptoasn.com, DB-IP Lite (CC BY 4.0), the University of Oregon Route Views Project (CC BY 4.0)
  and the Android Open Source Project's list of mobile operators (Apache 2.0); the release
  notes list each source's date and checksum.
- Source links in the cards wrap instead of being cut off.
- New strings, drafted in every language.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
2026-10-15 11:11:24 +02:00
thepraandClaude Opus 5.5 8caed6b28d The provider card no longer shows the address block's registry country
Build / Desktop, server and tools (push) Successful in 36s
- "Iliad Italia (AS29447, FR)" read as if the line were French: the country in the
  provider map is where the address block was registered, not where you are.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
2026-10-15 09:31:40 +02:00
thepraandClaude Opus 5.5 ea971d2aea Release notes written from the commits since the previous tag
Build / Desktop, server and tools (push) Successful in 41s
- The release page's "What's new" now comes from each commit's subject and body since the
  previous tag, without trailers or any line naming the assistant that helped write them.
- `tools/release.sh notes` writes the notes alone; the release checkout fetches the tags.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
2026-10-15 09:22:16 +02:00
thepraandClaude Opus 5.5 20f8b2149f me-web? 0.4: no network failure takes the app down; mobile data read right; the route on the path
Build / Desktop, server and tools (push) Successful in 1m31s
Release / Every platform, the server, the release (push) Successful in 9m21s
- Every network call returns a result whatever fails, not only the exceptions .NET
  usually throws: on Android the HTTPS client is the platform's own stack, and a network
  switch mid-request throws others. The outside test as a whole cannot throw; sharing the
  link falls back to copying it. A last guard (the UI thread, unobserved tasks, Android's
  raiser) writes errors.log in the app folder and keeps the app running; nothing is sent.
- On mobile data the app no longer probes the operator's gateway as if it were a home
  router: the router card says there is none, a private address on the phone with another
  public one is the operator's address sharing (CGNAT) and is drawn as its shared exit, the
  public IPv4 is held by that exit, and the provider's notes are labelled as being about its
  home lines. These were "router not answering" and "can't tell" on an Iliad phone.
- The route's routers appear as stops on the path's wires: the operator's internal ones
  before its exit, the public ones with their network number towards the internet.
- The download speed is timed after the first quarter of the sample, once the connection
  has ramped up; the path no longer shows the address block's registry country.
- Two new strings, drafted in every language.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
2026-10-15 09:10:37 +02:00
thepraandClaude Opus 5.5 4b4b37ad8e me-web? 0.3.1: sharing offered when the check ends; an Android icon that fits
Build / Desktop, server and tools (push) Successful in 58s
Release / Every platform, the server, the release (push) Successful in 7m29s
- The offer to share the findings appeared only after the "test from outside?" question was
  answered, so scrolling past it meant no offer at all. It now appears as soon as the check
  ends (hidden only while the outside test runs), and a payload built later still carries
  the outside test's result.
- Android gets an adaptive launcher icon: the drawing as a vector inside the 66-unit safe
  zone over the background colour, plus a monochrome layer for themed icons. The splash
  screen uses the same vector, so it is neither cut by the circle nor blurred from a
  192-pixel picture. The PNG stays for Android 7.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
2026-10-15 08:31:10 +02:00
thepraandClaude Opus 5.5 37752f9f07 me-web? 0.3: the path in drawn steps, each step's checks under it, the real RAM
Build / Desktop, server and tools (push) Successful in 59s
Release / Every platform, the server, the release (push) Successful in 7m35s
- The path from this device to the internet is a vertical zig-zag of larger drawings (this
  phone or computer, the router or the mobile network, a shared exit, the provider's building,
  the globe) that pulse while their step is checked, joined by curved wires with the link and
  its speed, and a few details beside each: the model, the addresses inside and outside the
  router and which port-opening protocols answer, the AS number, the public addresses.
- The results are grouped under the step they concern, in the path's order, with the same
  drawing as a heading; tapping a step in the path scrolls to its checks.
- After a check, the status and "Check again" move to the end, beside sharing.
- Memory reads the device's RAM: on Android it showed the runtime's heap limit (0.1 GB).
  Labelled "Memory (RAM)" in every language. Free disk is read for the app's own folder, so
  Android shows it too. The device's model is read on Android, Linux and Windows.
- Two icons drew outside their box (the outside test's shield, the calls and games radio
  tower): joined Lucide elements started with a relative move. Fixed; twelve unused icons
  deleted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
2026-10-15 08:08:37 +02:00
thepraandClaude Opus 5.5 7cfc8b6de5 me-web? 0.2: the test from outside, calls and games, mail, and what you can host
Build / Desktop, server and tools (push) Successful in 59s
Release / Every platform, the server, the release (push) Successful in 7m27s
Phases two and three ship together, because their code grew in the same
files. With consent the app asks the router to open 80, 443 and a high
port for ten minutes (UPnP, NAT-PMP or PCP), and the server, holding a
single-use ticket bound to the caller's own address, connects back and
must get an HMAC only the app can give; the mappings are removed after the
run and remembered until then, so a crash cannot leave one open. Hairpin
is tried from inside. Two STUN servers, the outside one first, tell easy
from hard NAT.

Mail gets port 25 to Gmail and Outlook, the reverse name and five
blocklists through the user's own resolver, network-wide UCEPROTECT
listings counted as a caution. DNS, speed against the server (four at a
time, twelve an hour per address) and the device follow, and six uses
(website, home from outside, files, game server, fediverse, mail) close
the run as possible, possible with a named workaround, or can't tell.

Findings can be shared after reading the exact JSON: a file per submission
under the unit's state directory, ten a day per address, deletable by the
token the app keeps, swept after twelve months; /privacy says all of it in
English and Italian. QR codes lead to the downloads. Every language carries
every string.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
2026-10-15 05:41:44 +02:00
thepraandClaude Opus 5.5 f79682eaef Every official language but two, drafted
Build / Desktop, server and tools (push) Successful in 52s
Release / Every platform, the server, the release (push) Successful in 7m19s
109 machine drafts beside English and the reviewed Italian, each labelled in
the app as a draft with a link for corrections, drafted with the round-one
terms checked against English for keys, placeholders and the names that
must not change. Central Atlas Tamazight is written in Latin script, as
its picker name and CLDR have it. Nauruan and Palauan are left out: no
draft good enough to ship could be written, and the picker only lists a
language whose strings file exists.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
2026-10-15 05:06:52 +02:00
thepraandClaude Opus 5.5 0dffbc27d6 The checks engine, the path and the cards: me-web? 0.1 reads the connection
MeWeb.Core runs seven checks concurrently and reports each as it settles:
online or behind a login page, this connection, the public IPv4 and IPv6
seen from v4./v6.meweb, the provider from a built-in map, the router
(UPnP IGD, NAT-PMP and PCP, read-only), address sharing (router WAN
against the echo, TTL hops only as a hint), and the history kept on the
device. The app draws the path from this device to the internet and lights
it node by node, with a card per check and a sheet listing every host it
contacts.

The provider map is iptoasn's table compressed to 2.1 MB by
tools/knowledge.cs and built before every app release; eleven Italian
provider profiles carry each fact with who said it, the source and the
month. The server gains a download page (en, it) and /download/{platform}
from the latest Gitea release.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
2026-10-15 04:39:03 +02:00
thepraandClaude Opus 5.5 16a1cecaae The deployed folder keeps 755: mktemp's 700 was copied onto it
Build / Desktop, server and tools (push) Successful in 29s
rsync -a carried the staging folder's mode to /var/www/meweb.arasaka.software,
and the meweb user could no longer enter it (status=200/CHDIR).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
2026-10-15 01:32:32 +02:00
thepraandClaude Opus 5.5 0d99c552eb Workload install without build flags; CI variables and the APK key documented
Build / Desktop, server and tools (push) Successful in 28s
dotnet workload install refuses -nologo. CLAUDE.md lists every variable and
secret the scripts and workflows read; the README gives the APK
certificate's SHA-256.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
2026-10-15 01:24:11 +02:00
thepraandClaude Opus 5.5 b66ee80a33 Install the Android workload before asking it for its dependencies
Build / Desktop, server and tools (push) Successful in 29s
InstallAndroidDependencies is a target of the Android SDK workload, so on
a runner without it the build stopped at NETSDK1147.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
2026-10-15 01:21:43 +02:00
thepraandClaude Opus 5.5 8eaf9f36fc Every official language, in JSON: 113 listed, five shipped so far
Build / Desktop, server and tools (push) Successful in 33s
The language list comes from CLDR (official in a UN member state, plus the
six UN languages), with autonyms and text direction supplied for the 21
that ICU does not know. Strings move from resx to one JSON file per
language, looked up by code, so a language unknown to ICU or MSBuild still
loads; tools/strings.cs checks keys and placeholders in CI. Arabic, Hindi
and Chinese drafts prove right-to-left and system-font fallback.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
2026-10-15 01:18:13 +02:00
thepraandClaude Opus 5.5 7589121846 me-web? skeleton: Avalonia 12 app, server, packaging and CI
Build / Desktop, server and tools (push) Successful in 1m7s
The first screen (online or not, a Check button, every language with a
draft notice), the desktop and Android heads, the server's /api/info and
/api/ip, a release tool that builds deb, rpm, a Windows exe, macOS zips,
a signed APK and the server, and the Gitea workflows that run it. Rules
adapted from passolo; AGPL-3.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
2026-10-15 01:14:44 +02:00