2024–25 School Performance Report · one school year, no trend
New Jersey publishes, for every district, how many students were suspended, referred to police, and involved in an incident that led to an arrest — broken out by student group and by grade. For the groups a parent most wants to see, the file is blank more often than it is filled. This page is the manual for reading it, and the pattern of the blanks is half of what it has to teach.
Every year New Jersey publishes a School Performance Report for each school and district, and alongside the web pages it posts the whole thing as a spreadsheet. Inside that file are six tabs of discipline and safety records: reported incidents by type, HIB (harassment, intimidation and bullying) investigations by nature, disciplinary removals, police notifications, and arrests. Three of those tabs are broken out by student group and by grade.
The edition here is 2024–25, covering 666 district reporting units. It is one school year. There is no trend on this page and no way to make one, because the file does not carry a comparable prior year.
We show this on district profiles, in the section Which students are disciplined here, joined only by exact zero-padded NJDOE district code — never by name. 576 of 587 rendered districts match. Eleven do not, and they show nothing rather than a guess.
We do not show it on school profiles. The release carries school-level rows for 259 school codes against roughly 2,900 schools on this site, which is not coverage — rendering it would imply a completeness that isn't there.
A removal is not a police call. A police call is not an arrest. None of the three is a measure of safety.
The district module carries three measures, kept apart and never added:
| Measure | What NJDOE counts |
|---|---|
| Suspended | Students who received one or more suspension of any type — in-school, out-of-school, or both. |
| Police notified | Students involved in at least one incident the school reported to police. A notification is a referral, not a charge and not a finding. |
| Arrested | Students involved in at least one incident that led to an arrest. |
There is no combined index here, and there will not be one. Adding removals to police notifications to arrests would triple-count the same student and would produce a number — a “school safety score” — that the underlying data cannot support. The three measures also overlap by construction: a student suspended and referred to police appears in both rows.
One quirk you should know about the arrest column: NJDOE's own source fields are named PoliceCount and PolicePercent, while the published layout defines them as all incidents leading to arrest. That mismatch is recorded by the publisher and carried through to our pages as published. We do not reconcile it against the separate police-notification tab, and neither should you.
The most reversible mistake on this data is treating a printed zero as missing, or a withheld cell as zero. They are opposite errors and both change the finding.
Every cell in the file is one of five publisher acts, and we render each of them differently:
| What the file says | What it means | How we show it |
|---|---|---|
| 1.6% | A rate NJDOE calculated and printed. | 1.6%, with the headcount beside it where one was published. |
| 0 · 0.00% | An exact zero. The state is saying nobody — not saying nothing. | None, with “the state published a zero”. |
| <5 | A headcount masked below five — including zero. The rate is withheld, but the bound is real information. | Fewer than 5, with “0 to 4 students”. |
| * | Withheld outright. No value, and no bound. | Withheld. |
| n/a | A cell the layout does not define. Structural, not suppressed. | Not collected. |
The two suppression markers do not mean the same thing. Across the whole release, 661,604 suppressed cells carry * and 89,178 carry <5. A tool that collapses both to “no data” throws away a bound the publisher chose to give. We keep the publisher's literal verbatim all the way from the source file to the page.
There is a further wrinkle: <5 only ever lands on a headcount. Its partner percentage in the same row is always a bare *. Read the percentage alone and the bound vanishes on 34,193 district cells. We resolve every cell from the count and the percentage together for exactly this reason.
And <5 includes zero. It reads like “between one and four students”, and it isn't. Grades are mutually exclusive, so a district's published grade headcounts plus its <5 grades have to reconcile to its district total — and in 96 districts they can't. District 0070 suspended one student all year and carries ten grade cells marked <5. At least nine of those ten are exactly zero. Read the marker as evidence that something happened and a small district's grade table inverts completely: ten grades that look like scattered discipline are one child and nine masked zeros. We say “0 to 4 students”.
Suppression runs inversely to group size. The smallest groups — the ones for whom a disparity would be most visible — are the ones most often withheld.
On the surface we render — three measures across twelve student groups in 666 districts, 23,976 cells — this is where the state landed:
| Student group | A rate | A published zero | <5 | Withheld | Withheld % |
|---|---|---|---|---|---|
| Non-Binary/Undesignated Gender | 3 | 30 | 6 | 1,959 | 98.05 |
| American Indian or Alaska Native | 39 | 125 | 31 | 1,803 | 90.24 |
| Asian, Native Hawaiian, or Pacific Islander | 342 | 533 | 201 | 922 | 46.15 |
| Two or More Races | 340 | 571 | 221 | 866 | 43.34 |
| Black or African American | 595 | 585 | 281 | 537 | 26.88 |
| Female | 755 | 850 | 6 | 387 | 19.37 |
| Male | 815 | 790 | 6 | 387 | 19.37 |
| White | 713 | 781 | 366 | 138 | 6.91 |
| Economically Disadvantaged | 789 | 738 | 366 | 105 | 5.26 |
| Hispanic/Latino | 771 | 798 | 384 | 45 | 2.25 |
| Students with Disabilities | 798 | 800 | 385 | 15 | 0.75 |
| All Students | 1,207 | 791 | 0 | 0 | 0.00 |
This is why we never drop a withheld row from a chart. Because the holes are patterned by group size, a chart of only the surviving cells would quietly redraw discipline as a White, Hispanic, Black, economically-disadvantaged and disabled-student phenomenon — those being the five groups whose cells mostly survive. Every group keeps its row, with the reason for its absence written where the value would be.
It also rules out something readers reasonably want. With Black-student cells withheld at 26.88% and White-student cells at 6.91%, any ratio between the two is computed across differently-censored samples. We publish no disproportionality index, risk ratio, or “X times more likely” statement from this file, anywhere. The groups also overlap — a student can be counted as Hispanic, economically disadvantaged and classified as having a disability at once — so the rows never sum to the district row either.
By grade the file is nearly complete: between 0.60% and 2.93% withheld. But that completeness is mostly published zeros, not published rates. Grade PK is 78.6% zero and 0.33% rate. The early grades are a substantive finding about who gets suspended, not a data gap — and reading those zeros as missing reverses it exactly.
We show grade on its own rather than crossed with student group. The file does not cross the two dimensions, and a grid of them would be mostly absence rendered in a channel built for magnitude.
It is tempting to write that small districts get censored. The data says otherwise. Suppression is roughly flat at 29–31% for every enrollment band above 250 students, and the correlation between district size and suppression rate is weak (Pearson r = −0.2756, n = 665). What changes dramatically is the reported rate, which rises about fourteen-fold from the smallest districts to the largest. In districts under 250 students, 97.7% of discipline cells are either a suppression marker or a published zero. The correct claim is that small districts are recorded as zero rather than published as a number.
For male and female students, New Jersey hides the number and prints the rate.
This is the single strangest thing in the file, and it decides how the whole surface has to be built. Male and Female each have 12,654 district headcount cells and 12,654 matching percentage cells. NJDOE suppresses 12,467 of the headcounts (98.52%) and only 2,040 of the percentages (16.12%). Every other student group suppresses the two columns at identical rates.
Stranger still: in 8,328 male and 8,506 female cells, the withheld headcount sits next to a percentage of 0.00%. The state starred out a number it had already told you was zero.
So we lead with the rate, not the count. A surface built on headcounts would find sex unreportable in 98.5% of districts, and — worse — would print “withheld” over 16,834 cells where the state plainly said nobody. A rate-led surface keeps sex readable in 83.9% of districts. Where NJDOE published the headcount we show it; where it didn't, we say so in place rather than leaving a gap the reader has to interpret.
One thing the percentage is not: it is not the group's share of the district's suspensions. It is the share of that group's own students, against that group's own enrollment. A district's Black suspension rate and its White suspension rate are two rates over two different denominators, which is what makes them worth reading side by side — and what makes dividing one by the other a different and much shakier operation.
NJDOE masks 34,193 small district headcounts with <5. But it publishes another 13,939 headcounts of one to four outright, so its own small-cell rule covers only about 71% of the cases. Nine districts publish a student-group rate of exactly 10.00% off a headcount of 1.
On our three-measure surface, 1,960 of the 7,167 published student-group rates — 27.3% — rest on a headcount below five. A single student in a group of ten prints as 10%, which is arithmetic and not a finding.
So we state a floor and enforce it: a rate whose published headcount is one to four keeps its row in the table, with the headcount right beside it, and gets no dot on the chart. The chart declines to draw a mark that invites a comparison the number cannot carry; the table still shows exactly what the state published. Every rate that does carry a dot is shown with its headcount, or with a note that the headcount was withheld.
These are reported incidents and the responses adults chose. They measure how a district records and refers at least as much as how its students behave. A district that documents diligently and calls police readily will look worse here than a district that handles the same behaviour informally — and nothing in the file distinguishes the two. This is not a crime rate, not a safety measure, and not a measure of school quality.
<5 bounds in particular must never be summed — the same student can be inside several of them.The whole family arrives as an exact, offline, hash-pinned release — this repo downloads and parses nothing. From it we project four district tables, plus a 54-row catalog of what each metric means.
| Table | Rows | Grain |
|---|---|---|
discipline_safety_district_headline | 8,658 | District totals — incidents by type, police notifications |
discipline_safety_district_hib_nature | 15,984 | District × the eight natures of a HIB investigation |
discipline_safety_district_all_students | 25,308 | District × the publisher's All Students row |
discipline_safety_district_group_grade | 570,342 | District × student group and district × grade — the table behind this page |
discipline_safety_metric_catalog | 54 | One row per metric: label, definition, unit, publisher defect |
Until 2026-07-30 only the first three existed, and the warehouse had a suppression rate of exactly 0.000% — because those three slices are precisely the ones New Jersey never suppresses. That was a property of what we had chosen to keep, not of the data. The widened table carries all 183,192 district-level suppressions, and value_state and the publisher's literal ride along with every one of them.
The three original tables are asserted byte-identical by the builder itself, so the widening is provably additive.
Every dataset behind this site keeps a structured registry of its known issues — the format breaks, suppression rules, entry errors, and definitional traps we hit while building on it — so that the next person (or agent) who works with this data doesn't rediscover them the hard way. Each issue has a stable id, a machine-readable scope (which years, columns, and tables it touches), and an effect: breaks stops a pipeline, corrupts silently wrongs the numbers, misleads invites a wrong reading of right numbers, context is background you must hold to use the data responsibly. Issues marked ★ are core: read them before any use of this data. The registry is maintained in the ergo format and served in machine-readable form alongside this page — links at the end of this section.
NJ Department of Education, Office of Performance Reports · source confidence A · updated 2026-08-03 · 18 known issues (5 core)
The pitfall: These are separate per-edition records of reported incidents and responses, not a combined safety score or evidence of cause, effectiveness, or budget performance; NJDOE states its own 2019-20 and 2020-21 discipline data are not comparable with adjacent years.
Type: suppression — applies to tables: discipline_safety_district_group_grade · columns: reported_literal, value_state · rows: value_state = 'suppressed'
How to spot it: Release-wide the 750,782 suppressed values split 661,604 `*` and 89,178 `<5`. In the district student-group and grade slice the split is 148,999 `*` and 34,193 `<5`. No suppressed cell carries a numeric value.
The misread: Coalescing both markers to NULL or to a single 'suppressed' label. `<5` bounds the headcount below five; `*` states only that the publisher withheld the cell. Collapsing them discards a bound the publisher chose to give. Note the bound runs from zero, not one — see less-than-five-includes-zero.
Full entry, with the story and the numbers, in the served ergo doc.
Type: suppression — applies to tables: discipline_safety_district_group_grade · columns: reported_literal, unit · rows: reported_literal = '<5'
How to spot it: All 89,178 `<5` literals in the release sit on the students-or-incidents unit; the percent unit carries only `*` (322,625 cells). Joining each count metric to its percent partner on the same source row gives the pair ('<5','*') in every student group and every grade.
The misread: Resolving a cell from its percentage alone. The percentage says only `*`, so a reader who never looks at the headcount column throws away the below-five bound on 34,193 district cells.
Full entry, with the story and the numbers, in the served ergo doc.
Type: suppression — applies to tables: discipline_safety_district_group_grade · columns: reported_literal · rows: reported_literal = '<5'
How to spot it: Grades are mutually exclusive and partition a district, so the published grade headcounts plus the `<5` grade cells must reconcile to the All Students headcount. Among the 574 districts with a published All Students any-suspension count and no `*` grade cell, 96 have an All Students total smaller than their number of `<5` grade cells — district 0070 suspended one student in total and carries ten `<5` grade cells, district 0080 one student and nine. Those cells cannot all contain at least one student, so at least nine of ten are exactly zero.
The misread: Reading `<5` as 'between one and four students', which turns a masked zero into an incident. In a small district that inverts the whole grade table: ten grades each reading 'fewer than 5' suggests discipline spread across every grade when the district suspended one child.
Full entry, with the story and the numbers, in the served ergo doc.
Type: suppression — applies to tables: discipline_safety_district_group_grade · columns: numeric_value · rows: value_state = 'reported' AND unit = 'students-or-incidents' AND numeric_value < 5
How to spot it: In the district student-group and grade slice, 13,939 reported headcounts fall between 1 and 4 while 34,193 comparable cells are masked `<5`; 15,079 reported headcounts are 5 or more. Nine districts publish an American Indian or Two or More Races rate of exactly 10.00% off a headcount of 1. On the three-measure student-group surface, 1,960 of 7,167 published rates (27.3%) rest on a headcount below five.
The misread: Treating a published rate as evidence of a pattern. One student in a group of ten prints as 10%, which is arithmetic and not a finding; and treating the `<5` mask as a guarantee that every small cell is protected.
Full entry, with the story and the numbers, in the served ergo doc.
Type: suppression — applies to tables: discipline_safety_district_group_grade · columns: value_state, reported_literal · rows: conformed_dimension_label IN ('Male','Female')
How to spot it: Male and Female each carry 12,654 district count cells and 12,654 percent cells. 12,467 count cells are suppressed against 2,040 percent cells. Every other student group suppresses the two columns at identical rates to three decimals. Pairing each count with its percent on the same source row, 8,328 Male and 8,506 Female cells carry a suppressed `*` count beside a published `0.00%` percentage. `spr.discipline.arrests.any-count` is suppressed for 659 of 666 districts for both.
The misread: Building a student-group surface on headcounts. Sex becomes unreportable in 98.5% of districts, and in the 8,328/8,506 zero-percentage cells a count-led reading prints 'withheld' over a cell where the publisher stated an exact zero.
Full entry, with the story and the numbers, in the served ergo doc.
Type: coverage — applies to tables: discipline_safety_district_group_grade · columns: value_state · rows: dimension_kind = 'student-group'
How to spot it: Each student group carries 25,308 district cells. Suppressed counts run Non-Binary/Undesignated Gender 24,934; American Indian or Alaska Native 23,366; Male 14,507; Female 14,507; Asian/NHPI 14,068; Two or More Races 13,388; Black or African American 9,920; White 5,614; Economically Disadvantaged 5,232; Hispanic/Latino 4,572; Students with Disabilities 4,202; All Students 0. Non-Binary carries 14 reported values of 25,308 (0.055%) and American Indian 194 (0.767%).
The misread: Rendering only the cells that were published. Because the holes are patterned by group size, a chart of the surviving cells redraws discipline as a White, Hispanic, Black, economically-disadvantaged and disabled-student phenomenon — those being the groups whose cells survive. Equally: computing any ratio, risk index or 'X times more likely' statement between two groups censored at different rates.
Full entry, with the story and the numbers, in the served ergo doc.
Type: suppression — applies to tables: discipline_safety_district_group_grade · columns: value_state, reported_literal · rows: value_state IN ('exact-reconciliation-zero','suppressed')
How to spot it: The district student-group and grade slice holds 325,103 exact-reconciliation-zero cells (`0` 154,130 and `0.00%` 170,973) against 183,192 suppressed and 62,047 reported. Grade PK is 78.6% published zero and 0.33% published rate. Across the whole district level, 97.733% of cells in districts under 250 students are either a suppression marker or a published zero, and the Pearson r between log10 enrollment and district suppression rate is only -0.2756 (n=665) — suppression is near-flat at 29-31% above 250 students while the reported rate rises 13.7x across the range.
The misread: Rendering a published zero as 'no data', or a `*`/`<5` as zero. The two errors reverse a finding in opposite directions. Also: writing that small districts are censored more heavily — they are not; they are recorded as zero rather than published as a number.
Full entry, with the story and the numbers, in the served ergo doc.
Type: coverage — applies to tables: discipline_safety_district_group_grade · rows: conformed_dimension_label IN ('Non-Binary/Undesignated Gender','American Indian or Alaska Native','Grade PK')
How to spot it: District-level reported cells: Non-Binary/Undesignated Gender 14 of 25,308 (0.055%), and 34 of 120,650 across all organization levels (0.028%); American Indian or Alaska Native 194 of 25,308 (0.767%); Grade PK 22 of 19,228 (0.114%). On the three-measure module surface Non-Binary is withheld in 98.05% of cells and American Indian in 90.24%.
The misread: Reading these rows as zero, or as evidence that these students are never disciplined. The rows are withheld, not empty.
Full entry, with the story and the numbers, in the served ergo doc.
Type: definitional — applies to tables: discipline_safety_metric_catalog, discipline_safety_district_group_grade · columns: publisher_defect · rows: metric_id LIKE 'spr.discipline.arrests.any-%' OR metric_id = 'spr.discipline.police-notifications.unique-count'
How to spot it: metric_definitions carries publisher_defect = 'Source field says Police; layout defines all incidents leading to arrest.' on spr.discipline.arrests.any-count and spr.discipline.arrests.any-percent, and 'Source field is OtherIncidents; layout defines a total unique count.' on spr.discipline.police-notifications.unique-count.
The misread: Reconciling the arrest column against the separate police-notification column, or treating one as a subset of the other. They are different tabs with differently-named source fields, and the site never adds or nets them.
Full entry, with the story and the numbers, in the served ergo doc.
Type: definitional — applies to tables: discipline_safety_district_group_grade, discipline_safety_district_headline, discipline_safety_district_all_students
How to spot it: All 54 metrics carry value_origin = 'reported' and universe text describing publisher-reported counts and percentages. There is no independent incident audit in the file and no adjustment for reporting practice.
The misread: Reading any of these numbers as behaviour, crime, safety, school quality or the effect of a budget decision; combining removals, police notifications and arrests into a single index or safety score; or ranking districts on any of them.
Full entry, with the story and the numbers, in the served ergo doc.
Type: measurement — applies to years: 2019-2020, 2020-2021 · tables: discipline_safety_district_removal_history
How to spot it: Both editions ship a notes sheet inside the workbook ('Important 2019-2020 Notes', 'Important 2020-2021 Notes') carrying the caution against each of four discipline elements. Neither sheet is linked from the download page and nothing in the values hints that it exists. The magnitude is visible in the values: statewide any-suspension counts run 55,971 in 2018-19, 39,646 in 2019-20, 4,644 in 2020-21, then 52,135 in 2021-22.
The misread: Drawing a trend line through 2019-20 and 2020-21, or reading the fall in those two years as a change in student behaviour or a policy success. Schools were shut for part of spring 2020 and much of 2020-21; the fall is very largely a fall in the number of children in a building.
Instead: Break the series at 2019-20 and 2020-21 and print the publisher's own sentence for each, separately — the two editions state different causes, spring 2020 closures and then the pandemic as a whole, and collapsing them into one COVID note loses that.
Full entry, with the story and the numbers, in the served ergo doc.
Type: coding — applies to years: 2017-2018, 2018-2019, 2019-2020, 2020-2021, 2021-2022 · tables: discipline_safety_district_removal_history · columns: reported_literal
How to spot it: `N` appears in 762 district removals values across 2017-18 through 2021-22 and in zero values from 2022-23 onward. In 2018-19, 36 districts carry an entire removals row of `N` with no number in it anywhere; elsewhere it sits on a percent beside a published `0` count. The producer's own sheet-by-sheet check of all ten editions records that 2015-16 through 2018-19 carry 'no notes, legend, cover or reference sheet of any kind'.
The misread: Reading `N` as zero, which invents a district that suspended nobody, or folding it into the same 'withheld' bucket as `*`, which claims to know it is a suppression.
Full entry, with the story and the numbers, in the served ergo doc.
Type: format — applies to tables: discipline_safety_district_removal_history · columns: row_scope, dimension_label
How to spot it: The removals sheet has no dimension column at all in 2017-18 through 2022-23 (672 district rows per edition) and a `StudentGroup/GradeLevel` column from 2023-24 (15,702 rows) and `StudentGroupGrade` in 2024-25 (15,035). The all-students label is the empty string, then `Districtwide`, then `All Students` — and the State workbook's copy is `Statewide` in 2023-24 only.
The misread: Reading the all-students figure positionally across the boundary. A consumer that expects one row per district gets an empty result for 2023-24 and 2024-25, which on a trend renders as a collapse to zero in exactly the two most recent editions.
Instead: Match on the label set, not on position — and do not draw a break there. The quantity did not move: NJDOE prints it under the same column name, `AnySusp_Count`, in 2017-18 and again in 2024-25.
Full entry, with the story and the numbers, in the served ergo doc.
Type: format — applies to years: 2023-2024 · tables: discipline_safety_district_removal_history · columns: source_column
How to spot it: Seven of the eight removals sheets declare the same measure-column names. The 2023-24 sheet declares ten differently-spelled ones whose text names the same quantities in words. 2024-25 reverts to the 2017-18 spelling.
The misread: Treating the rename as a new measure and starting the series at 2024-25, or mapping the columns by position rather than by name.
Full entry, with the story and the numbers, in the served ergo doc.
Type: availability — applies to tables: discipline_safety_district_removal_history · columns: measure_key
How to spot it: Five of the seven removal measures run all eight editions; arrest and school days missed run six. Arrests reappear on a separate sheet that begins in 2023-24 and names its columns `ArrestedCount`/`ArrestedPercent` in that edition and `PoliceCount`/`PolicePercent` in the next. School days missed appears nowhere after 2022-23.
The misread: Joining the removals-sheet arrest column to the later arrests sheet to make an eight-year arrest series. They are two differently-named columns on two different sheets, and the second one's own field names say police notification.
Full entry, with the story and the numbers, in the served ergo doc.
Type: suppression — applies to years: 2017-2018, 2018-2019, 2019-2020, 2020-2021, 2021-2022 · tables: discipline_safety_district_removal_history
How to spot it: `*` on the matched-district any-suspension percent runs 133, 126, 130, 242, 132 across 2017-18 to 2021-22 and 0 in 2022-23, 2023-24 and 2024-25. The 2020-21 peak is the closure year. Commission 040 measured the consumer mart at 0.000% suppressed because it held 2024-25 only — the district row genuinely is never suppressed in the current edition.
The misread: Reading a district whose early years are `*` as a district whose suspensions rose, when what rose is the publisher's willingness to print the number. 182 of 666 districts publish no student-group suspension rate at all in 2024-25, and the same small districts are the ones withheld here.
Full entry, with the story and the numbers, in the served ergo doc.
Type: definitional — applies to years: 2023-2024, 2024-2025 · tables: discipline_safety_district_group_grade, discipline_safety_district_removal_history
How to spot it: 2023-24 publishes `Asian` and `Native Hawaiian or Pacific Islander` as separate groups; 2024-25 publishes one `Asian, Native Hawaiian, or Pacific Islander`. `Hispanic` becomes `Hispanic/Latino`, `Districtwide` becomes `All Students`, and two labels change only in case. Seven labels are unchanged, and 1,722 of their 3,430 possible district cells (50.2%) carry a published rate in both editions. No edition before 2023-24 carries a student-group dimension at any grain.
The misread: Drawing a two-point trend, a slope chart, or an arrow between the two editions — which is the form `vizier` returns for two time points and many categories, and the wrong one here. Also: adding 2023-24's Asian and Native Hawaiian or Pacific Islander rows to match 2024-25's merged category, which cannot be done wherever either side is withheld.
Instead: Show the current edition in full and say in words that the record is two years long and crosses a redefinition. When a third edition lands on the 2024-25 categories, this becomes a series.
Full entry, with the story and the numbers, in the served ergo doc.
Type: identity — applies to years: 2016-2017, 2017-2018, 2018-2019, 2019-2020 · tables: discipline_safety_edition_identity
How to spot it: The producer's identity register marks 2016-17 through 2019-20 as outside the evidence window and carries the caveat verbatim on each. District match rates are near-identical either side of the boundary (0.799 to 0.808), so the match rate is evidence about code stability rather than about entity continuity.
The misread: Reading an eight-edition district line as a promise that the same schools sat inside the district throughout. New Jersey merges and regionalizes districts, and this file carries no district name at all in the source-shaped layer, so nothing here can confirm or deny a change.
Full entry, with the story and the numbers, in the served ergo doc.
Machine-readable: this page as an ergo doc · all datasets (index.json) · format: ergo · implementation: source repo
The text on this page was generated by Claude Opus 5, working as part of a stack of tools created by Lyra Forge.