Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,26 @@

=== [Unreleased]

==== Added — `+assail --output-format kyaml+` writes a KYAML copy

* With `+--output-format kyaml+` and `+--output report.json+`, `+assail+` writes
`+report.kyaml+` beside the JSON report. The JSON stays the report of record: it
is what `+--attest+` seals. `+--output+` must end in `+.json+` (any letter case),
and no two of the files written (report, copy, and the `+--attest+` sidecar)
may be the same file: a symbolic link at any of their paths, or two existing
paths that are hard links to one file, is refused before anything is written.
So is a path that exists but is not a regular file (a directory, say) or that
cannot be looked up, such as a derived name over the filesystem's length limit.
In this mode each file is written by renaming a finished temporary file into
place (`+atomic_write::write_replacing+`, which also flushes the directory so
the rename survives a crash), so a link swapped in after those
checks is replaced rather than written through, and no reader sees a partial
report. On Unix a replaced file keeps the old file's permission bits, and the
temporary file is never more readable than the file it replaces; a new copy or
sidecar takes the report's permission bits, so a private report's companions
are private too.
Other formats are unchanged for `+assail+`.

==== Fixed — KYAML keys holding a line separator

* KYAML output now escapes U+2028 (LS) and U+2029 (PS) as `+\uXXXX+`, as it
Expand Down
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ sha2 = "0.11"
hex = "0.4"
getrandom = "0.4"
walkdir = "2.5"
same-file = "1.0" # assail: refuse a KYAML copy that aliases the sealed JSON report
toml_edit = { version = "0.23", default-features = false, features = ["parse"], optional = true }
dirs = "7.0"
ed25519-dalek = { version = "3.0", optional = true }
Expand Down
2 changes: 1 addition & 1 deletion README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ Globally applied flags let automation pipelines control verbosity, output format
| Flag | Default | Description
| `--report-view` | `Accordion` | Controls the presentation mode (`Accordion`, `Summary`, `Timeline`) that the CLI writes and that PanLL mirrors.
| `--expand-sections` | `false` | Expands extra detail blocks in the formatted report.
| `--output-format` | `json` | Chooses how saved reports are serialized: `json` (I-JSON/JCS), `yaml`, `kyaml` (the estate YAML dialect, byte-compatible with `yq -o kyaml`), `nickel` or `sarif`. The CLI reuses this when it writes PanLL exports or temporal diffs. `assail` always writes JSON.
| `--output-format` | `json` | Chooses how saved reports are serialized: `json` (I-JSON/JCS), `yaml`, `kyaml` (the estate YAML dialect, byte-compatible with `yq -o kyaml`), `nickel` or `sarif`. The CLI reuses this when it writes PanLL exports or temporal diffs. `assail` always writes the JSON report (the one `--attest` seals); with `kyaml` it also writes a `.kyaml` copy beside it, so `--output` must name a `.json` file.
| `--pivot` | `false` | Rotates the narrative axis for boards that expect events-first storytelling.
| `--store` | unset | Directory where generated reports, exports, and artifacts should land.
| `--quiet` | `false` | Suppresses informational log lines for automation.
Expand Down
Loading
Loading