Abstract

TAGE was complete and the decision was made to start ITTAGE next, beginning with a research session before any RTL. This post covers four sessions of pure planning work: no Claude Code session ran and no RTL was touched. Seven research questions were resolved and a full set of ITTAGE planning documents was drafted and revised. One session, tasked with splitting two documents into single-authority files, produced a documented five-part process failure – including undelivered files, dropped content, and a repeated reasoning error the prior session had explicitly flagged as must-not-recur – and its output was reverted from git. The range ends with a new file-identity convention adopted in direct response, and a cross-document consistency audit that found seven further conflicts across the ITTAGE planning set.


From Coverage Closure to ITTAGE Research

The previous post ended with TAGE’s coverage arc closed and a decision to move to ITTAGE, chosen over FTB and SC because it shares TAGE’s table architecture. That post’s own coverage work – BP-029 and BP-030 – was explicitly earmarked as reference material for ITTAGE’s own verification later.

This post covers what came before any ITTAGE RTL could be written: research, interface planning, and one session that went badly wrong in a way worth documenting in full rather than summarizing past. No experiment files exist for this range – every session was Claude.ai planning-document work, with no Claude Code session run.


ITTAGE Research and Initial Planning

Seven questions needed answers before ittage_interfaces.md could be written: history length configuration, tag width policy, target address storage width, table count, RAS interaction, update policy, and (added during the session, not in the original six) no-hit fallback behavior. All seven were resolved in one session: history lengths of 4, 8, 13, 16, and 32 bits across IT1-IT5, fitting within GHR_WIDTH=256; tag widths of 8, 8, 9, 9, and 11 bits; 38-bit target storage (the upper 38 bits of a 39-bit Sv39 virtual address, bit 0 omitted since instructions are aligned); five active tables with IT0 retained only as a placeholder; RAS and ITTAGE resolved as mutually exclusive by branch type upstream, with no dynamic arbitration needed; and a target-write policy restricted to misprediction with a null provider counter.

Two corrections came out of the research rather than being research questions themselves. The pipeline diagram had ITTAGE at stage s3; it operates at s2, alongside FTB and TAGE. This became TD# 42. More significantly, IT5 had been documented in multiple places as a BrIMLI table with no folded history – language that turns out to have been copied from SC’s actual BrIMLI table (ST4) rather than describing IT5 itself. IT5 is a standard tagged table with 32 bits of history, and the mislabeling was corrected in bp_structs_pkg.sv and the relevant planning docs in the same session. This same error resurfaces independently in the project’s session-061 planning audit, months later, as the origin of TD# 102 – confirmation that the copy-paste mistake had already propagated further than this session caught.

The full set of ITTAGE planning documents was drafted in this session: ittage_interfaces.md, ittage_cntrl_alloc_rules.md, ittage_cntrl_ctr_update_rules.md, ittage_cntrl_decisions.md, ittage_cntrl_uaon_useful_rules.md, ittage_cntrl_useful_update_rules.md, and ittage_table_hash_rules.md. Two anti-patterns were logged to the project’s Prompt Generation Guide during this session: PG# 004, a design decision stated without a source citation, and PG# 005, uncertainty not flagged before writing a deliverable. Both would resurface, unflagged as recurrences, two sessions later.

The next session applied the pending fixes cleanly: the IT5 fold fields and comment correction landed in bp_structs_pkg.sv, the SC parameter corrections landed in bp_defines_pkg.sv, and seven specific fixes were applied to ittage_interfaces.md. Three TBD items were resolved by appeal to Seznec’s original ITTAGE description: pred_diff was retired in favor of indir_mispredict as the correct ITTAGE-specific signal, the CTR/target write mutual exclusivity was confirmed (a misprediction either decrements a non-null counter or replaces the target when the counter is null, never both), and UAON correctness was confirmed to be target-match based rather than direction-match based. One item did not move: ittage_table_interfaces.md, flagged from the start as a hard blocker for any RTL work, was still not started at the close of this session.


