Skip to content

Commit ab14475

Browse files
committed
plan: change: a fourth shape of the defect, and a build recipe that works
Building #1155's commit 11 found what three static passes had not: its headers include TcpClassicAlgorithmBase.h, TcpAlgorithmBase.h and TcpCubic.h before those files exist. Phase B was written against the names the rename would later give the files, so commits 11 to 14 include headers from their own future. check-includes.sh now finds it without a compiler, and step 1h3 carries the repair, which is small: point the includes at the names that exist there and let the rename commit update them, which is what the rename commit is for. The gate also reports the repair's own move commit and that one is right: a move that changes no content cannot fix its own includes, and PR-SERIES-BUILDS exempts it. The build recipe is written down because three traps cost an hour. Build from the repository root, never from src/, because the root makefile generates src/inet/features.h and the sub-make does not. Objects land in src/out rather than out. A libINET.so left in src/ by an earlier attempt makes the whole tree look current, so make exits 0 having done nothing. And git checkout leaves an unchanged file's mtime alone, so after moving to an older commit the differing files must be touched before make will rebuild them. With that, the head builds -- 1693 sources, no errors -- and per-commit builds work, which is what unblocked 1h3 and what step 1i needs. Plan: plan/pending/pr-1155-resolve-audit-findings.md Change: plan | behavior.change | - | pr-1155-findings
1 parent 23b0343 commit ab14475

1 file changed

Lines changed: 36 additions & 4 deletions

File tree

‎plan/pending/pr-1155-resolve-audit-findings.md‎

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,22 @@ The same tree-by-tree rebuild moved each field's declaration to the commit that
228228
under a `// declared here for the code above that already uses it:` header. **The final tree is
229229
byte-identical to the audited head** — the repair adds nothing at the end, only earlier.
230230

231+
**1h3. Repair the four forward includes (F-9). — open, and small.**
232+
233+
Commits 11 to 14 include `TcpClassicAlgorithmBase.h`, `TcpAlgorithmBase.h` and `TcpCubic.h`
234+
before those files exist, which
235+
[check-includes.sh](../../doc/project/enforcement/check-includes.sh) now reports. Phase B was
236+
written against the names the rename would later give the files.
237+
238+
Two ways to fix it, and the second is better. Point the includes at the names that exist at those
239+
commits and let the rename commit update them — which is what the rename commit is for, and it
240+
already touches those files' neighbours. The other way, moving the rename earlier, reorders the
241+
series for a smaller reason than it deserves.
242+
243+
The gate also reports the repair's own move commit, commit 15, and that one is correct: a move
244+
that changes no content cannot fix its own includes, and
245+
[PR-SERIES-BUILDS](../../doc/project/rule/pull-request.md#pr-series-builds) exempts it.
246+
231247
**1i. Re-cut phases B and C by feature (F-10). — open, and it is the large one.**
232248

233249
The parameter half of the partition is repaired; the logic half is not. Commit 18 still carries
@@ -440,10 +456,26 @@ at the commit that uses it, across all 63 commits, by
440456
[check-ned-params.sh](../../doc/project/enforcement/check-ned-params.sh) and a matching pass over
441457
the state messages.
442458

443-
**Setting up a reliable per-commit build is now the blocker for step 1i**, and
444-
[TR-CI-EVERY-COMMIT](../../doc/project/rule/testing.md#tr-ci-every-commit) wants it regardless. The
445-
recipe needs three things this session did not get right: build in `src/`, never leave a library
446-
in `src/`, and regenerate the `_m` files whenever the `.msg` files change under it.
459+
**The build recipe, which now works.** From the repository **root**, never from `src/`, because
460+
the root makefile generates `src/inet/features.h` and the sub-make does not:
461+
462+
```bash
463+
export PATH=/home/levy/workspace/omnetpp/bin:$PATH OMNETPP_ROOT=/home/levy/workspace/omnetpp
464+
export LD_LIBRARY_PATH=/home/levy/workspace/omnetpp/lib:$LD_LIBRARY_PATH
465+
make MODE=release -j32
466+
```
467+
468+
Three traps cost this session an hour. Objects go to **`src/out`**, not `out`. A `libINET.so`
469+
left in `src/` by an earlier attempt makes the whole tree look current, so `make` exits 0 having
470+
done nothing. And `git checkout` leaves the mtime of an unchanged file alone, so after moving to
471+
an older commit the files that differ must be touched before `make` will rebuild them:
472+
473+
```bash
474+
git diff --name-only HEAD <newer-ref> -- 'src/*' | xargs -r touch
475+
```
476+
477+
With that, the head builds — **1693 sources, 0 errors** — and a per-commit build works, which is
478+
what unblocked 1h3 above.
447479

448480
**Done when** every commit that moves a recorded expectation carries it with a row-level
449481
explanation, `check-commits.sh` reports no `PR-SPLIT-BASELINE` violation, and

0 commit comments

Comments
 (0)