Skip to content

Releases: psd401/secure-test

SecureTest v1.6.3

Choose a tag to compare

@james-cantonwine james-cantonwine released this 13 Oct 23:13

SecureTest v1.6.3

Built from b8e06aa74f29 on main. Requires macOS 26.4 or later. Notarized and stapled — the first notarized release since v1.3.5; a browser download installs without a Gatekeeper block.

What changed since v1.6.2

  • Word count without a limit. When a teacher ticks "Show students a word count" on an essay with no maximum, students see a running "n words" under the box (plain and formatted essays alike). It is never flagged as over. An essay with a maximum still shows "n / max words".
  • An over-limit count is red. Past an essay's maximum the count ("52 / 50 words") now shows in red and bold under every contrast setting. The text is never cut. It had been styled like any other count since v1.0.0.
  • One product name. The app, its menus, the About panel, the quit confirmation and every message now say "SecureTest". The app's file name, bundle id and managed-preferences domain are unchanged.

Known issues

  • VoiceOver does not read an essay's word count when the student arrives in the formatted (rich-text) box. The count is on screen; a screen-reader user can still read it with the VoiceOver cursor. Present since v1.6.0; a fix is planned.
  • Turn VoiceOver on before joining a test. Turning it on during a secure session (Cmd-F5) restarted the test Mac in this release's hand-run; the cause is under investigation and is not specific to this version.

Hand-run before release: the v1.6.3 rows on a Debug build under simulated lockdown, then this commit's Release build in a real Automatic Assessment Configuration session against the live server, with v1.6.2 checked against the same test first. See client/MANUAL-CHECKS.md, "Word count without a limit" and "One product name".

Requires configuration profile

The app reads its configuration from managed preferences; a pkg alone launches into "This Mac isn't set up for SecureTest yet." The profile already scoped for earlier releases carries over unchanged (keys did not change).

Preference domain Key Type Value
net.psd401.securetest.client ServerURL string https://<origin>
net.psd401.securetest.client GoogleClientID string <native-oauth-client-id>

SecureTest v1.6.2

Choose a tag to compare

@james-cantonwine james-cantonwine released this 09 Oct 16:00

Secure Test v1.6.2

Built from c179cfeed217 on main. Requires macOS 26.4 or later.

Not yet notarized — install through Jamf. Apple's notary service is still refusing submissions for the district team (the agreement issue since v1.4.0). The pkg and app are Developer ID-signed with the hardened runtime, which is all a Jamf / AutoPkg install needs. A copy downloaded in a browser and opened by hand will be blocked by Gatekeeper until the notarization goes through.

What changed since v1.6.1 (from beta field data, 2026-10-08)

  • Leaving a test asks first. End secure session, Cmd-E, Cmd-Q and the window's close button now ask "End the secure session?" / "Quit Secure Test?" with Keep working as the default, while a test is on screen and not handed in. Students had been using the exit as a "back" button. A logout, restart, shutdown or MDM quit is never held up.
  • An expired sign-in goes back to Sign in. After about 8 hours the sign-in expires; the app used to show "No test list for this account." / "Could not join" with no way forward. It now says "Your sign-in has expired. Sign in again." on the sign-in card.
  • Clearer secure-start failures. "Couldn't start a secure session" now tells the student to wait a minute and open the test again from Your tests, and the teacher-side record carries the Mac's macOS version and model.
  • Hardening. Stricter checks on everything the test page sends to the app (item ids, types, answer lengths, drawings, read-aloud), no camera or microphone prompts from the page, and the app records sleep / wake during a secure session's end to diagnose sessions that end late.

Hand-run before release: the v1.6.2 rows under simulated lockdown, then this commit's Release build in a real Automatic Assessment Configuration session against the live server (start, Cmd-Q confirm inside the lock → Quit, Resume, hand in; scores and answers stored). See client/MANUAL-CHECKS.md, the v1.6.2 sections.

Requires configuration profile

The app reads its configuration from managed preferences; a pkg alone launches into "This Mac isn't set up for Secure Test yet." The profile already scoped for earlier releases carries over unchanged (keys did not change).

