You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit effe5de
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: docs/adr/README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,7 +7,7 @@ what it obliges later work to prove; it does not restate the implementation.
7
7
| ADR | Status | Decision |
8
8
| --- | --- | --- |
9
9
|[0001](0001-pdf-platform-boundary.md)| Accepted | SharpCorePDF is a dependency-free PDF creation, editing and reading library, targeting capability parity with PDFsharp 6.5 and PdfPig 0.1.x while keeping rendering, conversion, OCR, conformance validation, services and CLIs outside the product. |
10
-
|[0002](0002-new-code-coverage-1.1.0.md)|Proposed|`1.1.0` ships with its new-code coverage measured at 77.76% against the 90% floor, recorded rather than waived; no test is written to move the number, and a named `1.2` task closes the gap on the parsers' refusal branches. |
10
+
|[0002](0002-new-code-coverage-1.1.0.md)|Accepted|`1.1.0` ships with its new-code coverage measured at 77.76% against the 90% floor, recorded rather than waived; no test is written to move the number, and a named `1.2` task closes the gap on the parsers' refusal branches. |
11
11
12
12
New records use the next four-digit number and are added to this table in the same pull request. A
13
13
record is superseded, not rewritten: a later ADR states which decision replaces it and why.
Copy file name to clipboardExpand all lines: docs/release-checklist.md
+7-6Lines changed: 7 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -369,8 +369,8 @@ one is the stricter, and it is the one this repository's 90% floor is applied to
369
369
**The decision that figure carried is [`ADR-002`](./adr/0002-new-code-coverage-1.1.0.md)**: `1.1.0` ships with
370
370
77.76% recorded in this section, in that record and in the release notes; the floor stays at 90% and is
371
371
re-measured on 1.2's new code; no test is written whose only effect is to execute a line; and the parsers'
372
-
refusal branches become a named 1.2 task. The record is **Proposed** until the release owner signs it, and the
373
-
tag waits for that signature — an unsigned waiver is the one outcome this section is written to prevent.
372
+
refusal branches become a named 1.2 task. The record is **Accepted**: the release owner signed it on
373
+
2026-10-23, before the tag, because an unsigned waiver is the one outcome this section is written to prevent.
374
374
375
375
## The 1.1.0 run of `quickstart.md` (T104)
376
376
@@ -417,12 +417,13 @@ from the same file.
417
417
| G8 — the packages install and open a document |**After the push**| the same three checks as at 1.0.0, on `1.1.0`|
418
418
| G9 — the quality gate on the tagged commit |**Local number recorded, 77.76%; the gate passed on the release commit**| T103's measurement and [`ADR-002`](./adr/0002-new-code-coverage-1.1.0.md). SonarCloud's own `new_coverage` is 83.5% against its floor of 80, so coverage was never the failing condition; `new_reliability_rating` = 3 was, from one new bug in `PdfImageFilters`, fixed in the release commit — after which the run on `ea95c78` reported `QUALITY GATE STATUS: PASSED`. `publish.yml` still reads the gate on the commit the tag names |
419
419
420
-
Two things stand between this table and a tag, and neither of them is code:
420
+
Two things stood between this table and a tag, and neither of them was code. The first is done:
421
421
422
-
1.**ADR-002 must be signed**by the release owner. It is `Proposed`; T103's checkbox closes on the signature,
423
-
and T106 does not run without it.
422
+
1.**ADR-002 is signed**— `Accepted`, `MPCoreDeveloper`, 2026-10-23 — so T103's box closes on the measured
423
+
77.76% rather than on the threshold being met.
424
424
2.**The tag must name the commit whose SonarCloud analysis is the newest on `main`** (G9, T106), which is why
425
-
the analysis is read after the merge rather than before it.
425
+
the analysis is read after the merge rather than before it — and why the G6 dry run is dispatched on `main`
426
+
between the two, since its `sonar-gate` job refuses a commit that `main` has not analysed.
426
427
427
428
The pull request that used to be on that list exists:
Copy file name to clipboardExpand all lines: specs/003-pdf-platform-parity/tasks.md
+8-7Lines changed: 8 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -19,12 +19,12 @@ and US4 trust. Phase 6 hardens and releases.
19
19
trust (17). **Gate/foundation**: 21 tasks. **Polish**: 10 tasks. **MVP of the parity target**: T001–T038.
20
20
**What `1.1.0` needs**: T097–T106 — see the release lanes in Gate 0.
21
21
22
-
**Status (2026-10-23)**: 68 of 106 tasks done, 38 open — and **only T103 and T106 are on the 1.1.0 path**;
22
+
**Status (2026-10-23)**: 69 of 106 tasks done, 37 open — and **only T106 is on the 1.1.0 path**;
23
23
lanes A and B (T097–T100) are closed, every Gate 0 item `C1`–`C6` is closed, and lanes C and D are through
24
24
their gate: T101, T102, T104 and T105 are done and recorded, T103's build and both legs pass while its coverage
25
-
gate measured 77.76% against 90% and the decision to ship with that number recorded is written as ADR-002 and
26
-
awaits the release owner's signature, and T106 is clean — the whitespace pass and the release commit are done,
27
-
the branch is pushed as pull request #4, and only the signature and the merge stand between it and the tag.
25
+
gate measured 77.76% against 90% — recorded rather than waived, and signed in ADR-002 on 2026-10-23, so the box
26
+
is closed on the signature — and T106 is clean: the whitespace pass and the release commit are done, the branch
27
+
is pushed as pull request #4, and the merge, the G6 dry run and the tag are what remain.
28
28
**D3 is decided** (Gate 0): 1.1.0 ships what this tree already implements, so the 36 open story tasks —
29
29
US1's 13, US2's 17, US3's 4 and US4's 2 — are the 1.2 backlog and keep their unchecked boxes here.
30
30
@@ -422,15 +422,16 @@ and veraPDF reports conformance for all three profiles.
422
422
-**No network.** A code-only search of `src/` for `HttpClient`, `WebRequest`, `WebClient`, `Socket`, `TcpClient`, `UdpClient` and `Dns` returns nothing. The unfiltered search returns two hits, both of them doc comments saying the library never opens a socket (`IPdfTimestampProvider.cs:9`, `PdfSignatureOptions.cs:17`) — step 8 now carries the `Where-Object` that drops comment lines, and says why, so a green result is not an artifact of the filter being dropped by accident.
423
423
-**No new package.**`dotnet list … package --include-transitive` lists 108 package lines and none of PDFsharp, PdfPig, SkiaSharp or System.Drawing; `git diff v1.0.0 -- 'src/**/*.csproj'` adds no `PackageReference`. The four shipped assemblies still reference no runtime package at all — only the two analyzers — and `SharpCorePDF.DependencyInjection` still references the same three `Microsoft.Extensions.*` 10.0.12 assemblies `1.0` carried.
424
424
425
-
-[] T103 Run the full Release build and both test legs; require 0 warnings, 0 errors, all 1.0 tests unchanged and at least 90% coverage on new code.
425
+
-[x] T103 Run the full Release build and both test legs; require 0 warnings, 0 errors, all 1.0 tests unchanged and at least 90% coverage on new code.
426
426
-**Build and both legs: met, 2026-10-23.**`dotnet build .\SharpCorePDF.slnx -c Release -t:Rebuild` → `0 Warning(s)`, `0 Error(s)`, 11 s. `dotnet test … -p:TargetFramework=net11.0` → 743 passed, 0 failed, 0 skipped, 3.5 s; `dotnet test … -p:TargetFramework=net10.0 -r win-x64` → 743 passed, 0 failed, 0 skipped, 3.5 s. The 1.0 baseline was 561 and has grown to 743; `git diff v1.0.0 -- tests` removes no `[Fact]`/`[Theory]` (0 removed, 1 deletion in 134 files), so no 1.0 test was dropped or renamed to make the number.
427
427
-**Coverage on new code: not met.** One instrumented run, the CI command: `./.tools/dotnet-coverage collect -f coverage -o artifacts/coverage/net11.0.coverage "dotnet test … -p:TargetFramework=net11.0"`, then `merge -f xml`. Measured with the new `python docs/tools/coverage-on-new-code.py artifacts/coverage/net11.0.xml`, which takes "new code" from `git diff --unified=0 v1.0.0 -- src` and counts only the added lines the report instruments: **6,718 of 8,798 (76.36%)** against the required 90%.
428
428
- The shipped surface in the same report: Domain 997/1,255 (79.44%), Application 306/375 (81.60%), Infrastructure 8,255/9,579 (86.18%), DependencyInjection 55/63 (87.30%). The same report split at the same diff — the 162 files the diff touches hold 7,363/9,550 executable lines (77.10%), the files it does not touch hold 2,235/2,542 (87.92%) — so the miss is the 1.1 surface and not the measurement. Of the 2,080 added lines the suite never executes, 1,243 sit in twenty files, led by `PdfContentScanner` (166 of its 330 added lines; file at 49.70%), `TrueTypeFont` (94; 59.66%), `PdfTextScanner` (93; 65.04%), `SignatureValidator` (85; 62.39%) and `PdfARequirements` (84; 57.36%).
429
429
- The measurement was taken twice: the first run above, and a second instrumented run of the same tree (743/743) that reproduced 6,718 of 8,798 exactly — the number does not move between runs. `artifacts/coverage/` now holds the later runs as well: `net11.0-t103b.xml` is the intermediate 77.48%, `net11.0-final.xml` the 748-test 77.76%, and `net11.0-s2583.xml` the release figure after the quality-gate fix.
430
430
-**The decision was taken on 2026-10-23: record it, do not fake it.** Two further runs measured the same tree after the tests below, so the progression is a test count and not a definition: 6,718 of 8,798 (76.36%) at 743 tests → 6,817 (77.48%) after three inline-image tests → **6,841 of 8,798 (77.76%) at 748 tests** after two container-level signing tests, and **6,842 of 8,799 (77.76%)** once the quality-gate fix below added one covered line. Shipped surface in the final report: Domain 997/1,255 (79.44%), Application 330/373 (88.47%), Infrastructure 8,346/9,585 (87.07%), DependencyInjection 59/63 (93.65%).
431
431
- The five tests are behaviour, not line-filler: the inline-image abbreviations a producer actually writes (computed sample count, indexed colour space as an array, image mask with a decode array, an `AHx` payload whose length the header does not state, a header with a comment and a literal string) plus an image with no `EI`; and the signing pair resolved from `AddSharpCorePDF()` — sign, validate as `Valid`/`Trusted`, and the three arguments `PdfSignerService` refuses before opening the source. They took `PdfContentScanner` from 166 uncovered added lines to 74.
432
-
-`docs/adr/0002-new-code-coverage-1.1.0.md` records the decision: `1.1.0` ships with 77.76% named in the ADR, in G9 and in the release notes; the 90% floor is unchanged and is re-measured on 1.2's new code; no test is written whose only effect is to execute a line; and the eight parser/validator files that hold the rest become a 1.2 task. The ADR is **Proposed** and carries a signature table for the release owner, because an unsigned waiver is the one outcome the gate exists to prevent.
433
-
-**What is left on T103 is that signature.** With the ADR signed, the box closes on a measured, named number; without it, the box stays open and T106 does not tag. Everything else the task asks for — 0/0 build, both legs at 748, no 1.0 test removed, a number measured three times — is done and recorded above.
432
+
-`docs/adr/0002-new-code-coverage-1.1.0.md` records the decision: `1.1.0` ships with 77.76% named in the ADR, in G9 and in the release notes; the 90% floor is unchanged and is re-measured on 1.2's new code; no test is written whose only effect is to execute a line; and the eight parser/validator files that hold the rest become a 1.2 task. The ADR carries a signature table for the release owner — signed 2026-10-23 — because an unsigned waiver is the one outcome the gate exists to prevent.
433
+
-**What is left on T103 was that signature, and it is signed.** With the ADR signed, the box closes on a measured, named number; without it, the box would have stayed open and T106 would not tag. Everything else the task asks for — 0/0 build, both legs at 748, no 1.0 test removed, a number measured three times — is done and recorded above.
434
+
-**Signed 2026-10-23.**`docs/adr/0002-new-code-coverage-1.1.0.md` reads `Accepted`, its approval table reads `MPCoreDeveloper` / `2026-10-23`, and `docs/adr/README.md` agrees. The box above closes on the signature, not on the threshold: 77.76% is still what `1.1.0` ships with, and the 90% floor still applies to 1.2's new code.
434
435
-[x] T104 Run every `quickstart.md` phase command on the release commit and record the commands, versions and outputs in the pull request.
435
436
- The gate's own transcript is not a phase command: run
0 commit comments