Skip to content

OKF bundle compaction: 359KB -> 191KB, log-only rules lifted into concepts - #504

Merged
pftg merged 1 commit into
masterfrom
okf-compaction
Aug 20, 2026
Merged

pftg merged 1 commit into
masterfrom
okf-compaction

Conversation

@pftg

@pftg pftg commented Aug 20, 2026

Copy link
Copy Markdown
Member

Re-reviewed every file in .okf/ for size. Half the bundle carried no knowledge the repo didn't already own.

What shrank

Before After
Bundle total 359 KB 191 KB (-47%)
log.md 134 KB / 99 entries 30 KB (12 verbatim + 87 squashed)
icp-journey-sipoc.md + operational-dependency-map.md 73 KB of verbatim copies 3 KB of pointers
/okf:validate --strict warnings 126 46

The three squashes

  1. log.md was 37% of the bundle - larger than every concept combined - and was NOT newest-first as OKF §7 requires (two interleaved append orders). Entries dated >= 2026-08-19 kept verbatim; the 87 older ones squashed to one line each from their own ## headings. Full text stays in git history.
  2. Two concepts were verbatim copies of docs/projects/2605-*/30-39-architecture-design/30.05 and 30.06. Their own index entry already declared the canonical version authoritative - a snapshot that is by definition not authoritative is drift waiting to happen. Both are now pointer concepts holding the durable rule plus the canonical path. The dependency map's original-inputs principle (idea + Gmail + browser, nothing else assumed) is stated inline because lesson edits are checked against it.
  3. workflows/testing.md deleted, squashed into build/test-gates.md. It duplicated the visual-regression gate and still carried the superseded "run BOTH bin/test and bin/dtest before committing" rule - qtest has been the routine gate since 2026-07-31. Its two unique items moved across (rake task table, accept-tolerance policy).

The 4-eyes review is why this is safe

A core-reviewer pass BLOCKED the first attempt: four durable rules lived ONLY in log entries and a mechanical squash would have deleted live policy silently. All lifted before this landed:

  • Business-layer decision rules (2026-08-09, 2026-08-08) -> workflows/company-layer-ownership.md, including "this repo is public - revenue, rates, headcount and client-book size never go in docs/, .okf/, commit messages or PR descriptions".
  • 2 columns maximum in blog tables (2026-08-08, with the 354px/377px measurement and the "trimming prose made it 1px worse" trap) -> content/voice-rules.md.
  • Research-vs-adopted-spec doc placement (2026-07-26) -> index.md.

Re-review verdict: CLEAR. Three smaller tells also recovered into ci-gates / test-gates (per-STEP list_workflow_jobs timing, container self-bootstrap, the multi-file ruby a_test.rb b_test.rb guard).

Standing rule added

index.md now states what belongs in the bundle: it stores knowledge, not history or copies. A concept that is a verbatim copy of a repo doc should be a pointer; if a log entry's detail still matters six weeks later, lift it into a concept - the log gets squashed.

Gates

  • /okf:validate .okf --strict -> conformant, warnings 126 -> 46
  • bin/hugo-build -> green (exit 0)
  • Bundle-only change; nothing rendered is touched, so the visual suites don't apply.

🤖 Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Aug 20, 2026 •

Copy link
Copy Markdown
Contributor

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 27d984fe-df06-4882-9f21-e82cdab26910


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

…epts

Re-reviewed every file in .okf/. Half the bundle carried no knowledge the
repo didn't already own.

* log.md 134KB -> 30KB. It was 37% of the bundle - larger than every concept
  combined - and NOT newest-first as OKF §7 requires (two interleaved append
  orders). Entries dated >= 2026-08-19 kept verbatim; the 87 older ones
  squashed to one line each from their own `##` headings. Full text stays in
  git history.
* icp-journey-sipoc.md + operational-dependency-map.md: 73KB of verbatim
  copies of docs/projects/2605-*/30-39-architecture-design/30.05 and 30.06 ->
  ~1.5KB pointer concepts. Their own index entry already declared the
  canonical version authoritative; a snapshot that is by definition not
  authoritative is drift waiting to happen. The dependency map's
  original-inputs principle (idea + Gmail + browser, nothing else assumed) is
  stated inline because lesson edits are checked against it.
* workflows/testing.md deleted, squashed into build/test-gates.md. It
  duplicated the visual-regression gate and still carried the superseded "run
  BOTH bin/test and bin/dtest before committing" rule. Its two unique items
  moved across: the rake task table and the accept-tolerance policy.

4-eyes (core-reviewer) BLOCKED the first pass: four durable rules lived ONLY
in log entries and would have been deleted silently. All lifted before this
landed:

