Commit Graph

1450 Commits

Author SHA1 Message Date
AJ ONeal
895adebcc3 docs: confirm go armv6l fix, all blocking issues resolved
Go armv6l dropped from 1,936 to 648 warnings. All tests passing.
Remaining 7,606 warnings are informational classifier limitations.
No further GOER action needed.
2026-03-11 15:25:21 -06:00
AJ ONeal
ee493d758e docs: note go armv6 fix in ANSWERS.md 2026-03-11 15:20:40 -06:00
AJ ONeal
9a391adfe5 fix(legacy): remove go armv6→arm backport; Node classifier expects armv6
The Node classifier maps armv6l filenames → armv6, so the cache should
emit armv6 not arm. The previous backport predates the armv6l→armv6
normalizeGoArch fix and is no longer needed.
2026-03-11 15:20:23 -06:00
AJ ONeal
8d6134eee2 docs: correct go armv6l advice — armv6 was right, not arm
The Node classifier maps armv6l → armv6, not arm. My previous advice
to change to arm was wrong. Remaining warnings are informational.
2026-03-11 15:18:10 -06:00
AJ ONeal
afa131f6d3 docs: update ANSWERS.md — go arm fix already applied, universal2 reverted 2026-03-11 15:07:02 -06:00
AJ ONeal
8debd4e631 fix(legacy): revert universal2 expansion; Node side will handle via WATERFALL
Expanding universal2 into aarch64+x86_64 entries creates filename/arch
mismatches: the filename still contains 'universal' so the Node classifier
re-parses it as universal2, then sees arch=aarch64 and flags a mismatch.
Keep universal2 as-is; the Node agent will add it to their WATERFALL.
2026-03-11 15:06:49 -06:00
AJ ONeal
dfae22745b docs: report new issues — go armv6l regression, universal2 expansion conflicts 2026-03-11 15:04:54 -06:00
AJ ONeal
f040c3619c docs: note cache copy to Node agent worktree 2026-03-11 15:02:35 -06:00
AJ ONeal
dde9de2af0 docs: acknowledge GOER fixes, flag partial cache regen 2026-03-11 14:56:31 -06:00
AJ ONeal
56f27c83e4 docs: update ANSWERS.md with responses to QUESTIONS.md classifier issues 2026-03-11 14:54:59 -06:00
AJ ONeal
aec68692a1 fix(classify): fix ARM, ppc64el, winx64 detection; fix legacy universal2/solaris export
Classifier fixes:
- Remove Windows arm→arm64 auto-promotion; packages like caddy/fzf/goreleaser
  have genuine arm32 Windows builds (windows_armv6) that were wrongly promoted
- Add armel and gnueabihf as ARMv6 aliases (jq, caddy and others use these)
- Add winx64 to Windows OS pattern (MariaDB uses winx64 in filenames)
- Add ppc64el as ppc64le alias (Debian/Ubuntu naming, used by jq)
- Normalize armv6l → armv6 in normalizeGoArch (Go dist had armv6l filenames)
- Fix classifyGPGDist hardcoded "amd64" → buildmeta.ArchAMD64 ("x86_64")

Legacy export fixes:
- Map solaris/illumos → sunos globally (Node.js only knows "sunos")
- Expand universal2 → two entries (aarch64 + x86_64) so Hugo/cmake/gh/syncthing
  work on both Apple Silicon and Intel Mac in the legacy resolver
- Remove double-application of legacyFieldBackport (toLegacy no longer calls it)
2026-03-11 14:54:25 -06:00
AJ ONeal
e60c4279d3 docs: rewrite QUESTIONS.md for fresh GOER session
Self-contained communication guide with blocking cache
normalization request, concrete examples, and full context.
2026-03-11 14:44:08 -06:00
AJ ONeal
290664c112 docs(researcher): node/go/mariadb/gpg fetcher details for Go equivalents 2026-03-11 14:43:28 -06:00
AJ ONeal
df70c4eb82 docs(researcher): highlight ANYOS-first answer, add disk cache format for pgstore 2026-03-11 14:42:18 -06:00
AJ ONeal
b236c8ac6b ref: move legacy field backport from classifypkg to ExportLegacy; add .apk/.AppImage formats
- Remove LegacyBackport from classifypkg and webicached; canonical values
  now flow through storage untouched
