2 May 2026
Writeiq v3.17.0 - Year-level moderation rounds (Phase 1: proposal lifecycle)
Feature
- Year-level peer moderation now lives in Writeiq. Any year-level teacher can propose a moderation round. Year-level peers see a pending proposal on next login and can accept or decline. The round transitions to in progress when a majority of the year-level pool accepts; if so many decline that majority becomes impossible, the round auto-declines.
- Variable pool size. The initiator picks how many pieces each marker will moderate, with a guardrail warning at pool sizes above twenty. The initiator is auto-counted as accepted; the rest of the pool decides.
- Discrepancy threshold set at 1.5 bands. When marking is added in the next release, scores from Teacher A and the blind peer marker that differ by more than 1.5 bands will auto-escalate to a third teacher (system-picked from the year-level pool, excluding the original two). The original marker sees own and peer scores, and confirms the final mark.
- New Moderation tab in the staff view, visible only when relevant. The tab appears next to NAPLAN whenever a teacher has at least one pending or active round involving them. Three sections: pending proposals awaiting your response, your active rounds, and recent completed rounds. A toast on login surfaces pending proposals so they cannot be missed.
- Schema and RPCs deployed. Three new tables (
blind_moderation_rounds, _acceptances, _assignments) with row-level security; five SECURITY DEFINER RPCs validating licence-key plus school-id internally on every call. All schema changes are live in Supabase.
- 1,074 smoke + 48 + 53 e2e = 1,175 assertions, 0 failed. Server-side smoke covers ten end-to-end RPC paths including auth rejection, transition-on-majority, and decline-when-majority-impossible. Client smoke covers module exports, bridge helpers, markup containers, tab dispatch, bundle ordering, and post-login hook wiring. Vite build verified locally.
2 May 2026
Writeiq v3.16.0 - NAPLAN moved into its own tab; methodology and IP position made explicit
Feature
- NAPLAN-correlated readiness is now its own tab. Previously the panel auto-injected itself into the staff and leadership analytics views, which crowded the layout and showed empty-state explainers to teachers who did not need them. Staff now have a dedicated NAPLAN tab next to Compare Classes. Leadership has a NAPLAN sub-tab that only appears when the cohort includes Year 3, 5, 7, or 9 data, with year-level chips so leaders can drill into one year level at a time.
- Methodology and source explanation built into the product. Every NAPLAN panel now has a "?" info button that opens a methodology modal explaining: source (the NAPLAN Writing Marking Guide, publicly published by ACARA at nap.edu.au); how the comparison works; what Writeiq does not do (we do not mark using the NAPLAN rubric, do not predict NAPLAN scores, do not claim NAPLAN endorsement); and the genre-conditional CR-04 mapping (Character for narrative, Persuasive Devices for persuasive).
- Disclaimer language strengthened. The previous wording said Writeiq is "independent of ACARA" - which is true but soft. The new disclaimer states explicitly: "Writeiq does not mark using the NAPLAN rubric. We compare IWAF performance to NAPLAN as a readiness indicator only." Source attribution and an "Independent of ACARA" line are also surfaced on every panel header.
- Coverage clarified. All 11 IWAF criteria have NAPLAN equivalents in the mapping. The panel only displays criteria that have data for the cohort - so a narrative piece shows Character (not Persuasive Devices), a persuasive piece shows Persuasive Devices (not Character). NAPLAN does not assess analytical writing, so analytical-essay scores are not surfaced in this view.
- 1,001 smoke + 48 + 53 e2e = 1,102 assertions, 0 failed. Tests cover: methodology modal IP statements, source attribution, panel disclaimer wording, genre-conditional explanation, modal z-index above submission modals, staff tab structure, leader sub-tab structure, year-chip handler, dispatcher wiring. Vite build verified locally before ship to catch the kind of duplicate-identifier collision that broke deploys in 9.40.0/9.41.0.
1 May 2026
Writeiq v3.15.0 - Modernised data viz: slope charts, dumbbell charts, bullet charts, stripe plots
Feature
- Year-on-year cohort and class growth: tables replaced with slope charts. Tables make trajectory hard to read - the eye has to scan across rows comparing percentages. Slope charts make direction and magnitude immediately visible: each line is one student or class across years, line colour reflects the trajectory (improving = teal, declining = crimson, stable = grey). Reference markers at 31, 56, and 80 percent flag when a cohort crosses an IWAF band threshold. Original data tables preserved as collapsible details for users who need exact numbers.
- Task-on-task growth: criterion change table replaced with dumbbell chart. The previous table required reading each row's arrow and colour to figure out direction. Dumbbell charts show each criterion as two dots (previous + current) joined by a coloured line - the line's direction and length make the change instantly readable. Sorted by absolute change so the biggest movers appear at the top.
- NAPLAN readiness: bar chart replaced with bullet chart. The previous bar chart showed criterion percentages but didn't make the band zone obvious. Bullet charts show the actual percentage as a bar overlaid on band-coloured zones (red 0-30, amber 31-55, navy 56-79, teal 80+), so the eye reads "amber zone for Spelling" instantly without having to interpret colour-coded numbers.
- Class analytics: per-card distribution bars replaced with cross-class stripe plot. The 20-pixel rainbow bars on each class card made cross-class comparison impossible - users had to scan each card individually. The new stripe plot shows all classes at once, each row a class with band distribution stacked horizontally. Comparing class distributions is now a single down-the-page scan.
- Apache ECharts as the chart library. All five new chart types (slope, dumbbell, bullet, sparkline, stripe) are powered by Apache ECharts (MIT licensed, ~1MB minified). Loaded from jsDelivr CDN, integrity hash auto-injected at build time. Falls back gracefully to a hand-styled message if ECharts fails to load.
- Brand-themed chart wrapper module. A new
wiq-charts.js module owns the Writeiq theme - band colours, typography, animation timing, threshold reference lines - centrally so every chart in the app reads from one source. Adding a new chart elsewhere takes a few lines, not a full theme reimplementation.
- Motion + aesthetic polish. Cards now animate in on first paint with a 320ms ease-out (staggered up to eight cards per pane). Charts fade in once mounted. Subtle hover lift on interactive cards. Skeleton shimmer for async loading states (replaces "Loading..." text). All motion respects
prefers-reduced-motion for accessibility.
- 1,057 assertions, 0 failed. Includes 48 new smoke tests pinning the chart wrappers, the integrations across leadership and admin views, the bundle ORDER, the CSP and CDN script tags, and the motion CSS.
1 May 2026
Writeiq v3.14.0 - Class analytics, NAPLAN visualisation, NCCD export and import, evidence-by-criterion popup
Feature
- Class Analytics tab in admin. The previously hidden Compare tab is now live as "Class analytics". Per-class breakdown showing student count, marked submissions, average band percentage, distribution across the four IWAF bands, and the top three criterion strengths and weaknesses for each class. Brand-aligned colours match the rest of the app.
- NAPLAN readiness panel is now a chart, not a list. Previously a text-only criterion list with percentages. Now an SVG horizontal bar chart with one bar per criterion, showing the percentage of students at or above Consolidating. Threshold markers at 31, 56, and 80 percent. Brand-aligned colours matching the IWAF band thresholds. Legend included. Independence from ACARA preserved in the disclaimer.
- NAPLAN staff view now has clearer empty states. Three cases handled: (a) teacher's classes include Year 3, 5, 7, or 9 but no marked submissions yet (new) - panel explains what the view will show as marking progresses, (b) teacher only has non-NAPLAN years (existing), (c) teacher has no year data at all - silent until data arrives. The "Independent of ACARA" disclaimer appears in both visible branches.
- Leadership can now export NCCD evidence as CSV. New "Export CSV" button in the leadership NCCD section. Generates an audit-ready CSV with one row per evidence entry. Columns: Student, Class, Year level, Date, Category, Adjustment, Notes, Task, Submission ID, Recorded by, Record ID. RFC 4180 quoted, downloads as
nccd-evidence-{schoolname}-{date}.csv.
- NCCD levels can be set in bulk via roster CSV import. New optional 7th column "NCCDLevel" on the existing roster CSV import. Values:
qdt, supplementary, substantial, extensive (case-insensitive). Empty values leave the student unflagged. Invalid values are silently ignored. Backward compatible: old roster CSVs without the column still work.
- Growth tab now shows a clear "no data yet" message. When there are not enough archived tasks or year-archive data for growth comparison, the Growth tab in leadership analytics previously appeared stuck on "Loading growth data…" forever. It now shows a clear empty state explaining what produces growth data: a second writing task in the same writing type for task-on-task growth, or archived year data via Admin → Year & data for year-on-year cohort growth.
- Evidence-by-criterion legend buttons no longer auto-jump. Previously, clicking a criterion in the highlights legend on the right of the transcript would jump the user straight to the criterion detail row, hiding the transcript evidence they had just been about to look at. Click now: (a) pulses the matching highlights in the transcript above so the user sees where the evidence is, (b) opens a small floating popup near the clicked button with the criterion label, evidence span count, and a "View criterion detail →" button. The popup auto-dismisses after eight seconds or on outside click. Direct clicks on a transcript highlight still jump to the criterion detail (that's the explicit "investigate this span" intent).
- Drift-protection smoke tests. 34 new tests pinning each of the seven feature additions: function definitions, window exports, dispatcher cases, markup state (Compare tab unhidden), CSV column validation, SVG element generation, popup z-index, click-handler behaviour. Total: 908 smoke + 48 + 53 = 1,009 assertions, 0 failed.
1 May 2026
Writeiq v3.13.3 - NCCD and peer moderation modals stack correctly
Fix
- NCCD evidence and peer moderation modals now appear on top of the submission view, not behind it. When a teacher viewing a marked submission clicked "Add NCCD evidence" or "Request peer moderation", the new modal opened beneath the submission modal — the teacher had to close the submission modal first to see what they had just opened. The submission modal uses
z-index:99999; the child modals were at z-index:1000, so they rendered behind. Both child modals now use z-index:100000 matching the existing convention for child overlays in the codebase.
- Drift-protection smoke test added. 970 total assertions / 0 failed. The test reads the
.ov z-index from styles.css at runtime and verifies every class="dmodal" instance in wiq-nccd.js and wiq-moderation.js uses a higher value. If a future modal copies the wrong z-index, the test fails before deployment.
1 May 2026
Writeiq v3.13.2 - Site consistency: writeiq.com.au and edsthetic.com.au now serve the same content
Fix
- writeiq.com.au and edsthetic.com.au are now consistent. A post-9.39.1 audit found that the two source trees backing the marketing sites had drifted apart over time. Eight pages (about, allocateiq, band-framework-correlation, dailyorg, nccd-compliance, status, teach-next, writeiq-vision) had different content between the two sites - the canonical tree had received the modern 5-column footer (Products / Resources / Trust & Company), the writeiq.com.au tree was still on the older simpler footer. Pricing and FAQ pages were missing from writeiq.com.au entirely (writeiq.com.au/pricing returned a 404). Five JS files (animations, navigation behaviour, status page, marketing analytics) only existed on the canonical tree. All resolved - the two sites now serve identical content modulo the homepage focus (Edsthetic corporate hub vs Writeiq landing).
- writeiq.com.au/pricing and writeiq.com.au/faq now resolve. Both pages added to the writeiq-marketing build's page list and clean-URL redirects.
- Old app proxy URLs replaced with the canonical app domain. Two CTA links in
teach-next.html and band-framework-correlation.html still pointed at the legacy edsthetic.com.au/apps/writeiq/ proxy path. Updated to the canonical app.writeiq.com.au.
- Brand string fixes. Two user-visible strings still used the pre-rebrand "WriteIQ" capitalisation: a teacher-facing description in
wiq-feedback-content.js and the trial-key request mailto subject in wiq-markup.html. Both now use "Writeiq".
- Highlights legend dispatch contract documented. The "focus on this criterion" button in the highlights legend (
data-action="focusCritFromHighlight") is intentionally handled by a section-scoped click listener in wiq-highlights.js, not the global dispatcher - but the dispatcher now declares the action explicitly to avoid logging an "Unhandled data-action" warning on every click.
- Five new drift-protection smoke tests. Pin that the two trees stay in sync, that the writeiq-marketing build includes pricing and faq, that user-visible strings can't regress to "WriteIQ" capitalisation, and that the focusCritFromHighlight contract is documented. 868 smoke + 96 e2e = 964 assertions, 0 failed.
1 May 2026
Writeiq v3.13.1 - NCCD evidence persistence fix
Fix
- NCCD evidence now correctly saves to the school's audit-grade database. The initial v3.13 release shipped with a placeholder bridge (
wiqV2.fetchSupa) that didn't actually exist in the codebase, so evidence records were only landing in the local cache rather than reaching the Supabase audit table. The persistence path now uses dedicated nccdInsertEvidenceRPC and nccdGetRollupRPC bridges with the same licence-key authentication pattern as school_data_set.
- Server-side database functions hardened. The Postgres functions backing the bridges (
insert_nccd_evidence, get_nccd_rollup) were rewritten to authenticate via licence_key against admin_schools (rather than a JWT-claims pattern that doesn't fit the anon-key + licence-key model used elsewhere). Each function validates the category enum, requires a non-empty student name and adjustment, and rejects unauthorised licence/school combinations with HTTP 401-equivalent errors.
- Class-slug rotation migration applied. A separate Pass 9.32.0 migration that adds rotation counters to school licences had been declared in the repo but not run against the live database. Without it, slug rotation enforcement was silently disabled (defaulting to
0 on every comparison). The migration is now in place and the class-slug rotation admin endpoint is functional.
- Six new server-side smoke tests confirm the migration deployed cleanly: insert succeeds with valid licence, rollup returns correct aggregates, wrong licence is rejected (42501), invalid category is rejected (22023), and the historical broken-pattern check pins forever.
1 May 2026
Writeiq v3.13 - NCCD evidence layer: capture adjustments, support compliance returns
New
- Tag NCCD evidence on any submission: teachers viewing a marked submission for an NCCD-flagged student now see an "Add NCCD evidence" button. Two-level picker (category, then specific adjustment) makes capture quick - typically 20 seconds per submission. Records the adjustment context (student, class, task, category, specific adjustment, optional notes) for the school's compliance audit.
- Five recognised adjustment categories: Curriculum, Instruction, Environment, Assessment, Communication, plus "Other" with free-text. Common specific adjustments (extra time, scribe, scaffolded delivery, visual supports, quiet space, modified format, and more) populate as predefined options to make capture consistent across teachers.
- Four NCCD level classifications: Quality Differentiated Teaching (QDT), Supplementary, Substantial, and Extensive. Set per-student via the admin Students tab. The level appears as a badge in the submission view and on the leadership dashboard, framing the conversation accurately for teachers and leaders.
- Leadership dashboard NCCD section: per-student evidence count and recency table with status indicators - Current (≤14 days), Stale (15-42 days), Overdue (>42 days), or No evidence yet. Adjustment frequency chart shows distribution across categories. Auto-hides when no students are NCCD-flagged.
- Audit-grade storage: evidence records persist in the school's Supabase database with row-level security, capped per school, retained long-term per Australian schools records policy. Deletions are soft (archived flag) to preserve the audit trail. No hard delete path. Local cache provides offline fallback - records queue for sync when connection returns.
- Built carefully: 836 smoke assertions plus 96 JSDOM e2e tests, 932 total / 0 failed. Brand framing throughout uses "evidence collection" not "tracking" - schools collect evidence of adjustments PROVIDED, not deficits in students. Language matters here for school adoption.
1 May 2026
Writeiq v3.12 - Peer moderation workflow: calibration through year-level peers
New
- Request blind peer moderation on any submission: when a teacher views a marked submission, a new "Request peer moderation" button next to "Adjust scores" lets them ask a year-level colleague to score the same piece blind. The peer sees the student work and the IWAF criteria, but does not see the original scores - that is the whole point of blind moderation. Once both teachers have scored, both see the comparison side-by-side.
- Peer pool routes by year level: a Year 7 submission only surfaces Year 7 teachers as eligible moderators (admins and leaders can moderate any year). Identifies the pool from the existing Staff tab class assignments - no separate moderation-pool config needed.
- Moderation section in the teacher dashboard: shows pending requests assigned to you (awaiting your blind score), requests you have made (awaiting a peer), and completed comparisons. Each completed cycle is tagged with one of three agreement levels: strong agreement (within 5pp), within band (within 15pp), or disagreement - discuss (more than 15pp gap). Auto-hides when there is no moderation activity yet.
- Leader rollup in Score Adjustments: the leadership Score Adjustments card now also surfaces overall agreement rate and disagreement rate across all completed moderation cycles. Connects directly with the per-teacher pattern view shipped earlier - cohort calibration drift becomes a single readable number.
- Calibration-not-error framing throughout: the workflow is positioned as data for the next moderation meeting, not as a way to check up on teachers. Disagreements are the most useful data point - they're where the next conversation needs to happen.
1 May 2026
Writeiq v3.11 - NAPLAN multi-year, filter explainers, Year View visible from day one
Improved
- NAPLAN panel now renders one panel per NAPLAN year level present: previously the panel picked one dominant year and showed a single panel - wrong for cohorts spanning Year 7 + Year 9. New behaviour: a panel per NAPLAN year level (3, 5, 7, 9) actually present in the cohort, stacked. Mixed cohorts also see a context note explaining the panel only covers NAPLAN-relevant year levels.
- Filtering to a non-NAPLAN year now shows a clear explainer: if you filter the leadership analytics to Year 8 (or any non-NAPLAN year), you previously saw nothing - the panel just disappeared. Now the section explains: "Year 8 is not assessed by NAPLAN writing. NAPLAN writing is administered in Years 3, 5, 7, and 9 only. Switch your year filter to one of those year levels to see NAPLAN-correlated readiness." Same explainer in the teacher class view if a teacher only has non-NAPLAN year classes.
- Year View toggle visible from your first marking event: the toggle previously hid itself entirely until you had 2+ marking events. New schools wondered whether the feature was real. Now the toggle is always visible once you have any data; the "Year view" side is greyed out with a tooltip "Year view appears once you have completed 2+ marking events this year" until you cross the threshold.
1 May 2026
Writeiq v3.10 - CSP wildcard fix + NAPLAN tolerance for mixed roster shapes
Fix
- Removed an invalid CSP wildcard that browsers were silently dropping: the previous CSP listed
https://*-assets.i.posthog.com which uses a wildcard in the middle of the host - that's not valid CSP syntax (wildcards can only be a leading subdomain like *.posthog.com). Browsers were dropping the source and falling back to script-src, which produced cascading "blocked script" errors for jsDelivr CDN scripts. Replaced with explicit us-assets.i.posthog.com and eu-assets.i.posthog.com hosts.
- NAPLAN readiness panel now appears for any roster shape: the previous version only matched numeric year fields. Schools with rosters using "Year 7", "yr7", "Y7" or other string forms weren't seeing the panel. Year extraction now uses a digit-extraction regex that handles every common form. Hot-spot classes and year-over-year sections inherit the same tolerance.
- Smoke test pins the wildcard bug class: a new test scans every CSP directive in netlify.toml and asserts each wildcard is exactly
*.<rest> form. Catches the bug class before deploy. Same test added for tolerant year parsing - if anyone reverts the regex back to a strict Number() check, the build breaks.
1 May 2026
Writeiq v3.9 - School Year View, year-over-year, cross-year-level snapshot
New
- School Year View toggle on the leader dashboard: a new "This task / Year view" switch above the leadership tabs. Year view aggregates every marked submission across the academic year, regardless of which marking event it came from. The whole-school literacy strategy surface promised on the Writeiq homepage now lives inside the dashboard. Mixed-genre years pick the most-represented genre and surface a notice; rubric consistency is preserved.
- Year-over-year band distributions in Growth & Tracking: for each year level with data in 2+ calendar years, the dashboard now compares Consolidating-or-above percentages year by year. "Year 8 in 2024 was at 62%; Year 8 now is at 71% - +9pp improvement at Consolidating-or-above since 2024." Schools without prior-year data see an honest empty state explaining the view fills in over time.
- Cross-year-level snapshot: for the current academic year, a single horizontal-bar view of Consolidating-or-above % across every year level the school has marked submissions for. Year 3 to Year 12 in one panel - useful for K-12 schools and for any leader running whole-school literacy strategy meetings. Brand framing made explicit: a Year 4 Consolidating and a Year 11 Consolidating are equivalent in scaffolding readiness, not in sentence complexity.
- All three views reuse existing rendering primitives: the band cards, criterion bars, and class comparison logic from the per-task view continue to render correctly when the data set is replaced with the year aggregate. No parallel codepath, no maintenance debt.
1 May 2026
Writeiq v3.8 - The CSP fix on the app subdomain (this time, properly)
Fix
- Resolved (properly) the persistent CSP errors on app.writeiq.com.au: Supabase, JSZip, pdf-lib, qrcodejs and the Sentry Replay worker were all still being blocked despite the fix attempted last night. Root cause: a CSP defined in
netlify.toml at the repo root takes precedence over a per-site _headers file at deploy time. The previous fix wrote _headers for the app subdomain but the toml baseline overrode it. This pass extends the toml baseline itself - additive grants (cdn.jsdelivr.net, *.supabase.co, wss://, worker-src 'self' blob:, explicit script-src-elem) that the marketing site doesn't use but the app needs. Marketing security is unchanged; the writeiq app now gets the CSP it requires.
- Smoke test pins the actual root cause: a new test reads the netlify.toml
/* block and asserts each required directive is present. Any future regression to a tighter baseline will break the build before it ships.
1 May 2026
Writeiq v3.7 - Phase 3H Tier 1: leadership analytics enhanced
NewImproved
- Hot-spot classes callout on the leadership Overview: the dashboard now surfaces the top 3 class-by-criterion combinations where a class sits 10+ percentage points below the cohort average. Each hot-spot is a one-sentence recommendation: "Year 9C is 18 points below the cohort on Cohesion. Consider a co-teaching cycle or targeted PL session." Click a hot-spot to drill into the class roster.
- Per-teacher moderation pattern in Score Adjustments: the leader pane now groups score adjustments by teacher and surfaces a one-line summary per teacher - count, direction (raises vs lowers), most-frequently adjusted criterion, and a pattern label (Mostly raises / Mostly lowers / Mixed). The framing is calibration-not-error: directly useful for year-level peer moderation cycles, designed to be read constructively.
- NAPLAN-correlated readiness panel - leader and class views: for cohorts spanning Years 3, 5, 7, or 9, the leadership Overview now shows the percentage of students at Consolidating-or-above on each IWAF criterion that maps to the publicly-published NAPLAN writing rubric. The same panel appears on the class-level teacher analytics. Independent of ACARA; correlation only, not endorsement.
- Structured score-adjustment audit: teacher overrides now log structured fields (teacher, criterion, fromScore, toScore, direction) alongside the legacy message string. Powers the per-teacher rollup; also makes the audit log queryable for future calibration analytics.
1 May 2026
Writeiq v3.6 - Class Links: a cleaner way for students to enter
NewImproved
- Class Links replace the typed class code as the primary distribution method: admins can now mint a unique link per class - print it on a worksheet, paste it into Compass, embed it as a QR code on a classroom wall - and students click straight into Writeiq with no code to type. The link itself is the credential, signed and scoped to your school.
- Pen-test clean by design: nothing about class access persists in browser storage. Visiting a class link drops a tab-bound, httpOnly session cookie that lives for 4 hours; the URL is the only credential. Same security model as a password-reset magic link. (This replaces the localStorage attempt from earlier - it was the wrong shape; this is the right shape.)
- Built-in rotation: end of year, suspected sharing, term roll-over - one click rotates every link minted for your school. Old links stop working immediately. Mint fresh ones from the same panel.
- QR code reveal: every minted link can flip into a QR code for printing or projection - useful for primary classrooms where students do not type URLs.
- Class code typed entry stays: as a fallback for fresh devices or paper-form entry, the existing class-code gate continues to work. The Class Link is the recommended path; the class code is still there if a student needs it.
- SSO-ready: schools with Microsoft or Google identity providers can have their SSO redirect to the class link after sign-in. The link short-circuits the gate; SSO handles identity. Wiring on the SSO side is a separate setup; the slug system itself is now in place.
30 April 2026
Writeiq v3.5 - CSP fix on the app, IWAF positioning, brand voice
FixImproved
- App CSP fix: resolved the Content Security Policy errors on app.writeiq.com.au that were blocking jsDelivr CDN scripts (Supabase, JSZip, pdf-lib, qrcodejs) and the Sentry Replay worker. The app subdomain now serves with the correct CSP including
cdn.jsdelivr.net in script-src and script-src-elem, and worker-src 'self' blob: for Sentry Replay. The Supabase init failure ("lc is not a function") was a downstream effect of the CDN block; that is also resolved.
- IWAF positioning sharpened: the framework is now consistently presented as developed by trained assessors and leading educators across Australia's government and independent school sectors - institutional work, not the work of any single author. Updated on the IWAF explainer page and the research page.
- Brand voice tightened: hyphenated compounds with the previously-flagged abbreviation are now on the explicit forbidden-terms list. Client-facing copy uses "intelligent assessment" or specific descriptors instead. Smoke tests now catch every variant at CI - any future regression breaks the build.
- Roadmap clean-up: Phase 0 auto-recovery rewrite confirmed complete (shipped Pass 9.22.0 - the recovery primitive lives in
wiq-scan-recovery.js as a single module). Principal and leadership roles are unified - the existing Leader panel IS the principal view; no separate dashboard build planned.
- Persistent student access: the better solution is being designed - slug-based URLs and optional SSO bypass for schools that have it, in a way that does not trip a pen test on shared school devices. An interim attempt earlier today (localStorage with an opt-out toggle) was reverted; coming in a near-term pass.
30 April 2026
Writeiq v3.4 - NAPLAN correlation, onboarding, triple-persona showcase
NewImproved
- NAPLAN writing correlation page: a new page at writeiq.com.au/naplan explaining how the IWAF framework correlates with the publicly-published NAPLAN writing rubric used in Years 3, 5, 7 and 9. Independent of ACARA. Frames Writeiq as supporting classroom preparation for the national writing tasks, never as a NAPLAN replacement or endorsement. Explicit "what we do not claim" boundaries set up front.
- School onboarding page: writeiq.com.au/onboard walks school leaders and IT teams through the five steps from licence activation to first marking event - typically 90 minutes end to end. Network whitelisting guidance for school content filters, role-by-role responsibilities, and a two-week intensive support window for new schools.
- Triple-persona showcase on the homepage: Writeiq produces three audience-specific outputs from a single marking pass - student feedback, teacher marking summary, leader cohort rollup - and the homepage now shows this structurally on the writeiq.com.au homepage so principals see it above the use-cases grid.
- Year 3 to Year 12 differentiator section: new section showcasing whole-school continuity - one framework, banded for the year level the student is in, from primary classroom through to VCE. Quick-link cards to NAPLAN, VCE library, research, and onboarding.
- Branding policy compliance: client-facing copy on the marketing site now uses "intelligent assessment" and "model training" terminology, replacing earlier abbreviations. Aligns with the Australian Framework for Generative AI in Schools and Edsthetic's brand voice. Policy citations and precise security warnings (where the term is meaningful for staff training) are retained where appropriate.
30 April 2026
Writeiq v3.3 - IWAF framework on the homepage & /research
NewImproved
- The IWAF methodology surfaced on the homepage: a new section on writeiq.com.au presents the seven dimensions of the Integrated Writing Assessment Framework as cards - Voice, Structure, Cohesion, Vocabulary, Sentence Craft, Text Structure, Conventions - so school leaders evaluating the platform can see the methodology, not just the marketing.
- Trust signals above the fold: Australian-hosted, no model training, Privacy Act 1988 compliance, NCCD-aware - these were buried in the footer; they now sit directly under the hero where principals and IT leads scanning for safety signals will find them.
- New /research page: writeiq.com.au/research sets out the IWAF methodology, the five bodies of theoretical research the framework builds on (Bloom mastery learning, Hattie & Timperley feedback, Pearson & Gallagher GRR, Rosenshine principles, Sydney School genre pedagogy), the trial programme (Ballarat pilot, ACER Body of Work standard-setting), and an honest "what we do and do not claim" section. Reference list with seven load-bearing citations.
- Navigation refreshed: the writeiq.html nav now includes IWAF (anchor to the new framework section) and Research (link to the new page) alongside the existing entries.
30 April 2026
Writeiq v3.2 - Dashboard polish & bug fixes
ImprovedFixed
- Family Report no longer dumps you to the dashboard: opening a Family Report from inside an individual student's result view, then closing it, now returns you to that student view. Previously the student modal was being closed when the report opened.
- Single "Print Class Reports" button replaces "Family Reports": the toolbar now has one batch-print entry point with a Family / Student / Both toggle, removing the confusion between two near-identical print actions. The student option produces the new student-facing feedback document.
- Conference renamed to "Student Report" with refreshed format: the per-student report (action bar inside any marked submission) is now a printable feedback document addressed directly to the student, not a teacher dialogue script. Same underlying analysis - strengths, priority, goal - reframed as second-person feedback the student keeps. Print button at the bottom; no auto-print on open.
- Action bar simplified: Print Report removed (Family Report and Student Report cover its purpose); action bar order is now Family Report · Student Report · Portfolio.
- Upload scans moved to the action toolbar: it is an action you take, not a navigation destination, so it now sits next to Mark all and Manage PINs rather than alongside the Submissions / Practice tabs.
- Submissions table Refresh promoted: the Refresh control now sits on the LEFT of the meta row with proper button styling (border, background) so it reads as an actionable control. The "Showing X students" summary moves to the right.
- Class Snapshot decluttered: the "9 of 15 students below 56% in X" priority callout is now part of the footer summary sentence above the snapshot, not duplicated as a separate gold-accent box inside it.
- Feedback section labels tidied: "For the student - Next Teaching Step" and "For the teacher - Marking Summary" are now just "For the student" and "For the teacher". The teacher box no longer has a double border.
- Toolbar / nav alignment fixed: the action toolbar and the navigation tab bar below it now share the same left edge, removing a subtle visual misalignment.
30 April 2026
Writeiq v3.1 - VCE English Library & dedicated domain
NewImprovedFixed
- Dedicated writeiq.com.au domain: The Writeiq marketing site now lives at writeiq.com.au and the app at app.writeiq.com.au. Old
edsthetic.com.au/apps/writeiq/* links continue to work via permanent redirects to the new app domain. Schools can now whitelist a single product domain on their network filter rather than a path on a corporate hub.
- VCE English Text Library: All 47 texts on the VCAA English text list for 2026 and 2027 are now in a free, searchable library at /pages/library-texts.html. Each card includes themes, authorial intent, critical context, mentor craft notes, sample prompts, and the IWAF criteria each text is best suited to teach. Draft pedagogical content under ongoing expert review.
- Lesson generator grounded in VCE texts: When teachers generate a Year 11 or 12 lesson, a VCE text dropdown lets them pick any text from the library; the lesson is then automatically grounded in that specific work. List 1 set texts produce essay-anchored lessons (Section A style); List 2 mentor texts produce creative-response lessons (Section B style) under the chosen framework.
- Highlighted-assessment view for every criterion: The marker now produces a verbatim quote of evidence for every criterion it scores - voice, structure, ideas, vocabulary, cohesion, sentence craft - not just spelling and punctuation. Click any pill in the result modal and the words in the student's piece that earned that score are highlighted in context.
- VCE Library available inside Writeiq: The same 47-text library is accessible from inside the app for teachers planning Year 11–12 work, alongside the existing Years 3–10 frameworks.
- Help centre & changelog updated: New "VCE English (Years 11–12)" category in the help centre covers using the library, the highlighted view, and grounded lesson generation.
28 April 2026
Writeiq v2.6 - Polish & pilot-readiness
NewImprovedFixed
- Bulk actions on submissions: Tick the new checkbox column to select submissions, then delete, reassign class, re-mark, or export to PDF in one action. Selection persists across pagination and class switches.
- Class-bundle PDF export: Export selected submissions as a single PDF with one student report per page — replaces the prior behaviour of opening N separate print dialogs. Pending (unmarked) submissions are skipped automatically with a clear notice.
- Leadership PDF export: New “Export PDF” button on the Leadership panel and Admin Leadership view. Captures the current filtered view and produces a single board-ready document with cover header, school name, date, and active filter context.
- Cross-submission keyboard navigation in marking modal: ← and → arrows step between submissions in the active class scope without closing and reopening the modal. New prev/next buttons in the modal header for discoverability. Boundary-aware with disabled state at first/last.
- Score-override keyboard shortcuts: Enter to save, Esc to cancel-without-closing. First input auto-focuses on open. Tab and arrow keys navigate fields natively.
- Marking-screen mobile responsive: Score override panel, criterion rows, teacher dashboard filters, leadership panel, V4 stats and chips, score cards (10→5→3→2 across breakpoints), onboarding wizard, and student writing area now all scale cleanly down to 480px viewports.
- Lesson plan preview: After generating a lesson plan, the result page now includes an expandable preview of all sections (warm-up, I Do, We Do, You Do, debrief) so you can verify the lesson before downloading the PPTX.
- Portfolio search (student): Students with 3+ pieces in their portfolio now have a search input above the genre pills. Searches both task names and writing text. Composes with the active genre filter.
- Drafts panel rebuilt: Now surfaces three kinds of draft activity (single-draft submissions, multi-submission piece chains, and re-submissions of the same task). Class scoping and active-task scoping fixed so the Drafts tab respects whichever pill the teacher has selected.
- Tooltips on submissions table: Every column header and filter label now has a helpful tooltip. Band threshold ranges (Emerging <31% · Developing 31–55% · Consolidating 56–79% · Extending ≥80%) shown inline in the band dropdown.
- Empty-state illustrations: Six on-brand illustrations now appear in empty states (no submissions yet, no task history, no lesson plans, no draft activity, no search matches, dashboard load error) replacing generic icons.
- Loading skeletons: Leadership panel and drafts panel now show structured shimmer skeletons mimicking the page shape while data loads, instead of generic spinners. Respects prefers-reduced-motion.
- Marketing site footer parity: Pricing page and FAQ page now have the canonical 4-column footer with Acknowledgement of Country, matching every other public page.
- Band threshold consistency fix: Removed all stale “40–59%” / “60–79%” band threshold references from the leadership panel, admin analytics, submissions table tooltip, and Drafts panel comments. Canonical thresholds (31% / 56% / 80%) now used everywhere.
- Genre/Submitted column spacing: Genre column widened so the “Persuasive” badge no longer runs into the next column’s date.
- Tooltip clipping fix: Column header tooltips now point downward (was previously clipped by the table’s overflow-x:auto wrapper).
- Inline class picker for bulk reassign: Replaces the previous browser prompt() with a small inline modal containing a class dropdown plus a free-text option for classes outside the teacher’s roster.
- Active-pill toggle in portfolio: Clicking the already-active genre pill now toggles back to “All” so students see visible feedback even when their portfolio is single-genre.
- Search input fix: The portfolio search input was being silently overwritten by the genre-pill renderer. Now appears reliably for any student with 3+ pieces.
- Scan: multi-page PDF for one student stays together. Previously, uploading a multi-page PDF of one student’s long-form work split it into separate “students” (one per page). Page-splitting now only happens in Class batch mode, where one PDF page per student is the intended pattern. Mode toggle labels and drop-zone copy updated to make the distinction explicit.
- Scan: clearer success state on Assign & Mark. The row state after assigning a student name is now a large coloured panel with the student’s name in bold and a check badge, plus a confirmation toast. Previously the small green text replacement was easily mistaken for the row disappearing.
11 April 2026
Writeiq v2.5 - Commercial Readiness
NewNewImprovedFixed
- Rules Engine & Pre-Score: Students now see instant provisional results (word count, sentence structure, punctuation, vocabulary) within milliseconds of submitting, while the full criterion assessment processes in the background.
- Anomaly Detection: A built-in rules engine compares mechanical text analysis with the full assessment. Submissions where scores diverge significantly are flagged with an amber “Review” badge on the teacher dashboard, with full details in the submission modal.
- Resilience fallback: If the primary scoring engine is congested, Writeiq automatically retries twice, then falls back to a faster model as a last resort. Fallback submissions are tagged with a “Fallback” badge so teachers know.
- Offline Mode: When the scoring service is unavailable, students see provisional mechanical-criteria scores with clear messaging that the full result will process automatically when the service recovers.
- 6 Writing Types Everywhere: All dropdowns and filters now include all six writing types (Narrative, Persuasive, Analytical, Primary Narrative, Recount, Primary Persuasive). Previously, some selectors only showed 2–3 types.
- Curriculum Framework Fix: Leadership and teacher dashboards now correctly show only the selected framework codes. Previously, both VC2 and AC9 codes were shown regardless of the school’s framework selection.
- Primary Years 3–6: Student roster and filters now include Years 3–6 (previously only 7–12).
- Escape Key: All modals can now be closed with the Escape key.
- Inline Event Handlers: All remaining inline onclick/onchange handlers have been replaced with delegated event handling for consistency and CSP compliance.
- Console Privacy: Student names are no longer logged to the browser console in any code path.
- Branding: All user-facing references now correctly use “Writeiq” (not “WriteIQ”). Product copy aligned with the Australian Framework for Generative AI in Schools.
7 April 2026
Writeiq v3.0 - IWAF 3.0 launch
NewImprovedFixed
- Loading States: Dashboard spinner while data loads. Empty states with icons and helpful hints for all panels.
- Responsive Tables: Submission and staff tables now scroll horizontally on mobile without breaking layout.
- Intervention Tracking: Students flagged as Emerging across 2+ tasks are highlighted in both teacher and leadership views.
- Button Consistency: All destructive actions (delete, clear, remove) now use the correct red button class.
- Student Goals: Growth tracking in the My Writing portfolio now shows personalised goal prompts based on first-to-latest score comparison.
- Genre Labels: All hardcoded “Narrative/Persuasive” ternaries replaced with the typeLabel() helper that covers all 6 writing types.
- Workload Signals: Teacher dashboard shows submission volume and marking queue depth.
March 2026
Writeiq v2.3 - Security Audit
FixedImproved
- 20 security fixes applied: client-side bypasses removed, server-side admin PIN, JWT sessions, CORS locked, brute-force lockout, forced PIN change on defaults.
- Supabase RLS hardened: replaced open USING(true) policies with SECURITY DEFINER function.
- SSO for Google Workspace and Microsoft 365.
- GRR lesson plan generator deployed (streaming, PPTX export).
- Writeiq Vision (handwriting scan) live in production.
February 2026
Writeiq v2.0 - Supabase Migration
New
- Full migration from Google Apps Script to Supabase backend.
- Multi-school architecture with per-school data isolation.
- Admin panel with licence management, diagnostics, and renewals.
- 9 curriculum frameworks: VC2, AC9, IB MYP, IB PYP, VCE, NESA, QCAA, SCSA, UK NC.
- Primary writing modes: Primary Narrative, Recount, Primary Persuasive (Years 3–6).