|
2905 | 2905 | {"id":"bd-cosbg1","title":"[perf][no-gaps] powf irrational 2.73x slower than glibc — needs fused minimax powf (decompose log2f+exp2f is the wall)","description":"glibc_baseline_math/powf_irrational (base in [0.5,2.5), exp 1.337): fl 1615ns/batch vs glibc 589 = 2.73x slower (WORST math gap). ROOT CAUSE: fl powf_medium decomposes into exp2f(y*log2f(x)) = TWO f32 libm transcendentals (~25ns), while glibc powf is a single FUSED routine (~9ns). Decomposition is fundamentally ~2.5x slower regardless of precision. ATTEMPTS REJECTED 2026-06-05: (1) f64-kernel decompose super::exp2(y*super::log2(x)) — REGRESSED to 37ns (f64 transcendentals cost MORE per-call than f32 siblings); (2) f32 logf*LOG2_E reroute (logf cheaper than log2f) — FAILED 4-ULP parity, powf(2.1247,-2.8547) off by >4 ULP (f32 lacks precision headroom for the extra multiply). CONCLUSION: only a FUSED minimax powf closes this — a single-pass polynomial approx of x^y over a reduced domain (range-reduce base mantissa + exponent split, evaluate combined log2/exp2 minimax with f64 intermediate, round once). Alien-artifact class: needs offline minimax coefficient generation (Remez/Sollya-style) with a 4-ULP-vs-glibc proof obligation. Same wall as pow_irrational bd-2g7oyh.116 (1.89x) and log2 bd-e4jb7k residual. Parent perf epic bd-2g7oyh.","status":"closed","priority":2,"issue_type":"task","assignee":"BlackThrush","created_at":"2026-06-05T16:42:42.285135830Z","created_by":"ubuntu","updated_at":"2026-06-05T21:20:01.248532193Z","closed_at":"2026-06-05T21:20:01.248442674Z","close_reason":"kept: powf_irrational exact-exp polynomial p50 974.617->620.781 ns mean 985.510->637.352 on RCH ts1; core+ABI <=4 ULP proofs pass; artifact tests/artifacts/perf/bd-cosbg1-powf-1-337-polynomial.md","source_repo":"frankenlibc","source_repo_path":"/data/projects/frankenlibc","compaction_level":0,"original_size":0} |
2906 | 2906 | {"id":"bd-cqni7","title":"Replace aarch64 arch regression gate panic surfaces","description":"Idea-wizard completion-contract hardening batch. Replace direct unwrap()/expect() JSON shape panic surfaces in crates/frankenlibc-harness/tests/aarch64_arch_regression_gate_completion_contract_test.rs with checked Result error handling while preserving the existing architecture regression gate assertions. Validate with targeted panic scan, rustfmt check, bash syntax/local checker, br dep cycles --no-db --json, focused remote rch test/check/clippy, and UBS on the edited file.","status":"closed","priority":2,"issue_type":"task","assignee":"BrownTern","created_at":"2026-05-15T07:10:20.258417714Z","created_by":"ubuntu","updated_at":"2026-05-15T07:55:51.101332679Z","closed_at":"2026-05-15T07:55:51.101060915Z","close_reason":"Shipped in 94effeb9: aarch64 arch regression contract test no longer has unwrap/expect/panic macro surfaces; focused remote rch test/check/clippy, checker, UBS, and no-db dep-cycle validation passed; main and master mirrored.","source_repo":".","compaction_level":0,"original_size":0} |
2907 | 2907 | {"id":"bd-crm9x","title":"Remove beads SQLite integrity panic surfaces","description":"Empty-queue testing posture cleanup. Replace remaining unwrap/expect panic surfaces in crates/frankenlibc-harness/tests/beads_sqlite_integrity_completion_contract_test.rs with fallible TestResult/io::Error paths, then validate the scoped checker/test surface with rch.","status":"closed","priority":2,"issue_type":"task","assignee":"RoseKite","created_at":"2026-05-15T13:52:47.032025702Z","created_by":"ubuntu","updated_at":"2026-05-15T14:00:06.711668009Z","closed_at":"2026-05-15T14:00:06.711366368Z","close_reason":"Completed beads SQLite integrity completion-contract panic-surface cleanup. Updated crates/frankenlibc-harness/tests/beads_sqlite_integrity_completion_contract_test.rs to make repo_root fallible, make mutated_contract closures return TestResult, replace mutable-array unwraps with io::Error paths, and allow the worker-tracker-gap branch to recognize current no-db/DB drift messages: counts.db_vs_jsonl warn, sync jsonl_newer drift, and bd-yaiw.1 status drift. Proof: panic scan clean; bash -n scripts/check_beads_sqlite_integrity_completion_contract.sh; jq empty tests/conformance/beads_sqlite_integrity_completion_contract.v1.json; rustfmt --check; git diff --check; br --no-db dep cycles clean; UBS critical=0. Direct checker currently reports the expected no-db/DB drift failure, which the harness validates through the worker tracker gap path. rch remote: cargo test -p frankenlibc-harness --test beads_sqlite_integrity_completion_contract_test -- --nocapture passed 5/5 on vmi1264463; cargo check -p frankenlibc-harness --test beads_sqlite_integrity_completion_contract_test exited 0 on vmi1227854; cargo clippy -p frankenlibc-harness --test beads_sqlite_integrity_completion_contract_test -- -D warnings exited 0 on vmi1167313.","source_repo":".","compaction_level":0,"original_size":0} |
2908 | | -{"id":"bd-crp0rw","title":"getdomainname null pointer host-errno parity","description":"getdomainname has an ABI null-pointer guard but no differential coverage. Add a no-mock host comparison proving NULL+nonzero length returns -1 and EFAULT like glibc.","status":"open","priority":2,"issue_type":"task","created_at":"2026-06-18T03:49:25.135715285Z","created_by":"ubuntu","updated_at":"2026-06-19T03:25:43.212685957Z","source_repo":"frankenlibc-cod-b-cuserid-20260618T0330","source_repo_path":"/data/projects/.scratch/frankenlibc-cod-b-cuserid-20260618T0330","compaction_level":0,"original_size":0} |
| 2908 | +{"id":"bd-crp0rw","title":"getdomainname null pointer host-errno parity","description":"getdomainname has an ABI null-pointer guard but no differential coverage. Add a no-mock host comparison proving NULL+nonzero length returns -1 and EFAULT like glibc.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-06-18T03:49:25.135715285Z","created_by":"ubuntu","updated_at":"2026-08-05T00:27:13.960496504Z","closed_at":"2026-08-05T00:27:13.960307737Z","close_reason":"Gate added in 34c7203e6. The ABI null guard already existed; the bead asked only for differential coverage. THE BEAD'S PREMISE IS REFUTED and that is the main finding.\n\nREFUTED PREMISE (measured, not recalled): the bead asked for a gate proving getdomainname(NULL, len>0) returns -1 and EFAULT 'like glibc'. Live glibc 2.42 on this host does NOT do that -- it has no null guard and SEGFAULTS. Measured two independent ways:\n (a) ctypes probe on thinkstation1, each case in its own subprocess: getdomainname(NULL, 64) -> exit -11 (SIGSEGV); getdomainname(NULL, 0) -> rc=0 errno=0 (len 0 means nothing is copied, so the null is never dereferenced).\n (b) reproduced independently on the remote worker by the committed gate itself, which forks a child and requires SIGSEGV.\nSo fl's -1/EFAULT is a deliberate TSM hardening divergence, NOT parity, and the gate says so rather than asserting a conformance claim that does not exist.\n\nALSO MEASURED, and more useful than the NULL case: glibc's Linux getdomainname truncates like strncpy and writes a terminator ONLY if it fits. With domainname='(none)' (len 6): len=1 -> '(' with no NUL; len=3 -> '(no' with no NUL; len=6 -> '(none)' with NO NUL; len=7 -> '(none)\\0'. There is no EINVAL for a short buffer (the generic non-Linux glibc implementation does return EINVAL there, which is what makes this worth pinning). fl already matches this exactly.\n\nEVIDENCE (remote via RCH_REQUIRE_REMOTE=1 rch exec, CARGO_BUILD_JOBS=2, -j2, CARGO_TARGET_DIR=/data/tmp/rch_target_frankenlibc_greenglen):\n cargo test -j2 -p frankenlibc-abi --test conformance_diff_getdomainname -> 3 passed; 0 failed.\n\nGATE (crates/frankenlibc-abi/tests/conformance_diff_getdomainname.rs), glibc reached by dlsym and asserted distinct from fl's entry point:\n - getdomainname_matches_glibc_across_buffer_lengths: compares rc, errno, and the WHOLE 512-byte poisoned (0xAA) buffer, so an over-write past len is caught as well as a missing terminator, over lengths straddling strlen(domain) (0,1,2,dl-1,dl,dl+1,dl+8,512). Lengths are derived from the host's actual domainname at runtime, not hardcoded.\n - getdomainname_exact_fit_is_not_nul_terminated_like_glibc: pins the len==strlen(domain) case separately, because a 'helpful' implementation that always terminates would still pass a looser sweep on other sizes.\n - getdomainname_null_is_a_deliberate_hardening_divergence: asserts fl returns -1/EFAULT, and MEASURES glibc's side in a forked child (RLIMIT_CORE 0 so no core file is dropped in the tree) requiring death by SIGSEGV. If glibc ever grows a null guard this arm fails and tells the next reader to convert it into a parity assertion.\n\nNEGATIVE CASE (proved, not asserted): with fl changed to always NUL-terminate -- the realistic 'helpful' bug -- BOTH parity arms failed (at len=1, fl wrote 0x00 where glibc wrote '(' = 0x28) while the hardening arm correctly stayed GREEN, since it does not exercise the copy path. Probe then removed; unistd_abi.rs is byte-identical to HEAD (it does not appear in git status).\n\nGATES: rustfmt --edition 2024: clean. clippy -p frankenlibc-abi --all-targets -D warnings: zero findings in the new file.\n\nSCOPE: test-only commit; no src change, because the implementation was already correct on every defined input and I verified that by breaking it and watching the gate fail. source_commit=1297152c8 -> 34c7203e6. Unrelated working-tree changes by other agents were not reverted or disturbed.","source_repo":"frankenlibc-cod-b-cuserid-20260618T0330","source_repo_path":"/data/projects/.scratch/frankenlibc-cod-b-cuserid-20260618T0330","compaction_level":0,"original_size":0} |
2909 | 2909 | {"id":"bd-cs-1","title":"PORT: crypt-salt sub-bead 1 — core::crypt::salt module","description":"Add crates/frankenlibc-core/src/crypt/mod.rs with: pub const DEFAULT_SHA_ROUNDS: u32 = 5000; pub const MIN_SHA_ROUNDS: u32 = 1000; pub const MAX_SHA_ROUNDS: u32 = 999_999_999; pub fn parse_crypt_salt(salt_bytes: &[u8], prefix_len: usize) -> (u32, &[u8]) following the SHA-crypt =NNNN$ wire format. Tests: simple $ with no rounds (defaults to 5000), explicit rounds=10000, rounds clamping (10 -> 1000, 1_000_000_000 -> 999_999_999), garbage rounds value falls back to 5000, salt longer than 16 truncated, salt with no trailing $ (consumed to end), empty salt, prefix_len=0 (no prefix consumed).","status":"closed","priority":1,"issue_type":"task","created_at":"2026-04-25T02:34:55.852460Z","updated_at":"2026-04-25T02:38:15.879523Z","closed_at":"2026-04-25T02:38:15.879523Z","close_reason":"Added crates/frankenlibc-core/src/crypt/{mod.rs, salt.rs} with: pub const DEFAULT_SHA_ROUNDS=5000, MIN_SHA_ROUNDS=1000, MAX_SHA_ROUNDS=999_999_999, MAX_SALT_LEN=16; parse_crypt_salt(salt_bytes, prefix_len) -> (u32, &[u8]) handling SHA-crypt $N$[rounds=NNNN$]salt$ wire format with bidirectional clamp, default-on-garbage rounds, salt truncation to 16 bytes. Defensive: prefix_len > buffer returns (DEFAULT, empty). 17 unit tests cover all edge cases plus a real-world SHA-512 line.","source_repo":".","compaction_level":0,"original_size":0} |
2910 | 2910 | {"id":"bd-cs-2","title":"PORT: crypt-salt sub-bead 2 — rewire abi callers","description":"Drop parse_crypt_salt from unistd_abi.rs. crypt_sha256 and crypt_sha512 call frankenlibc_core::crypt::salt::parse_crypt_salt directly (returning u32 rounds, cast to usize at call sites). Verify unistd_abi tests + any crypt-related conformance tests still pass.","status":"closed","priority":1,"issue_type":"task","created_at":"2026-04-25T02:34:55.852460Z","updated_at":"2026-04-25T02:38:15.879523Z","closed_at":"2026-04-25T02:38:15.879523Z","close_reason":"Replaced inline parse_crypt_salt (~34 lines) in unistd_abi.rs with a 5-line shim delegating to frankenlibc_core::crypt::salt::parse_crypt_salt. 173/173 abi lib tests pass; clippy + fmt clean. Verified via rch with CARGO_TARGET_DIR=/tmp/rch_target_frankenlibc_cc_bd-cs-2.","source_repo":".","compaction_level":0,"original_size":0} |
2911 | 2911 | {"id":"bd-cs-epic","title":"PORT: crypt($N$salt$) prefix parser to core::crypt::salt","description":"Lift parse_crypt_salt (~34 lines) out of unistd_abi.rs into core::crypt::salt. Pure byte-slice logic: detect optional rounds=NNNN parameter (clamped 1000..=999_999_999, default 5000), extract salt up to next $ or 16-byte cap, return (rounds, &salt). Used by both crypt_sha256 and crypt_sha512. Two clean sub-beads.","status":"closed","priority":1,"issue_type":"epic","created_at":"2026-04-25T02:34:55.852460Z","updated_at":"2026-04-25T02:38:15.879523Z","closed_at":"2026-04-25T02:38:15.879523Z","close_reason":"Epic complete in 2 sub-beads. Net effect: ~34 lines of inline SHA-crypt salt parsing in unistd_abi.rs replaced by ~75 lines of pure-safe core::crypt::salt with 17 isolation-tested cases. Clamping bounds (MIN/MAX/DEFAULT_SHA_ROUNDS) and salt-length cap (MAX_SALT_LEN) are now public constants reusable by any future crypt code.","source_repo":".","compaction_level":0,"original_size":0} |
|
0 commit comments