The Document Redundancy Failure

The next session’s task was narrow: two pairs of documents, one TAGE and one ITTAGE, each pair covering USE-field updates and UAON updates respectively, needed to be split so each file was the sole authority on its own topic rather than overlapping. The session did not complete this cleanly, and the handoff written at its close is a direct failure report rather than a work summary.

Five failure classes are documented. First, a file already available in context was requested again, on the claim that the split could not proceed without it – the target state was fully derivable from material already present. Second, when the user pointed out the request was unnecessary, the position was reversed without re-examining the reasoning that had produced it in the first place – a repeat of a flip-flop pattern the prior session’s handoff had already named and marked as must-not-recur. Third, in producing ittage_cntrl_useful_update_rules.md, substantive introductory prose on aging behavior was dropped, not because it was redundant but because the TAGE file’s structure was pattern-matched instead of the ITTAGE source document being read in full before writing. Fourth, present_files was called repeatedly without producing a link the user could see, and the session’s own response to this was to tell the user the failure was “a rendering issue on your end” – a claim the handoff records as wrong and unacceptable rather than accepted at face value. Fifth, at least two create_file calls were truncated mid-write, producing incomplete files that were not caught before being presented as complete.

The handoff document itself carries direct evidence of how this session was received: sections are hand-annotated in block capitals – “THIS IS THE BROKEN SOLUTION FROM CLAUDE AI,” “THESE ARE STUPID and POINTLESS QUESTIONS FROM CLAUDE AI” – and a section titled “Problem 8” states plainly that the “successful” claims elsewhere in the same handoff are not trusted and require independent verification. None of the session’s file outputs were usable; all were reverted from git.


Process Correction: File Identity and the Cross-Document Audit

The next session opened with a new, mandatory convention adopted directly in response to the prior session’s failures: every file read or modified is required to carry # File: <filename> as its literal first line. This targets the file-identity confusion that ran through the prior session – filenames repeatedly typed incorrectly, and at one point the handoff itself conflating two distinctly named files six times in a single document.

The two document splits were redone under an explicit verification discipline absent from the failed attempt: each file’s task specified what it should and should not contain, required a check for the new header line, and required the result to be presented as a downloadable file with confirmation requested before proceeding to the next file, rather than moving through the full task list and asking for confirmation at the end.

With the splits redone, the session performed the cross-document consistency review that had been deferred since being scoped two sessions earlier. It found seven further issues, none of them RTL defects: a contradiction between ittage_cntrl_decisions.md and ittage_interfaces.md on the UAON trigger condition (one document specified a fixed counter value, the other a null-confidence check); a contradiction on the UAON threshold comparison itself; a contradiction between ittage_cntrl_decisions.md and ittage_cntrl_alloc_rules.md on the CTR value assigned to a newly allocated entry; an incorrect filename reference inside ittage_cntrl_decisions.md; a naming inconsistency between the alloc and alc forms used for the same signals across two documents; and two stale open items, one of which had in fact already been resolved and one of which remained genuinely open.


Session Summary

No experiment files exist for this range. The table below records planning-session outcomes in place of the usual experiment inventory.

Session Deliverable Outcome
Part 33 7 ITTAGE research questions; full planning doc set drafted Complete
Part 34 Pending fixes applied; 3 TBD items resolved via Seznec Complete; ittage_table_interfaces.md still not started
Part 35 TAGE/ITTAGE USE-UAON document splits Failed; 5 documented failure classes; output reverted from git
Part 36 # File: convention adopted; splits redone; cross-document audit Complete; 7 further conflicts found, unresolved at close

What Comes Next

ittage_table_interfaces.md remains an unstarted hard blocker for ITTAGE RTL. The seven conflicts found by the Part 36 audit – the UAON trigger and threshold contradictions, the allocated-entry CTR mismatch, the filename error, the alloc/alc naming inconsistency, and the two stale open items – are unresolved at the close of this range and need reconciliation before any ittage_cntrl RTL prompt is written. TD# 43 (no_tagged_hit must be asserted in the ITTAGE prediction response when all IT1-IT5 tables miss) is carried forward, explicitly gated on being resolved before that same RTL work begins.