- Add legacyFieldBackport() in storage/legacy.go, called only at export time
  (go: armv6→arm, ffmpeg windows: .gz/.empty→.exe)
- ExportLegacy now takes pkg name and returns LegacyDropStats (variants + formats dropped)
- fsstore.Commit logs dropped assets so filtering is visible
- Add FormatAPK (.apk) and FormatAppImage (.AppImage) to buildmeta and classify
  so those files are properly classified and then correctly dropped from legacy export
  rather than passing through as empty-format
2026-03-11 14:41:30 -06:00
AJ ONeal
afa65bbf87 docs: BLOCKING — cache normalization needed before moving on 2026-03-11 14:34:51 -06:00
AJ ONeal
031a15b0ea feat(webid): wire golib middleware for request logging
Uses therootcompany/golib/http/middleware/v2 to add requestLogger to all
routes except /api/health (too noisy). Logs method, path, status, duration.
2026-03-11 14:31:37 -06:00
AJ ONeal
93786ecfb9 docs: update GOER.md — Phase 4 pgstore complete 2026-03-11 14:29:11 -06:00
AJ ONeal
102be6e635 feat(pgstore): add PostgreSQL storage backend
Implements storage.Store for PostgreSQL using pgx/v5.

Schema uses double-buffered generations per package — write into the
inactive gen, then atomically swap the active pointer on Commit. Readers
always see a complete consistent snapshot.

Write path: BeginRefresh → Put (staged in-memory) → Commit (CopyFrom + swap)
Read path:  Load → reads active gen from webi_packages, fetches assets

Both webid and webicached now accept -pg=<dsn> to use pgstore instead
of fsstore. Schema is applied idempotently on startup.

Also:
- storage.Store interface gains ListPackages(ctx) — fsstore reads the
  directory; pgstore queries webi_packages
- webid.loadAll() uses ListPackages instead of filepath.ReadDir
- Fixed .gitignore: /webid (root binary) was incorrectly matching cmd/webid/
2026-03-11 14:29:01 -06:00
AJ ONeal
5cf9b96c06 docs: concrete example of cache JSON values causing warnings 2026-03-11 14:26:15 -06:00
AJ ONeal
31dc1f114b ref(classify): separate core classifier from legacy backport
Move legacy-specific field translations out of the core classifier into
LegacyBackport(), called by webicached before writing the JSON cache.

Core classifier now outputs canonical values:
- Go dist arm → armv6 (correct per GOARM default)
- ffmpeg Windows .gz → .gz (correct file extension)

LegacyBackport remaps for Node.js compat:
- Go dist armv6 → arm (production keeps raw API value)
- ffmpeg Windows .gz → exe (production releases.js override)

sass armv6→armv7 stays in classifier (Dart Sass genuinely targets ARMv7).
2026-03-11 13:58:59 -06:00
AJ ONeal
de1de7fccd docs: clarify that warnings are cache output values, not data diffs
The comparecache equivalence matching hides the issue. The Node
build-classifier needs normalized values (armv6 not armhf, sunos not
solaris) in the actual cache JSON files.
2026-03-11 13:56:21 -06:00
AJ ONeal
c7f7fd5fe3 docs: update GOER with progress report and top 3 impact fixes 2026-03-11 13:52:42 -06:00
AJ ONeal
f5f74d142a docs: update GOER.md — 98/101 packages match, 3 known diffs remain 2026-03-11 13:52:31 -06:00
AJ ONeal
c4ebd55753 fix(classify): add package-specific overrides for sass, ffmpeg, go arm
- sass: bare arm → armv7 (Dart Sass targets ARMv7, not v6)
- ffmpeg: Windows .gz → ext exe (gzipped bare executables)
- go: keep bare arm as-is from Go dist API (matches production)