Preference domain Key Type Value
net.psd401.securetest.client ServerURL string https://<origin>
net.psd401.securetest.client GoogleClientID string <native-oauth-client-id>

SecureTest v1.6.1

Choose a tag to compare

@james-cantonwine james-cantonwine released this 08 Oct 18:09

Secure Test v1.6.1

Built from 703a18f2914 on main. Requires macOS 26.4 or later.

Not yet notarized — install through Jamf. Apple's notary service is still refusing submissions for the district team (the agreement issue since v1.4.0). The pkg and app are Developer ID-signed with the hardened runtime, which is all a Jamf / AutoPkg install needs. A copy downloaded in a browser and opened by hand will be blocked by Gatekeeper until the notarization goes through.

What changed since v1.6.0 (two fixes from beta reports on 2026-10-08)

  • Slow Macs can start a test. On some Macs the secure session takes longer than 20 seconds to start; the app used to give up at 20 seconds and send the student back to Your tests ("Couldn't start a secure session"), over and over. It now waits up to 60 seconds, and after 20 seconds the screen says "Still starting the secure session… This Mac is taking longer than usual." The test still opens only once the Mac is locked.
  • After handing in, the test closes. When instant feedback is Off, the test used to stay on screen — still editable, on an unlocked Mac — after the student handed in, and anything typed after that was lost and showed "Needs attention" on the teacher's Monitor. The test is now replaced by a "Handed in — Your answers are saved" page with a Done button, writes after a hand-in are ignored, and the teacher no longer sees a false "Needs attention". Instant feedback On is unchanged.

Hand-run before release: the hand-in rows under simulated lockdown (feedback Off, Done, typing after hand-in, feedback On unchanged), then this exact build in a real Automatic Assessment Configuration session against the live server (normal start, hand-in, the "Handed in" page after the lock lifted). See client/MANUAL-CHECKS.md, "SS-1" and "RD-1".

Requires configuration profile

The app reads its configuration from managed preferences; a pkg alone launches into "This Mac isn't set up for Secure Test yet." The profile already scoped for earlier releases carries over unchanged (keys did not change).

Preference domain Key Type Value
net.psd401.securetest.client ServerURL string https://<origin>
net.psd401.securetest.client GoogleClientID string <native-oauth-client-id>

SecureTest v1.6.0

Choose a tag to compare

@james-cantonwine james-cantonwine released this 08 Oct 02:49

Secure Test v1.6.0

Built from fdba1d9 on main. Requires macOS 26.4 or later.

Not yet notarized — install through Jamf. Apple's notary service is still refusing submissions for the district team (the agreement issue since v1.4.0). The pkg and app are Developer ID-signed with the hardened runtime, which is all a Jamf / AutoPkg install needs. A copy downloaded in a browser and opened by hand will be blocked by Gatekeeper until the notarization goes through.

Update required for fill-in-the-blank tests. The server refuses a test containing a fill-in-the-blank question to any client older than 1.6.0, before the Mac locks; an older client shows its generic "This test could not be opened. Could not join. Tell your teacher." Every other test still works on older versions. From 1.6.0 on, a future refusal of this kind tells the student to update Secure Test in Self Service.

What changed since v1.5.0

  • Fill in the blank. A sentence with blanks inside it: a dropdown blank (the student picks one option) or a typed blank. Dropdown options keep the teacher's bold, italics and math. Bold or italics around a blank render correctly. Posting, resume, keyboard, read-aloud, VoiceOver and the contrast / zoom / font accommodations all work as for other questions.
  • Formatting in essays. When the teacher allows it for an essay, the student gets a toolbar — Bold, Italic, Underline, bulleted and numbered lists, Indent first line, Undo, Redo — with the usual shortcuts (Cmd-B / I / U, Shift-Cmd-8 / 7, Cmd-] / Cmd-[). Read-aloud highlights each word in the formatted answer; dictation inserts at the caret.
  • Undo and redo in every text field (Cmd-Z / Shift-Cmd-Z): essays, short answers, table cells and typed blanks.
  • "Time ran out — ask your teacher" on Your tests beside a disabled Resume, when an attempt's time limit has passed; it clears when the teacher adjusts the time.
  • The typed blank takes the student's contrast set.