* Business-layer decision rules (2026-08-09, 2026-08-08) ->
  workflows/company-layer-ownership.md, including "this repo is public -
  revenue, rates, headcount and client-book size never go in docs/, .okf/,
  commit messages or PR descriptions".
* 2-column maximum in blog tables (2026-08-08) -> content/voice-rules.md.
* Research-vs-adopted-spec doc placement (2026-07-26) -> index.md.

Re-review verdict: CLEAR. Also recovered three smaller tells into ci-gates /
test-gates (per-STEP list_workflow_jobs timing, container self-bootstrap,
the multi-file `ruby a_test.rb b_test.rb` guard).

Standing rule added to index.md: the bundle stores knowledge, not history or
copies. If a log entry's detail still matters six weeks later, lift it into a
concept - the log gets squashed.

Gates: /okf:validate --strict conformant (warnings 126 -> 46);
bin/hugo-build green. Bundle-only change, no rendered output touched.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@pftg
pftg merged commit ddfede0 into master Aug 20, 2026
2 of 3 checks passed
@pftg
pftg deleted the okf-compaction branch August 20, 2026 19:15
pftg added a commit that referenced this pull request Aug 20, 2026
Checked today's knowledge against the bundle compaction (359KB -> 191KB)
before adding: token layer, img-cropped mobileWidth params, blog-list traps,
record-baselines and the GA browser-channel distinction all survived in
CONCEPTS rather than only the log - the outcome the compaction wanted.

One gap remained, in the section a cold session reads first for visual
questions: design/ had no site-palette concept at all. house-visual-spec is
in-post SVG artwork, cover-pipeline is covers, so 'what palette does the site
use?' resolved to nothing there while the LIGHT decision sat in
docs/adr/0003 and architecture/css-pipeline.

