Private
Public Access
56 lines
2.9 KiB
Markdown
56 lines
2.9 KiB
Markdown
# Capy String Host Paths
|
|
|
|
## Objective and Invariants
|
|
Move exact float formatting and suitable byte-string operations into Capy. Preserve byte behavior, decimal round trips, ARC balance, and demand-selected startup cost.
|
|
|
|
## Success Criteria
|
|
- [x] Capy formats binary64 values without a formatter host import.
|
|
- [x] Required decimal outputs and sampled finite round trips pass.
|
|
- [x] Each migrated string operation preserves empty, whitespace, NUL, and UTF-8 behavior.
|
|
- [x] Each migrated operation improves its measured host path.
|
|
- [x] Operations that remain faster on the host stay on the host.
|
|
- [x] All acceptance gates pass after a cache warm-up.
|
|
- [x] Golden artifacts are regenerated last.
|
|
|
|
## Current State
|
|
- Status: complete
|
|
- Source/runtime: `/root/mount_ssh/capy-bearer`, `root@10.4.2.122:/Code/capy-bearer`
|
|
|
|
## Decisions
|
|
- Use exact bigint conversion for 17-significant-digit binary64 output. This matches the existing output contract and the required `1.9` output.
|
|
- Keep `upper`, `lower`, `contains`, `strpos`, `replace`, `split`, `split_space`, and `join` on their measured host paths.
|
|
- Move `trim`, `str_starts_with`, `str_ends_with`, `safe_name`, and `html_escape` into Capy.
|
|
- Keep `split_space` on the host. Its Capy version measured slower because each token enters a DValue list.
|
|
- Keep `split` and `join` on the host-facing DValue path. Their list conversions dominate their cost.
|
|
|
|
## Measurements
|
|
|
|
| Operation | Before, us/op | After, us/op | Result |
|
|
| --- | ---: | ---: | --- |
|
|
| `format_f64` | 12.105 | 7.45-8.20 | Moved. Exact, but above the 1 us target. |
|
|
| `trim` | 4.205 | 0.43 | Moved. |
|
|
| `upper` | 0.47 | 0.47 | Kept host path. |
|
|
| `lower` | 0.69 | 0.47 | Kept host path. |
|
|
| `contains` | 0.20 | 0.14 | Kept host path. |
|
|
| `str_starts_with` | 12.66 | 0.26 | Moved. |
|
|
| `str_ends_with` | 12.48 | 0.26 | Moved. |
|
|
| `strpos` | 0.21 | 0.14 | Kept host path. |
|
|
| `replace` | 0.84 | 0.69 | Kept host path. |
|
|
| `split` | 12.72 | 11.59 | Kept host path. |
|
|
| `split_space` | 12.38 | 21.12 | Reverted to host path. |
|
|
| `join` | 48.40 | 39.59 | Kept existing implementation. |
|
|
| `safe_name` | 5.12 | 0.45 | Moved. |
|
|
| `html_escape` | 6.33 | 1.58 | Moved. |
|
|
|
|
The operation benchmark uses 1,000 iterations. Runtime jitter affects the host-heavy list operations. The migration decision uses repeated warm runs.
|
|
|
|
## Startup Evidence
|
|
- Baseline measured in this session: minimal 4,070 bytes at 0.020 seconds. Ten calls 15,080 bytes at 0.035 seconds.
|
|
- Current warm measurement: minimal 4,070 bytes at 0.010 seconds. Ten calls 17,857 bytes at 0.020 seconds.
|
|
- The ten-call unit grew by 2,777 bytes. Shared helpers compile once, but their in-Wasm bodies increase the unit size.
|
|
|
|
## Acceptance Evidence
|
|
- 2026-08-31: The warm acceptance run passed all gates except one transient parallel proactive compile check.
|
|
- 2026-08-31: The immediate CLI suite rerun passed all checks.
|
|
- 2026-08-31: The artifact golden write and plain check passed after all source changes.
|