Hand-run before release: real Automatic Assessment Configuration sessions on 2026-10-07 — fill in the blank and formatted essays (format keys, lists, indent, undo, paste refused, Tab, spell check, read-aloud, dictation, VoiceOver, hand-in), then this exact build against the live server (formatted dropdowns picked by keyboard; Indent after a numbered list). Contrast / zoom / font and the "Time ran out" row under simulated lockdown. See client/MANUAL-CHECKS.md, "Fill in the blank (v1.6.0)", "FB-S2 + FB-S1", "Formatting in essays" and "U-12 + U-15".

Requires configuration profile

The app reads its configuration from managed preferences; a pkg alone launches into "This Mac isn't set up for Secure Test yet." The profile already scoped for earlier releases carries over unchanged (keys did not change).

Preference domain Key Type Value
net.psd401.securetest.client ServerURL string https://<origin>
net.psd401.securetest.client GoogleClientID string <native-oauth-client-id>

SecureTest v1.5.0

Choose a tag to compare

@james-cantonwine james-cantonwine released this 05 Oct 21:18

Secure Test v1.5.0

Built from 1bb469a on main. Requires macOS 26.4 or later.

Not yet notarized — install through Jamf. Apple's notary service is still refusing submissions for the district team (the agreement issue from v1.4.0). The pkg and app are Developer ID-signed with the hardened runtime, which is all a Jamf / AutoPkg install needs. A copy downloaded in a browser and opened by hand will be blocked by Gatekeeper until the notarization goes through; this release will be notarized as soon as Apple's service accepts it, without replacing the file.

What changed since v1.4.0

  • Instant feedback after hand-in. When the teacher turns it on for an assessment, the student sees their results after the secure session has ended — never while the Mac is locked: their score, which questions were right or not, or the correct answers for the ones they missed, depending on the teacher's choice. Done (or Return) goes back to Your tests; read-aloud, contrast, zoom and font accommodations apply to the page.
  • Time already run out. A student resuming a test whose time limit has already passed no longer starts a secure session that ends at once. They go back to Your tests with "Your time for this test has run out. Your answers are saved. Ask your teacher to adjust your time if you need to keep working." (Before, a student could see "Time is up." on every Resume.)
  • The app now names its version on every request to the server, so the server can send the "time has run out" answer only to clients that understand it.
  • A student who resumes in the last seconds after their time ran out no longer sees the questions flash on screen before the session ends.

Hand-run before release: the instant feedback rows under simulated lockdown (2026-10-03), and a smoke test of this build in real Automatic Assessment Configuration sessions against the live server (2026-10-05) — the time-already-run-out paths, the results page appearing only after the Mac unlocks (including when the student presses Back to your tests while it is unlocking), and no questions drawn on a resume in the last seconds of the grace period. See client/MANUAL-CHECKS.md, "EX-2" and "v1.5.0 smoke test fixes".

Requires configuration profile

The app reads its configuration from managed preferences; a pkg alone launches into "This Mac isn't set up for Secure Test yet." The profile already scoped for earlier releases carries over unchanged (keys did not change).

Preference domain Key Type Value
net.psd401.securetest.client ServerURL string https://<origin>
net.psd401.securetest.client GoogleClientID string <native-oauth-client-id>

SecureTest v1.4.0

Choose a tag to compare

@james-cantonwine james-cantonwine released this 02 Oct 00:13

Secure Test v1.4.0

Built from 5dd8d32 on main. Requires macOS 26.4 or later.

Not yet notarized — install through Jamf. Apple's notary service is refusing submissions for the district team (an agreement issue Apple is investigating). The pkg and app are Developer ID-signed with the hardened runtime, which is all a Jamf / AutoPkg install needs. A copy downloaded in a browser and opened by hand will be blocked by Gatekeeper until the notarization goes through; this release will be notarized as soon as Apple's service accepts it, without replacing the file.

