Skip to content

Commit 944fe5c

Browse files
committed
Complete journalctl parity gate
1 parent c42a120 commit 944fe5c

13 files changed

Lines changed: 1290 additions & 273 deletions

File tree

.agents/sow/SOW-status.md

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Last updated: 2026-06-21
44

55
## Current
66

7-
No current SOW.
7+
- None.
88

99
## Pending
1010

@@ -33,17 +33,16 @@ No current SOW.
3333
## Recently Closed Or Completed
3434

3535
- SOW-0121 - File-Backed Journalctl Full Parity And Ship Decision: completed
36-
after regression repair on 2026-06-21. Rust and Go now recognize the official
37-
systemd v260.1 `journalctl` option/action surface and pass stock-oracle
38-
parser, directory, and file-backed query matrices for covered offline
39-
behavior, including cursor strings, output modes, boot separators,
40-
field/value listing, invocation filters, repeated files, disjunction groups,
41-
vacuum edge cases, and daemon-only controlled errors. Final validation passed
42-
parser manifest/parity, directory matrix, query matrix with 581 zero-failure
43-
results against stock `systemd 260 (260.1-2-manjaro)`, full Go tests, full
44-
Rust workspace tests, docs validation, whitespace checks, read-only external
45-
review disposition, and SOW audit. Remaining performance work is tracked by
46-
SOW-0122.
36+
after strict P0/P1/P2 reviewer-gate repair. Rust and Go portable
37+
`journalctl` now recognize the full official systemd v260.1 option/action
38+
surface, preserve required file-backed parity for the repaired timestamp,
39+
cursor, directory, reverse, merge, invocation, and rotate-vacuum cases, and
40+
reject daemon/host-only behavior with portable unsupported messages. Local
41+
validation passed parser parity, stock-oracle interoperability, Rust and Go
42+
tests, full Rust workspace tests, full Go tests, and whitespace checks. The
43+
final requested reviewer gate returned valid `P0/P1/P2 FINDINGS: NO` reports
44+
from glm, minimax, kimi, mimo, deepseek, and qwen; only P3 cosmetic or
45+
optional-hardening observations remain.
4746
- SOW-0094 - Rust Explorer Lazy Compressed Field Inference Experiment: closed
4847
without implementation by user decision on 2026-06-21. The optimization is not
4948
important enough to keep in the active backlog. No SDK behavior, source,

.agents/sow/done/SOW-0121-20260621-file-backed-journalctl-full-parity.md

Lines changed: 341 additions & 4 deletions
Large diffs are not rendered by default.

.agents/sow/specs/journalctl-v260-parity-matrix.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ disk-image/rootfs-only, or unsafe without an explicit file/directory target.
5757
| `--system` | none | recognized-no-op | Recognize. With explicit file input it has no effect. With explicit directory input, filter system journal files only if repository directory metadata supports it; otherwise accept as no-op and record test evidence. Without file/directory input, return unsupported because default host journal discovery is not portable. |
5858
| `--user` | none | recognized-no-op | Recognize. With explicit file input it has no effect. With explicit directory input, filter current-user journal files only if repository directory metadata supports it; otherwise accept as no-op and record test evidence. Without file/directory input, return unsupported because current-user host journal discovery is not portable. |
5959
| `-M`, `--machine=` | string | recognized-unsupported | Requires local container or machine journal access. Never connect to a host or container. |
60-
| `-m`, `--merge` | none | recognized-no-op | Recognize. Interleaving multiple explicit file/directory inputs is already the portable directory/file behavior. Preserve official conflicts with `--boot` and `--list-boots`. |
61-
| `-D`, `--directory=` | path | file-backed-required | Open journal files from the supplied directory, including supported repository `.journal.zst` directory files. |
60+
| `-m`, `--merge` | none | recognized-no-op | Recognize. Interleaving multiple explicit file/directory inputs is already the portable directory/file behavior. Preserve official conflicts with specific `--boot` selectors and `--list-boots`; allow `--boot=all` with `--merge` like systemd v260.1. |
61+
| `-D`, `--directory=` | path | file-backed-required | Open journal files from the supplied directory, including supported repository `.journal.zst` directory files. Reject regular-file input passed through `--directory=` instead of silently treating it like `--file=`. |
6262
| `-i`, `--file=` | glob/path | file-backed-required | Open one or more explicit journal files. Multiple `--file=` occurrences and glob expansion must be supported. `--file=-` must be recognized; support only if a seekable stdin-backed implementation exists, otherwise return a specific unsupported message. |
6363
| `--root=` | path | recognized-unsupported | Requires alternate root filesystem discovery and catalog hierarchy access. Do not inspect host rootfs. |
6464
| `--image=` | path | recognized-unsupported | Requires disk image dissection/mounting. Do not mount or inspect images. |
@@ -69,10 +69,10 @@ disk-image/rootfs-only, or unsafe without an explicit file/directory target.
6969