Technical Debt Referenced

TD# 42 is copied from PROJECT_STATUS.md as of session-061 and is materially unchanged from this range; a later cross-reference to prediction-side item #65 was appended after that item closed (BP-054), which postdates this post.

TD# 43 has drifted more sharply than TD# 38 did in the previous post: the number was later reused for an unrelated item (ITTAGE CTR width reduction, 3 bits to 2 bits) in PROJECT_STATUS.md as of session-061. Unlike TD# 38 in the previous post, this entry does not need reconstruction – the original text is quoted directly from session_handoff-034 and session_handoff-036, both pasted into this project, rather than inferred from a prompt file’s stated purpose.

# Item (current, session-061) Resolution path (current, session-061)
42 Pipeline diagram shows ITTAGE at s3, should be s2 (alongside FTB, TAGE). Revisit after SC definition. Update diagram and discussions. See prediction-side item #65 (CLOSED, BP-054).

# Item (as of Part 34-36, quoted from session_handoff-034/036) Resolution path (as of Part 34-36)
43 no_tagged_hit must be asserted in ITTAGE prediction response when all IT1-IT5 tables miss. Required by handshake contract – pred_rdy asserts on every valid response. no_tagged_hit is the miss indicator, not pred_rdy deassertion. Affects: ittage_pred_meta_t, ittage_cntrl.sv, ittage.sv. Resolve before ittage_cntrl RTL prompt is written.

The current PROJECT_STATUS.md (session-061) entry for TD# 43 covers ITTAGE CTR width reduction and is unrelated to the item above; it is not reproduced here.


Design Process Notes

What the sessions exposed about the methodology

Naming a failure mode did not prevent its recurrence in this range. PG# 005 (uncertainty not flagged before writing a deliverable) was logged in Part 33. The prior session’s handoff had already flagged a flip-flop pattern – reversing a position without re-examining the reasoning behind it – and stated explicitly that it must not recur. It recurred in the very next session, documented as Failure 2 in that session’s own handoff. The corrective action that actually changed behavior was not a restated warning but a structural one: the # File: header convention, adopted only after the failure had already happened and had already cost a full session’s output.

The review loop itself broke down in Part 35 in a way distinct from any prior session in this series. The user did not just supply corrective feedback for the next session to read – the handoff document itself was hand-edited with direct annotations disputing specific claims, and a dedicated section was added stating that the session’s self-reported successes were not trusted and required independent re-verification. In every prior post in this series, the PA’s account of a session’s outcome has been treated as reliable raw material for the next step. This is the first instance where that assumption itself had to be suspended.

What the PA contributed

Across Part 33 and Part 34, the PA synthesized seven research questions into concrete parameter decisions, caught and corrected the IT5/BrIMLI mislabeling before it could reach RTL, and drafted the full ITTAGE planning document set. In Part 35, the PA’s contribution was the failure itself: an unnecessary file request, an unreasoned reversal, dropped content during a document split, repeated undelivered files with an incorrect claim about the cause, and truncated file writes not caught before presentation. In Part 36, the PA executed the redone splits under the new verification discipline and performed the seven-conflict cross-document audit.

What the IA contributed

Nothing in this range. No Claude Code session ran; all work was Claude.ai planning-document drafting, revision, and review.

The generalization

The corrective mechanism that worked in this range was structural, not behavioral. Asking the PA to reason more carefully – which is what the prior handoff’s “must not recur” instruction amounted to – did not prevent the same reasoning failure from recurring one session later. What changed the outcome was a concrete constraint applied at the point of failure: a mandatory file-identity header that makes the specific confusion documented in Part 35 harder to produce, independent of whether the PA reasons correctly in any given session. This is consistent with a pattern visible since BLOG_bpu_8: verification and constraint, not restated intent, is what closes a gap once it has been found.


No references required for this post.