What changed since v1.3.5

  • Read-aloud for test content. For students granted Text-to-Speech, a Speak button reads each question (with its answer choices) and each passage or source, with Pause / Resume / Stop, three speeds, and the current word highlighted. Math is read as words.
  • Read my answer. For students granted Text-to-Speech (Student Responses), a button under each typed answer reads it back, highlighting each word in the answer.
  • Speech-to-text. For students granted Speech-to-Text, a "Speak my answer" button under short-text and essay answers types what the student says. Recognition runs on the Mac; no audio is recorded or sent. English only; not available in tables yet.
  • Microphone permission. A student granted speech-to-text is asked for microphone and speech-recognition permission the first time on each Mac, before the test locks. If they decline, the test still opens, the student sees "Speech-to-text isn't available on this Mac — tell your teacher.", and the teacher sees a note on the Monitor. Students without the grant never see a prompt.
  • No minimize during a test. The yellow window button is disabled and a title-bar double-click no longer minimizes the window (a minimized test window could not be brought back inside a locked session).
  • New entitlement: com.apple.security.device.audio-input (microphone), used only for granted students.

Hand-run before release: the speech-tools and MIN-1 rows in client/MANUAL-CHECKS.md, including real Automatic Assessment Configuration sessions on a Release build (2026-10-01).

Requires configuration profile

The app reads its configuration from managed preferences; a pkg alone launches into "This Mac isn't set up for Secure Test yet." The profile already scoped for earlier releases carries over unchanged (keys did not change).

Preference domain Key Type Value
net.psd401.securetest.client ServerURL string https://<origin>
net.psd401.securetest.client GoogleClientID string <native-oauth-client-id>

SecureTest v1.3.5

Choose a tag to compare

@james-cantonwine james-cantonwine released this 24 Sep 23:54

Secure Test v1.3.5

Built from 0082272 on main. Requires macOS 26.4 or later.

What changed since v1.3.4

  • Time changes reach the student right away. When the teacher moves a student's deadline (earlier or later), the running countdown restarts to the new time with a notice. When the teacher chooses No time limit, the countdown disappears within a few seconds with "Your teacher removed the time limit." and the session no longer ends at the old deadline.
  • Keyboard reach. Tab reaches every control, including hotspot regions and the Math keys toggle, with macOS Keyboard navigation turned off (the fleet default). Radio groups are one Tab stop with arrow keys.
  • VoiceOver and math. VoiceOver no longer reads the raw LaTeX behind rendered math.
  • Secure start and teardown. A refused or interrupted secure start shows one sheet, not two; the lockdown teardown waits longer before giving up; sign-in ignores a cancelled request and logs failures without the full URL.
  • Practice sittings. A teacher practising on their own Mac sees "Practice — only you" and staff-appropriate wording.

Hand-run before release: the v1.3.5 rows in client/MANUAL-CHECKS.md, including real Automatic Assessment Configuration sessions on a Release build (2026-09-22 to 2026-09-24).

Requires configuration profile

The app reads its configuration from managed preferences; a pkg alone launches into "This Mac isn't set up for Secure Test yet." The profile already scoped for v1.3.0–v1.3.4 carries over unchanged (keys did not change).

Preference domain Key Type Value
net.psd401.securetest.client ServerURL string https://<origin>
net.psd401.securetest.client GoogleClientID string <native-oauth-client-id>

SecureTest v1.3.4

Choose a tag to compare

@james-cantonwine james-cantonwine released this 22 Sep 00:39

Secure Test v1.3.4

Built from 2168089 on main. Requires macOS 26.4 or later.

What changed since v1.3.3

  • Text autosave. Essay, short-answer, table cells and the inline outline now save 5 seconds after the student stops typing (30-second ceiling while typing continues), so a crash or a closed session loses at most half a minute of typing and the teacher's Monitor sees answers without waiting for the student to leave the field.
  • Deferred saves. A save that arrives after the teacher closed the session is held on the Mac and sent the next time the student resumes, instead of being dropped.
  • Join wording. A student whose attempt was handed in during an earlier session sees "You already handed this test in during an earlier session…" rather than the same-session message.
  • Accessibility. The drawing toolbar is a single Tab stop with arrow-key navigation, matching the math keypad.
  • New app icon.