design/site-palette.md carries the decision, the audience-shaped reasoning
that predicts future calls (dark = products bought by developers; light =
services bought on trust), the token table, and the three surfaces where dark
stays DELIBERATE - so nobody later 'fixes' the blog covers or the
vibe-code-rescue campaign page into light.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
pftg added a commit that referenced this pull request Aug 20, 2026
…re upstream) (#507)

* OKF: add the site-palette concept; verify #504 compaction was non-lossy

Checked today's knowledge against the bundle compaction (359KB -> 191KB)
before adding: token layer, img-cropped mobileWidth params, blog-list traps,
record-baselines and the GA browser-channel distinction all survived in
CONCEPTS rather than only the log - the outcome the compaction wanted.

One gap remained, in the section a cold session reads first for visual
questions: design/ had no site-palette concept at all. house-visual-spec is
in-post SVG artwork, cover-pipeline is covers, so 'what palette does the site
use?' resolved to nothing there while the LIGHT decision sat in
docs/adr/0003 and architecture/css-pipeline.

design/site-palette.md carries the decision, the audience-shaped reasoning
that predicts future calls (dark = products bought by developers; light =
services bought on trust), the token table, and the three surfaces where dark
stays DELIBERATE - so nobody later 'fixes' the blog covers or the
vibe-code-rescue campaign page into light.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* OKF: CI checkout stalls vs runs slow - re-run, don't raise the cap

Three failures in one session (Unit Tests 10m x2, build 15m1s), all inside
'Fetching the repository' and ending 'The operation was canceled', all
cleared by a plain re-run completing the same job in 2-3 min. ci-gates
documented checkout being slow and the 15/25 timeout raise that followed;
it lacked the distinction that decides the response - a cap cannot rescue a
step that never progresses. Adds the rule plus the log check that
distinguishes a stall from a genuine failure, so nobody re-runs red that
deserved to stay red.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* CI hotfix: blobless clone for the full-history job; root-cause the checkout stalls

Paul's hunch was right that the action was at fault, though not our version:
actions/checkout#2441 - open since 2026-05-19, silent stalls of 15-25 min on
EU runners killed by timeout-minutes. That is exactly our signature (three
in one session: Unit Tests 10m x2, build 15m1s, all inside 'Fetching the
repository', all cleared by a plain re-run in 2-3 min). Upstream and
unfixable by us.

What IS ours is how much we ask for. The pack is 1.70 GiB and content/ alone
is 625 MB across 1,576 images. _hugo.yml must keep fetch-depth: 0 because
enableGitInfo feeds .Lastmod into article:modified_time and schema
dateModified - so it now also sets filter: blob:none, which keeps commits and
trees in full and skips HISTORICAL blobs.

Verified rather than assumed, since the whole point is that GitInfo must keep
working:
- bare blobless clone: 4.7 MB in 1.1s, against a 1.70 GiB pack (370x)
- git log -1 -- content/blog/<post>/index.md still returns the correct commit
  date in 0.02s, with the clone still at 4.7 MB - zero blobs fetched

Also corrects the OKF entry written earlier today, which said 'it's a hang,
re-run it' without knowing why. ci-gates now carries the upstream cause, the
confirm-before-re-running log check, and the honest limit: this is a
mitigation, not a cure, and the real floor is 625 MB of images in git - an
LFS/CDN decision, not a checkout flag.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
pftg added a commit that referenced this pull request Aug 20, 2026
#505)

* Correct ADR-0003: #1a8cff is the logo colour; logos out of scope

Lane A halted its codemod rather than recolour brand assets and the reason
corrects the ADR. After deleting --color-primary the only #1a8cff left in
built output was SVG assets - logo-dark.svg contains exactly one hex value,
no brand definition' was overstated: true of the documented design system,
false of the actual logo.

The decision survives with a better reason - a mark colour is not a UI
accent. The logo identifies, the accent directs; promoting the mark's blue to
'primary' is what put blue bands, blue tags and blue links on a ruby site.
The three logo files stay blue and are OUT OF SCOPE for every design-system
phase, not deferred.

Also records the trap that produced the finding: SVG assets cannot read CSS
custom properties, so ~29 hardcoded icons are invisible to token work and a
recolour must sweep them separately. 20.02 counted CSS references and
literals but never SVG assets - a gap in my plan, not in the execution.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Correct Phase 1a: the !important count, the a11y history, and the link role

Three corrections, all surfaced by the agent executing the plan rather than by
me writing it.

1. The success signal 'delete all 55 !important workarounds' was wrong and
   dangerous. 55 counted every !important in four files; only ~19 are
   anchor-attributable - the rest are @media print rules and legacy
   heading-margin fights, so chasing the number would have deleted print
   styles to hit it. Replaced with the falsifiable version: every !important
   whose comment cites the anchor rule must go, and no other may be touched.
   The trap generalises - blog-single.css's comment says 'same class of fight
   ... both die in Phase 1a'. Same class, different cause.

2. #0066d6 is also an accessibility fix, not only a specificity monster: it
   replaced #1a8cff in Sprint #2 because the brand blue measured 3.37:1 and
   failed AA. Retiring it means landing the replacement at AA or better, not
   merely 'not blue'.

3. Body links decided - --ink-900 text with a --color-ruby underline. Not ruby
   text: ruby is the action colour and a body full of ruby links stops links
   being distinguishable from buttons. WCAG 1.4.1 requires more than colour to
   mark a link, so the underline carries the affordance and the text stays
   calm for long-form reading. Recorded with a do-not-simplify note.

Also adds the SVG-asset row the original measured-surface table omitted (50
files: 47 icons swept, 3 logos deliberately untouched).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* OKF: the white-wash trap, and why 4 of 6 review agents died

Two durable findings from the 3-lane redesign swarm.

architecture/css-pipeline.md - computed style, not source, proves the paint.
Two sections of the new /friday-report/ page computed to
background-color rgba(0,0,0,0): the white behind them was
legacy-theme-skin.css's hardcoded .fl-page-content, which ships after the
page slice and wins on cascade order. Zero visual delta today because both
are #ffffff - which is exactly why it would have sat undetected - and it
detonates the moment a --surface token moves off white, leaving a
half-recoloured page caused by a file nobody touched. Records the detection
method and the id+class fix from new-page.md. Same family as the uppercase
#1A8CFF that survived a case-sensitive sweep.

workflows/review-swarm.md - review agents failed 4 of 6, all on a Fable
credit limit, because work agents carried an explicit opus override while the
reviewers they spawned inherited the default. The asymmetry is the hazard:
work completes and reports success while its gate quietly does not run.
Brief size looks causal rather than incidental - the three that died had long
briefs, the one that returned a verdict had the tightest, and a
consumption-based limit means the sprawling thorough-looking brief is LESS
likely to produce a review. Rules: dead reviewer is not a passed review; idle
is ambiguous so ask for the verdict; pass model opus explicitly; a
coordinator closing a leg itself must say so and invite contradiction.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* Sync 2608 to reality: GA4 key-event toggles are closed

#508 un-marked page_view and #495 marked contact_cta_click, closing the
Phase 0.1 GA4 items this plan still described as outstanding and which I had
been reporting to Paul as blocked.

Carries the caveat that outlives the fix: un-marking is NOT retroactive, so
the ~4,063 historical page-view 'key events' remain in the data and any
before/after read spanning 2026-08-13 to 08-20 compares a polluted before
against a clean after. Date-bound keyEvents queries or read the underlying
event names.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant