---
id: f9296420-bf9c-41fc-a0da-8955bd400ae7
title: CI redaction corrupts logs for relative repo paths
state: closed
labels:
- kind:build
assignees: []
milestone: null
created: 2026-10-27T18:08:32.923269325Z
updated: 2026-10-27T18:20:51.872437238Z
---
## What

CI log redaction mangles relative repo paths because it treats `.` as a literal path needle.

`src/forge.rs:771-779`:

```rust
for p in [root_abs.as_path(), root] {
    let needle = p.to_string_lossy();
    if !needle.is_empty() && needle != "/" {
        out = out.replace(needle.as_ref(), "<repo>");
    }
}
```

When the repo is passed as `.` (the normal `hu13 build .` invocation), `repo_root` is `.`/`""`, so every `.` in every log becomes `<repo>`.

## Reproduced

Build from a fixture with `hu13 build . -o …` and a CI log containing:

```
Checking hu13 v0.1.0 (/tmp/rev4-ci)
```

Rendered log:

```
Checking hu13 v0<repo>1<repo>0 (<repo>)
```

## Impact

CI pages are corrupted/unreadable; relative repo arguments are common. This is a regression in #94.

## Fix

Canonicalize the repo root first and only replace absolute path needles; skip `.`/`..` and empty relative parents. Add a test invoking a relative repo path, not only absolute fixtures.