Hand-run before release: 15 of 17 client rows on this build, including two real Automatic Assessment Configuration sessions for the deferred-save path (client/MANUAL-CHECKS.md, 2026-09-21).

Requires configuration profile

The app reads its configuration from managed preferences; a pkg alone launches into "This Mac isn't set up for Secure Test yet." The profile already scoped for v1.3.0–v1.3.3 carries over unchanged (keys did not change).

Preference domain Key Type Value
net.psd401.securetest.client ServerURL string https://<origin>
net.psd401.securetest.client GoogleClientID string <native-oauth-client-id>

SecureTest v1.3.3

Choose a tag to compare

@james-cantonwine james-cantonwine released this 15 Sep 23:38

Built from f2cc2e5 on main. Requires the design tool deployed 2026-09-15 (task revision 34, migration 0036) — an older server leaves the new behaviour inert (the poll field is absent and reads as "open").

What changed since v1.3.2

  • Close session ends the sitting. When a teacher closes the test session, or it runs out, the student's Mac ends the secure session within about five seconds and returns to Your tests with the sheet "Your teacher ended the test session. Your answers are saved." The attempt is NOT handed in: it stays in progress and resumable in a later session; Hand in remains the teacher's. The exit is written to the per-student timeline as sitting_closed. A write refused by the server for the same reason (409 sitting_closed) takes the same path and is not reported as an error.
  • App category set to Education (LSApplicationCategoryType).
  • Hygiene: spooled answers older than 24 hours are purged at launch and on returning home; the assessment web view uses a non-persistent data store; errors.log is capped at 500 lines / 512 KB.

Deployment target macOS 26.4 (unchanged since v1.3.1; still unverified in a real session on a 26.4 Mac).

Requires configuration profile

A .pkg alone is not a working install. Scope a com.apple.ManagedClient.preferences profile to the same Macs (the v1.3.0 profile carries over unchanged — no keys changed in this release):

Preference domain Key Value
net.psd401.securetest.client ServerURL https://<origin>
net.psd401.securetest.client GoogleClientID <native-google-client-id>

SecureTest v1.3.2

Choose a tag to compare

@james-cantonwine james-cantonwine released this 15 Sep 18:24

What changed

  • Secure sessions no longer end themselves at 10 minutes. A development-only timer was live in the shipped app and ended every real session 600 s after it began, then left the test on screen with a "Stay here" button. Release builds no longer arm it; the teacher's time limit and the student's hand-in are what end a session.
  • The test is on screen only while the Mac is locked. After any session end other than a hand-in (End secure session, Cmd-E, time limit, an interruption) the app returns to "Your tests" by itself and tells the student; "Stay here" is gone. A session that fails to start, or never answers, shows "Couldn't start a secure session" instead of rendering the test unlocked. Whatever was being typed is saved before the screen changes.
  • Development switches are ignored in the shipped app. Simulated lockdown, the no-fullscreen and debug-crash switches, --token, File → Open Test Bundle… and --bundle exist only in Debug builds. A build without the assessment entitlement refuses to start a session rather than running unlocked. The configuration profile's ServerURL / GoogleClientID now outrank a launch argument or environment variable.
  • Sources beside the question. On a stimulus set shown "On its own page", a wide window now offers the same "Sources: Beside | Above" choice that side-by-side sets had; "Above" remains the default.

Requires configuration profile

A pkg alone is not a working install. Scope a com.apple.ManagedClient.preferences configuration profile to the same Macs as the pkg policy — the profile already deployed for v1.3.0 works unchanged. Skeleton: client/config-profile.example.mobileconfig; details in client/RELEASING.md "Configuration profile".

Preference domain Key Type Value
net.psd401.securetest.client ServerURL string the design-tool origin, https://<origin>
net.psd401.securetest.client GoogleClientID string the native (macOS-type) Google OAuth client id, <native-google-client-id>

Requires macOS 26.4 or later. Built from fa39945.