Reduces comparecache diffs from 6 packages to 3 (iterm2 channel edge
cases, postgres legacy ext, terraform alpha detection — all understood).
2026-03-11 13:52:06 -06:00
AJ ONeal
e5dc8d973f docs: answer ANYOS question, re-emphasize 9 classification issues 2026-03-11 13:43:38 -06:00
AJ ONeal
e1ed3999e3 docs: update GOER.md with comparecache findings and researcher question 2026-03-11 13:42:49 -06:00
AJ ONeal
c4a91002f6 fix(classify): use Go API structured os/arch for golang releases
The golang dist API provides structured os/arch fields. Using these
instead of filename-based classification fixes:
- illumos/solaris kept distinct (not merged to sunos)
- arm arch correctly mapped per GOARCH convention
- buildmeta: add OSIllumos and OSSolaris constants
2026-03-11 13:42:34 -06:00
AJ ONeal
19c55b0131 docs: add reminder for GOER about 9 classification issues 2026-03-11 13:39:32 -06:00
AJ ONeal
c0f8313a62 fix(comparecache): use equivalence matching for os/arch/ext naming
Replace direct string comparison with canonical equivalence checks so
naming convention differences (darwin/macos, x86_64/amd64, aarch64/arm64)
don't appear as false diffs. Now only real classification disagreements
surface:
- go: illumos/solaris→sunos mapping, arm ambiguity per OS
- sass: bare "arm" should be armv7, not armv6
- ffmpeg: Windows .gz ext classified as exe in prod
- terraform: alpha channel detected correctly by Go, missed by prod
- postgres: legacy EDB ext "tar" vs "tar.gz"
2026-03-11 13:37:24 -06:00
AJ ONeal
aa6df09188 fix(pg): filter to server assets; add field-level cache comparison
- pg/releases.conf: add asset_filter=postgres so pg only returns server
  assets (which include the client), matching production releases.js
- classifypkg: add "pg" to postgres version normalizer switch case
- comparecache: compare os/arch/libc/ext/channel fields on shared assets,
  distinguishing real disagreements (diff-*) from expected fill diffs
  where Go classifies at write time but Node.js leaves fields empty
2026-03-11 12:55:41 -06:00
AJ ONeal
992d50eaca docs: detailed Go cache classification issues from Node tests
9 categories: universal2, solaris/illumos, armhf, armel, windows arm,
android, winx64, minor arch mismatches, sttr pkg misclassification.
Plus broad sweep failures and live-compare known diffs.
2026-03-11 12:48:34 -06:00
AJ ONeal
c22fd35cdf docs: update GO_WEBI.md — phases 1-3 complete 2026-03-11 12:40:33 -06:00
AJ ONeal
d76e93c380 fix(resolver): prefer no-dep builds in libc waterfall
Static (none) first on all platforms — no runtime dependencies.
Linux: none, gnu, musl. Windows: none, msvc (vcredist not bundled).
2026-03-11 12:34:08 -06:00
AJ ONeal
7da1cc0394 docs: update GOER.md with Windows gnu and padding fixes 2026-03-11 12:31:33 -06:00
AJ ONeal
a3685b840b fix: Windows gnu→none, install.sh 8-space padding
- Windows gnu (MinGW) builds are self-contained: classify as libc='none'
- Pad install.sh content to 8 spaces to match production template indent
- Use replaceMarkerLine for both bash and PS1 installer injection
2026-03-11 12:31:17 -06:00
AJ ONeal
2e1d824b27 docs: consolidate ANSWERS.md and add GOER.md for agent communication 2026-03-11 12:26:31 -06:00
AJ ONeal
239e570be0 docs: answer Issue 5 — static musl libc classification fix 2026-03-11 12:19:44 -06:00
AJ ONeal
47419b7eee fix(classifypkg): tag Rust static musl builds as libc='none'
Rust *-unknown-linux-musl builds are statically linked with zero
runtime libc dependency. Detect this pattern in classifyGitHub and
override libc from 'musl' to 'none'. Hard-musl packages (pwsh, bun,
node) use different filename patterns and keep libc='musl'.
2026-03-11 12:19:21 -06:00
AJ ONeal
9095b34c22 feat(render): implement PowerShell installer rendering
Add PowerShell() function to render .ps1 installers by injecting
$Env: variables and splicing install.ps1 content. Wire it into
the webid server for .ps1 extension requests.
2026-03-11 12:05:15 -06:00
AJ ONeal
a76413012f ref(installerconf): remove back-compat aliases for old key names
Remove github_repo, github_source, gitea_repo aliases. Not released
yet — no need for backwards compatibility.
2026-03-11 11:55:06 -06:00
AJ ONeal
23100394ac ref(installerconf): rename config keys and add full URL support
Renames:
- github_repo → github_releases (back-compat kept)
- github_source → github_sources (back-compat kept)
- gitea_repo → gitea_releases (back-compat kept)