7070
| Option | Args | Classification | Required portable behavior |
7171
| --- | --- | --- | --- |
72-
| `-S`, `--since=` | timestamp | file-backed-required | Inclusive realtime lower bound. Match official timestamp grammar where practical. |
73-
| `-U`, `--until=` | timestamp | file-backed-required | Inclusive realtime upper bound. Reject `--since` later than `--until`. |
74-
| `-c`, `--cursor=` | cursor | file-backed-required | Seek to the specified cursor and include that entry when it matches filters. |
75-
| `--after-cursor=` | cursor | file-backed-required | Seek to the specified cursor and start after that entry when it is present. |
72+
| `-S`, `--since=` | timestamp | file-backed-required | Inclusive realtime lower bound. Match official timestamp grammar where practical, including stock-accepted ISO `T` forms and timezone offsets. |
73+
| `-U`, `--until=` | timestamp | file-backed-required | Inclusive realtime upper bound. Reject `--since` later than `--until`. Match official timestamp grammar where practical, including stock-accepted ISO `T` forms and timezone offsets. |
74+
| `-c`, `--cursor=` | cursor | file-backed-required | Seek to the specified cursor and include that entry when it matches filters. Match stock cursor seek ordering, including ignoring the optional `x=` hash for locating candidate entries while preserving exact cursor matching where required. |
75+
| `--after-cursor=` | cursor | file-backed-required | Seek to the specified cursor and start after that entry when it is present. Match stock cursor seek ordering, including ignoring the optional `x=` hash for locating candidate entries while preserving exact cursor matching where required. |
7676
| `--cursor-file=` | path | file-backed-required | Read cursor from the caller-provided file if present, start after it, and atomically update the file with the final cursor. |
7777
| `-b`, `--boot[=ID]` | optional descriptor | file-backed-required | Support no argument, `all`, numeric offsets, boot IDs, and boot ID plus offset from explicit file/directory entries. Do not use the host boot ID. |
7878
| `--this-boot` | none | file-backed-required | Deprecated alias for the current `--boot` selection. Resolve from explicit file/directory input, not host state. |
@@ -181,9 +181,9 @@ Every official v260.1 output mode is `file-backed-required`:
181181
| Time bounds | parser-required | Reject `--since=` later than `--until=`. |
182182
| Cursor source exclusivity | parser-required | Reject more than one of `--since=`, `--cursor=`, `--cursor-file=`, and `--after-cursor=`. |
183183
| Follow/reverse conflict | parser-required | Reject `--follow` with `--reverse`. |
184-
| Oldest-lines conflict | parser-required | Reject `--lines=+N` with `--reverse` or `--follow`. |
184+
| Oldest-lines conflict | parser-required | Reject `--lines=+N` with `--reverse` or `--follow` for the show action. Preserve official action-specific behavior for non-show actions. |
185185
| Action argument restriction | parser-required | For actions other than show, list catalog, and dump catalog, reject extraneous arguments. |
186-
| Boot/merge conflict | parser-required | Reject `--boot` or `--list-boots` with `--merge`. |
186+
| Boot/merge conflict | parser-required | Reject specific `--boot` selectors or `--list-boots` with `--merge`; allow `--boot=all` with `--merge`. |
187187
| Option interspersing | parser-required | Accept recognized options before or after show-action `FIELD=value`, `+`, or path-match positional arguments, matching stock argument permutation. |
188188
| Explicit empty boot descriptor | parser-required | Treat bare `--boot` as the current boot, but reject explicit `--boot=` as a failed empty boot descriptor like stock. |
189189
| Explicit empty optional values | parser-required | Reject explicit empty values where stock rejects them, including `--lines=` and `--case-sensitive=`. Bare `--lines` and bare `--case-sensitive` remain valid. |

0 commit comments

Comments
 (0)