MH / CL Decisions
Judgements that change what a report MEANS — answered here, rendered on
the report tab. Each row's evidence is measured right now, not
transcribed.
grade-ladder-compression
MH
Grade scale
OPEN
The letter ladder assumes a score that reaches 1 and 5. The blended score does not. Widen the ladder, or change how the blend works?
Why it matters
Individual KPIs discriminate hard and are close to bimodal, but averaging all of them pulls every deal toward the middle. The ladder (A<1.75 B<2.5 C<3.25 D<4.0) was set for the full 1-5 scale, so A and F are close to unreachable however the book performs.
What the book says now
composite spans 0.00-0.00 (0% of the 4.00 the scale allows), median 0.00. KPI readings: 0% at band 1, 0% at band 5. Grades today: A:0 B:0 C:0 D:0 F:0
The options
(a) widen the ladder - simplest, and it is a decision about what each letter MEANS | (b) change the blend so a component's worst KPIs pull harder than a flat average - keeps the letters, changes the machinery | (c) leave it, and read the weighted score rather than the letter
This ladder was re-cut to fit the book once (2.5/3.0/3.6/4.1) and deliberately put back. Fitting a standard to the distribution changes what a B means without anyone agreeing to it, and makes the app disagree with the Grade Scale sheet that was signed off.
manager-band-hand-entry
MH
Manager
OPEN
Is anyone going to hand-score managers? If not, the weights on the hand-entered KPIs should go to zero.
Why it matters
M-4 Responsiveness and M-5 Transparency are judgements with no pipeline that could ever answer them; /report-card/manager was built for exactly this and holds no entries. Their weight is not idle - it is redistributed onto the two KPIs that do answer, so the Manager score is really a reporting-punctuality score wearing a broader name.
What the book says now
Manager band: 0% of its weight is live. M-1 and M-2 band all 0 deals; M-3 M-4 M-5 M-6 M-7 band none. Hand entries recorded: 44
The options
(a) somebody scores managers, quarterly - the single biggest coverage win available | (b) zero M-4/M-5/M-7 so the printed rubric matches the computed one | (c) leave the weights and accept that Manager means punctuality
M-1 does the discriminating - n/a of deals sit at its WORST band. M-2 is lag-fair by design and cannot see a manager who has gone dark, which is why the two are complementary rather than redundant.
dead-weight-redistribution
MH
Rubric
OPEN
Weight pointed at a feed that does not exist is silently redistributed onto the KPIs that do answer. Accept that, or zero those weights until the feed lands?
Why it matters
The rubric that is PRINTED and the rubric that COMPUTES are different documents today. A KPI with a weight and no data does not lower a grade - it hands its share to whatever was measured, so a deal is graded on a narrower rubric than the one on the page.
What the book says now
100% of the overall grade is weight that bands no deal at all. By component: Performance 100% dead | Returns & Cash Flow 100% dead | Debt 100% dead | Value 100% dead | Manager 100% dead
The options
(a) accept - the renormalisation is the honest treatment of missing data, and coverage already reports it | (b) zero them until fed, so the printed weights are the real ones | (c) show both, a "graded on" column beside the coverage figure
portfolio-reporting-entity-grading
MH
Scope
OPEN
How should a deal that is part of a portfolio, or that reports through a Reporting Entity, be graded?
Why it matters
A portfolio member is graded as its own deal today, on its own statements. That is right for an operating comparison and arguably wrong for a capital one: the money was committed to the portfolio, the debt is often cross-collateralised, and a Reporting Entity row is a Col-K bucket rather than a property at all - it has no operations to grade. Grading each member separately can show four D grades where one asset is dragging three healthy ones, or hide that in an average.
What the book says now
0 Active rows carry member_class "Reporting Entity" across 0 deals; 2 deals are named as part of a portfolio or family. Largest families: (none)
The options
(a) grade members only, as today - the operating view | (b) grade the portfolio as one, weighted by capital | (c) grade both and show the member grade inside a portfolio row | (d) grade members but flag the family so a reader knows the debt and the commitment are shared
A Reporting Entity is a Col-K bucket, not a company - the entity-type inferrer deliberately refuses to type it rather than fabricate a legal form. Whatever is decided here should keep that distinction.
pref-accrual-base
MH
Returns & Cash Flow
OPEN
Unpaid preferred return accrues on WHAT - our invested capital, or the partnership equity the OA names?
Why it matters
CF-6 is built and live on invested capital, which is our money and is the CF-1 denominator, so the two cash-flow KPIs stay comparable. The DIT also carries `initial_equity` (pref + common equity in the property) off the same REO tab, and the two do not agree - the SAME KPI reads "nothing outstanding" or "a full year of pref owed" for most of the book depending on which is used. `initial_pref_equity`, the textbook base, survived on almost none of the REO tab and cannot carry it - see the measurement.
What the book says now
CF-6 bands 0 of 0 deals on invested capital. Measured both ways across the graded book: invested capital puts 64 at band 1 and 16 at band 4; initial_equity puts 15 at band 1 and 62 at band 4. `initial_pref_equity` is populated on 15 of 15 properties.
The options
(a) invested capital - what is built | (b) DIT initial_equity, the partnership obligation rather than ours | (c) fill in Initial Pref Equity on the REO tab and use the real base
The terms come off the REO tab through reo_importer -> properties -> dit_autofill -> the DIT. Every value is status=auto, which the Report Card otherwise refuses to grade on; the rule is bent here because these are a transcription of terms CL wrote down, not a machine guess.
pref-what-counts-as-paid
MH
Returns & Cash Flow
OPEN
Does a capital event pay down accrued preferred return, or only operating distributions?
Why it matters
Distributions are not tagged pref vs return-of-capital, so something has to stand in. CF-6 counts OPERATING distributions only, which never understates the obligation. Most waterfalls do let a refinance or a sale clear accrued pref, so that is conservative rather than neutral.
What the book says now
operating only: {}. Adding capital returns: {1: 41, 2: 4, 3: 1, 4: 5, 5: 31} - it moves 17 deals from the worst band to the best
The options
(a) operating only - what is built, and never understates | (b) operating + capital returns | (c) tag distributions properly and stop assuming
pref-terms-against-the-oa
CL
Returns & Cash Flow
OPEN
Should the recorded preferred return be checked against the Operating Agreement on file?
Why it matters
The rates come off the REO tab, not out of the documents. Where an OA is on file the recorded term is checkable; where it is not, CF-6 is grading on a number with no document behind it. And there are deals where we hold the OA and never read the term out of it.
What the book says now
CF-6 bands 0 of 0 deals. Cross-checked against the Documents app on 28 Aug 2026: of the 82 carrying a recorded pref, 36 had an OA or LPA on file and 46 did not; a further 19 deals held an OA and had no recorded pref at all.
The options
(a) read the OA where one is on file and confirm or correct the rate - costs a model call per document | (b) leave the REO tab as the source of truth | (c) fill the gaps by hand from the OAs we hold
Those overlap figures are a point-in-time reading rather than a live measurement - fo-platform cannot query the Documents app database and a per-deal call for the whole book inside a render is not viable. A bulk endpoint would make them live.
strategy-lifecycle-thresholds
MH
Identity
OPEN
Where do the Strategy and Lifecycle bands cut - what budgeted capex makes a deal value-add rather than core, and how much of it spent makes it stabilised?
Why it matters
CL asked for a first pass derived rather than typed: Strategy from BUDGETED CAPEX on the REO tab, Lifecycle from how much of it has been SPENT to date. The method is sound and the cut points are a judgement - the same kind as a KPI cut-point, and the same reason they are not decided in a resolver. A deal labelled core rather than value-add is being described differently to anyone reading the grade.
What the book says now
Budgeted capex over purchase price across the 15 properties that carry both: median n/a, p25 n/a, p75 n/a, p90 n/a, max n/a. Under the proposed cuts that splits 7 core / 8 value-add / 0 opportunistic. COVERAGE IS THE REAL CONSTRAINT: only 15 of 15 properties have a budgeted capex at all, 15 have an actual, and 6 carry units_to_renovate - so a derived Strategy can only speak for a fraction of the book however the bands are cut.
The options
PROPOSED, fitted to the book rather than to convention - Strategy: core under 5% of purchase price, value-add 5-20%, opportunistic above 20% | Lifecycle: executing under 25% of budget spent, in progress 25-90%, stabilised above | (b) different bands | (c) do not derive it - leave the columns TBD until the DIT carries a stated answer
Lifecycle is thinner still: of the properties with a budget, the median share SPENT is 0.00 and only 9 are at or over budget - so most would land in the first band by absence of data rather than by being early in their plan. That is the distinction a derived Lifecycle cannot make on its own.
coverage-floor
MH
Grade scale
DECIDED
Is 50% the right coverage floor for issuing a grade?
Toviya Slager · Jul 31, 2026
Why it matters
Below the floor no letter is issued and the deal reads "unrated". Set too high it hides deals that are genuinely gradeable; too low it publishes a letter drawn from half a scorecard.
What the book says now
0 of 0 deals are below the floor and read unrated. Average coverage across the book is 0%
The options
(a) leave at 50% | (b) raise it, fewer but firmer grades | (c) lower it, and lean on the coverage column to qualify what the letter is worth
m3-financial-accuracy
CL
Manager
OPEN
M-3 Financial accuracy is held. What identifies a restatement?
Why it matters
Held at CL's instruction: "financial accuracy should perhaps be based on later restatements but i dont have a good way of identifying these right now". It carries a full ladder and no weight until there is a rule for spotting one.
What the book says now
M-3 bands 0 of 0 deals today
The options
(a) a later statement that changes a period already filed - mechanical, and the tie-out engine could answer it | (b) keep it held | (c) drop the KPI and redistribute its weight explicitly
m3-ladder-units
MH
Manager
OPEN
M-3's ladder is cut in numbers that cannot be a count of restatements. What is it measuring — a count, a rate, or a comparison against the book?
Why it matters
Two of the four cut-points are NEGATIVE and the direction is "lower is better". A deal cannot restate fewer than nought times, so on a raw count the top two bands are unreachable and every deal that ever files lands in C or worse — the ladder would grade the measure, not the manager. Negative cut-points spaced like these read as a z-score or a variance against the book average, which is a different question from the one the KPI name asks. This is the same trap M-1 was caught in, where the ladder was in DAYS while the measure had become months; the code refuses to emit M-1 until the two agree (`_m1_ladder_is_months`) precisely because a mismatched ladder does not raise, it just bands confidently and wrongly. Worth settling BEFORE M-3 is wired, because once it emits a value the ladder stops being obviously wrong and starts being quietly wrong.
What the book says now
M-3 ladder as it stands: [-0.653333, -0.453333, 0.546667, 2.546667], direction "lower" — 2 of its 4 cut-points are below zero, so on any non-negative count that many bands are unreachable and the best grade available is C. It bands 0 of 0 deals. WHAT IT WOULD BE CUT AGAINST, on the mechanical rule: of 86 period cells 1 were refiled but only 0 changed NOI — the other 1 were resubmissions of the same figures, so counting refilings would overstate this 0.0x. Per deal (restatements:deals) 0:11; 11 of 11 deals that file have never restated. As a COUNT that puts 100% of them in the best band. As a RATE it reads differently: the deal with the most restatements (0) sits at 0% of its own filed periods, and 0 deals are worse on that measure than it is.
The options
(a) a plain count of restatements per year, re-cut 0/1/2/3 - reachable, and reads the way the KPI name does | (b) a RATE - restatements over statements filed - which needs cut-points between 0 and 1 and is fairer to a manager who files monthly | (c) keep the ladder as a comparison against the book average and rename the KPI to say so | (d) leave it held, and decide the ladder when the restatement rule lands
Pairs with m3-financial-accuracy, which asks WHAT a restatement is. That one is CL's; this one is the ladder, and the two have to agree before the KPI can carry weight.
manager-transcribed-feeds
CL
Feeds
OPEN
M-6 and M-7 are hand entry ON LOAN until a feed can read them. Neither feed exists. Source them, backfill them, or stop calling them temporary?
Why it matters
MANAGER_ENTRY_KIND marks M-4 and M-5 as judgements — hand entry is their permanent home — and M-6 and M-7 as TRANSCRIBED, meaning the manager already publishes the number and we simply cannot read it yet. That distinction only means something if the reading eventually happens, and today neither can: the rent roll holds a move-out date on a small fraction of its units and no row pairs a move-out with the following move-in, because a rent-roll row describes the CURRENT tenant. So approving the queued rent rolls (see rent-roll-queue) will not answer M-6 either. There is no maintenance or work-order table at all for M-7. Meanwhile nothing has been hand-entered for either, so the "on loan" label is carrying weight it has never earned.
What the book says now
Rent roll: 1012 units over 7 deals, 0 carry a move-out date, 0 usable move-out/move-in turn pairs. Maintenance-shaped tables in the database: 0. Hand entries recorded for M-6/M-7: 22
The options
(a) ask the managers to report turn time and PM completion, monthly, and enter them until a feed exists - restores 0.20 of the Manager rubric | (b) build the feeds: a make-ready log for M-6, a maintenance export for M-7 - the durable answer, and the larger job | (c) BACKFILL what the statements already contain, rather than starting from today - see the note | (d) zero M-6 and M-7 and let Manager be what it measures, which is reporting punctuality
On backfilling: a grade with no history reads differently from one with it — the Prior column is blank and a manager who has improved looks the same as one who never moved. But a backfill invents precision it cannot have, and this report has already been bitten once by a prior that was written from a state nobody had earned. If we backfill, it should be from the filed statements themselves with the as-of date recorded, never from an estimate.
strategy-lifecycle-source
CL
Identity
OPEN
Where should Strategy and Lifecycle come from?
Why it matters
Both columns are carried and empty - they are not held on the investment row. The DIT is the obvious home, and until one is chosen the columns print "TBD".
What the book says now
both columns empty on all 0 deals
The options
(a) the DIT deal sheet | (b) new fields on the investment row, set at import | (c) drop the columns
rent-roll-queue
CL
Feeds
DECIDED
The forwarded rent rolls are waiting in the RE review queue. Approve them?
Casey Lin · Sep 09, 2026
Why it matters
They unlock the leasing and renewal KPIs, which band almost nobody today. They are gated deliberately: the source as-of dates were found to be wrong and were corrected on the way in, so the first batch is worth sampling rather than bulk approving.
What the book says now
0 rent-roll ingests pending across 0 deals; 7 deals hold live rent-roll units today
The options
(a) sample the largest deals, check the periods, then approve the rest | (b) bulk approve | (c) leave them queued
grades-filter-panel
CL
Workbook
OPEN
The selector panel now sits in G-N and accepts several values per box, but applying it still needs one keystroke (Data > Reapply). Ship the pack as a macro workbook so a selection filters on its own?
Why it matters
Excel cannot re-apply an AutoFilter when a CELL changes — only VBA can. So the panel writes an Include? column, the filter is saved against it, and the reader presses Ctrl+Alt+L. A six-line Worksheet_Change macro would remove that step, at the cost of shipping .xlsm: the recipient gets a trust prompt, some mail gateways strip macro workbooks, and every other pack in the Report Center is .xlsx.
What the book says now
AutoFilter is live on all 61 columns, the panel drives the Include? column and the filter is saved against it. Multi-select works today by typing "A; B" into a selector.
The options
(a) leave it — one keystroke, no trust prompt | (b) ship 19_Report_Card as .xlsm with the macro | (c) macro version alongside the .xlsx, on request
Excel's own header dropdowns already multi-select with checkboxes and need no macro. The panel earns its place by holding six dimensions visible at once, not by being the only way to filter.
projected-returns-without-underwriting
MH
Returns & Cash Flow
OPEN
What should CF-4 do when a deal has no underwriting on file, or the underwriting has run past its last projected year?
Why it matters
CL asked for the call in as many words: "add what to do for projected returns when there is no UW or it has expired". CF-4 measures the trailing-twelve actual cash yield against what we underwrote for the same twelve months. Today a deal with no plan is simply ABSENT from the KPI - it lowers coverage and never the grade, which is the right refusal but not necessarily the right answer. An EXPIRED plan is treated the same way, and that is the case worth deciding: a ten-year underwriting on a twelve-year hold is not missing, it is finished.
What the book says now
CF-4 bands 0 of 0 deals; 0 carry no underwriting at all
The options
(a) leave both absent - honest, and it costs coverage | (b) absent where there is no plan, but hold the FINAL underwritten year flat for a deal that has outlived its plan | (c) score an expired plan against the last year it covered, and say so on the row | (d) chase the missing underwriting - the Deal Scorecard already asks the manager for it
Whatever is chosen, an expired plan and a missing one must not look the same on the page. They are different findings: one is a deal nobody re-underwrote, the other is a deal we never underwrote.
value-when-the-mark-is-missing
MH
Value
OPEN
Thirteen deals carry a full T-12 NOI and no `Value Based on NOI` mark. Should the Value band fall back to the RE Valuation service, or stay blank?
Why it matters
CL asked why so many properties are blank, and for the T-12 NOI and cap rate to be shown so the working is visible. The working is now on the tab - NOI, cap rate and basis are all columns. The blank itself is a real choice: the mark this band reads is the manager's own line, READ rather than derived, so it cannot disagree with what was reported. `re_valuation_service` would compute one from NOI and a cap rate plus overrides - a different number by construction, and one nobody filed.
What the book says now
0 of 0 deals have a T-12 NOI; 0 of those have no filed value mark
The options
(a) stay blank - the band is about the FILED mark | (b) fall back to re_valuation_service, flagged as derived on the row | (c) fall back only where a cap rate for that asset class exists, and say which one was used | (d) chase the mark from the manager
Deriving a value from NOI and a cap rate, then computing a cap rate from that value, is circular - the Value Input tab says so beside the column. Any fallback has to bring its own cap rate from somewhere that is not the mark.
recourse-vs-carveout-guarantee
MH
Debt
OPEN
Does a guarantee with standard bad-boy carve-outs count as recourse, here or anywhere else — or do we only care about genuinely recourse loans?
Why it matters
D-8 divides a guaranteed amount by net equity, and the guaranteed amount is `property_debt.guarantee_pct` times the balance, falling back to K-1 Item K. Neither source distinguishes a full-recourse loan from a non-recourse loan carrying the usual carve-outs — a carve-out guarantee leaves the loan NON-RECOURSE for tax purposes while we have still signed something. CL reads Elmwood Terrace and Naches as truly recourse and most of the rest as personal guarantees with standard carve-outs, which on his reading should read zero.
What the book says now
D-8 bands 0 deals; 0 carry a recourse figure at all
The options
(a) only genuinely recourse loans carry a figure; a carve-out guarantee reads 0 — and D-8 then scores almost nobody | (b) keep both but SPLIT them into two columns, so the carve-out exposure is visible without being scored | (c) retire D-8 entirely and report recourse as a fact rather than a grade | (d) leave it, and read the number as "what we have signed" rather than "what is recourse"
Whichever is chosen needs a FIELD that records the distinction — neither store has one today, so no code change can separate the two without somebody marking the loans. That marking is the work item hiding behind this question.
peer-comparison-columns
MH
Grades
OPEN
Every band should show how a deal compares to the average and to the mean of all OTHER assets, and it should respond to the filter. Against what population?
Why it matters
CL asked for it in as many words: "For every section, there should be a compared to average and mean of all other assets (including with use of filter)." A comparison needs a peer group, and the four candidates give materially different answers: the whole book, the filtered selection, the same asset sub-type, or the same manager. "All OTHER assets" also means leave-one-out — a deal must not be in its own benchmark, or a large position flatters the average it is measured against.
What the book says now
0 deals graded across 0 sub-types and 0 managers; median weighted score 0.00. A filtered average is one SUBTOTAL row; a leave-one-out mean is a second column per band.
The options
(a) filtered selection, via SUBTOTAL so it moves with the filter — one row under the header | (b) same sub-type | (c) same manager, which is the comparison that starts a conversation | (d) all four, as a small block above the grid
A filter-aware average row is cheap — SUBTOTAL(1,...) ignores hidden rows by construction. Leave-one-out is the part that needs a decision, because it is a column per band rather than a row.
manager-reporting-definition
MH
Manager
DECIDED
M-1 timeliness counts a statement the documents app has RECEIVED even if we have not keyed it in; M-2 completeness counts only what is FILED, but measures the twelve months up to the deal's own latest filing. Are both the intended rule?
Casey Lin · Aug 04, 2026
Why it matters
CL asked directly: "Report Timeliness, and Completness - how determined? are we considering if they sent financials but we haven't filed it?" Yes on M-1, and on M-2 by a different route. M-1 takes the LATER of filed and received, which can only help a manager, so a document label we fail to parse costs them nothing. M-2 cannot use arrivals — only about seven in ten document period labels parse to a month, and a missed parse would read as a GAP and penalise exactly the manager it is meant to protect — so it moves the WINDOW to the deal's own latest filing instead.
What the book says now
M-1 bands 0 deals, M-2 bands 0. 0 deals hold a statement that has arrived and is not filed.
The options
(a) leave both as they are — each is lag-fair by its own route | (b) make M-2 use arrivals once period labels parse reliably | (c) score our OWN ingestion lag separately, so the backlog is visible without touching the manager's grade
Option (c) is the one that adds information rather than moving a grade: our queue is our problem, and it is currently invisible on every surface except the shaded "Last data received" cell.
issue-log-home
MH
Review
OPEN
Where does an issue raised off a report card get logged — by hand on the row, into the Review band, or into its own tracker?
Why it matters
CL asked for the call: "GB-ED decision as to how to log issues - manual, report, separate report?" The Review band holds Last reviewed, By and Commentary today and nothing writes to them except the override form, so an issue noticed while reading the workbook has nowhere to go but a person's memory.
What the book says now
0 of 0 deals carry any review note today
The options
(a) the Review band on the Grades tab, entered at /report-card/<deal> — one place, already built | (b) a separate Issues tab in the pack, exported and e-mailed | (c) the existing risk register at /risk, which already has owners and dates | (d) tasks-app, so it lands in someone's queue
Whatever is chosen must be the ONLY writer. Two places to log an issue is the same failure as two places to record a distribution.
grades-into-portfolio-dashboard
MH
Cross-report
OPEN
Should the Report Card grade — overall and by component — appear on the Portfolio Dashboard and the Asset Allocation report?
Why it matters
CL: "I think that Report Card grades should flow into the Portfolio Dashboard / Asset Allocation report - that was a GB-ED decision there but lets do that now include. Include overall grade as well as grade by component". The obstacle is SCOPE, not plumbing: the Report Card grades the deals it can score — those with filed Actual NOI — and the dashboard covers the whole book. A grade column there would be blank on most rows unless it says why.
What the book says now
0 deals are scoreable and 0 carry a grade, against the whole Active book — so a dashboard grade column would be populated on a minority of rows and must say why on the rest.
The options
(a) add Grade plus the five component grades, blank where the deal is not scoreable | (b) overall grade only, to keep the dashboard narrow | (c) a grade column plus a "why not graded" column, so a blank is never ambiguous | (d) roll grades up by asset type on Allocation rather than per deal
Scoreability is "has filed Actual NOI", which is a data fact about our ingestion, not a judgement about the deal. Saying that on the dashboard is the difference between a useful blank and a worrying one.