New keys:
- gitea_sources, gitlab_releases, gitlab_sources

All keys now accept either owner/repo shorthand or full URLs:
- github_releases = sharkdp/bat
- github_releases = https://github.com/sharkdp/bat
- gitea_releases = https://git.rootprojects.org/root/pathman

Defaults: github → github.com, gitlab → gitlab.com.
Gitea has no default (self-hosted only).

Updated all 73 releases.conf files from github_repo to github_releases.
2026-03-11 11:51:43 -06:00
AJ ONeal
bd3bd85e43 feat(installerconf): github_source packages include git_url for clone fallback
git_url is now a standalone field that can appear alongside any source
type. For githubsource packages, it adds a git clone entry per release
in addition to the tarball and zipball. Updated aliasman, duckdns.sh,
and serviceman configs.
2026-03-11 11:46:59 -06:00
AJ ONeal
bbcaa0f464 docs: update answers with three-strategy fix details 2026-03-11 11:42:59 -06:00
AJ ONeal
0ae4d01d75 fix(classifypkg): separate github, githubsource, and gittag strategies
Three distinct fetch/classify strategies:
- github: binary assets only, no source entries
- githubsource: tarball + zipball from GitHub releases API
- gittag: git clone + tag enumeration (existing)

GitHub binary packages (caddy, jq, shellcheck, etc.) no longer get
spurious .git and source tarball entries for old releases that had
no binary uploads. Source-installable packages (aliasman, duckdns.sh,
serviceman) now use github_source in releases.conf.
2026-03-11 11:42:35 -06:00
AJ ONeal
5858a9fefd docs: confirm .git resolution is a Node.js resolver issue, not cache data 2026-03-11 11:34:49 -06:00
AJ ONeal
a5f2dc87cf fix(comparecache): -sample picks random assets, not packages
-sample N now randomly samples N assets from each package's diff list,
giving a representative view of classification differences instead of
showing only the first alphabetical entries. Implies -windowed -diffs
to filter out version-depth noise and focus on real bugs.
2026-03-11 11:31:58 -06:00
AJ ONeal
47081c6e17 fix(installerconf): align tests with actual config format
Tests were using separate source/owner/repo keys but the parser expects
github_repo=owner/repo, gitea_repo=owner/repo, etc. Fixed all test
configs to match. Also answered Issue 4 (darwin-universal) for other agent.
2026-03-11 11:29:30 -06:00
AJ ONeal
2b488693b0 feat(comparecache): add -sample flag to pick random extra packages
Usage: go run ./cmd/comparecache -sample 8 -diffs
Picks 8 random packages beyond any explicitly named ones, logs which
ones were sampled for reproducibility.
2026-03-11 11:20:43 -06:00
AJ ONeal
5606773945 fix(webid): add missing imports to bootstrap_test.go
The getWithUA helper needs io, net/http, and net/http/httptest imports.
All 4 bootstrap/installer tests pass.
2026-03-11 11:18:43 -06:00