# Java Practice — developer review guide Prepared 8 September 2026. Alternative frontend prototypes for agreeing on Java training screens and workflows. **Java is never executed; AI responses are prepared samples.** ## Open the prototypes | Item | Internal-network URL | | --- | --- | | Review portal and downloads | http://192.168.0.100:8000/java-practice/ | | Astra | http://192.168.0.100:8000/java-practice/astra/ | | Fable / Claude | http://192.168.0.100:8000/java-practice/fable/ | Keep the host PC and Mongoose running. Use one address throughout a review; another internal device's access still needs confirmation. Network changes can change the address. ## Fictional accounts | Prototype | Username | Password | Purpose | | --- | --- | --- | --- | | Astra | `maya` | `Practice123!` | Main learner; fresh seed: 2/12 required passed | | Astra | `leo` | `Welcome123!` | Temporary credential; forced password change | | Astra | `nina` | `Practice123!` | Inactive; sign-in rejected | | Astra | `admin` | `Admin123!` | Administrator / instructor Alex | | Fable | `maria` | `maria-demo` | Main learner; fresh seed: 4/10 required passed | | Fable | `jose` | `jose-demo` | Prior errors, saved draft, awaiting question | | Fable | `lea` | `lea-demo` | No assigned learning path | | Fable | `rica` | `Temp-2026` | Temporary credential; forced password change | | Fable | `carlo` | `carlo-demo` | Inactive; sign-in rejected | | Fable | `admin` | `admin-demo` | Administrator / instructor | Use the sign-in form to test invalid credentials, inactivity, or temporary passwords. Enter fictional information only. ## Fifteen-minute review: Astra **Minutes 0–3 — learner and material.** Sign in as Maya. From **My Learning**, use **Continue learning** to open **Queue numbers**. Inspect **Problem**, **Learn** and its PHP comparison, then **Help**. Reveal all three hints. Edit the code, wait for **Draft saved locally**, refresh, and confirm the edit remains. **Minutes 3–6 — grading and history.** Open **Prototype controls** in the workspace footer. Keep **Automatic fixture match** selected. Choose **Load known failed variant**, confirm replacement, close the controls, and **Run examples**. Required progress must remain 2/12 and no submission is created. **Submit**, then inspect **Results**, **AI Feedback**, and **Submission History**. Load the known passed variant and submit: a fresh Maya moves to 3/12. Repeat the pass: still 3/12. Edit the draft and reopen the earlier submission to verify its code snapshot is unchanged. **Minutes 6–8 — questions.** In **Help**, write a short question, optionally link a submission, leave **Request an instructor reply** checked, and choose **Save question**. Try the suggested sample question separately to inspect the labeled prepared AI reply. **Minutes 8–15:** complete the shared administrator and failure checks below. The other expanded teaching samples are **Validate a task status** and **Count task statuses**. Astra seeds 18 published exercises across Levels 0–5. ## Fifteen-minute review: Fable / Claude **Use one Fable tab at a time.** Its known cross-tab persistence issue can overwrite newer changes. Switch learner and administrator accounts in that same tab. **Minutes 0–3 — learner and material.** Sign in as Maria. Open **Validate a Reference Number** through My Learning or library search. Inspect **Problem**, **Learn**, the PHP comparison and the progressive hints in **Help**. Make a small edit, wait for draft saving, refresh and confirm persistence. Do this before starting a submission. **Minutes 3–6 — grading and history.** Open **Prototype controls** in the top bar. Use the default outcome that follows known code variants. Under **Known code variant**, choose **Prefix compared with == on a substring**, then **Insert variant into editor**. Close the panel and **Run examples**: progress stays 4/10. **Submit** and inspect results, separate sample AI feedback, and the saved source in history. Insert **Complete solution with null, length, prefix and digit checks** and submit: a fresh Maria moves to 5/10. Repeat: still 5/10. Edit the draft; verify an earlier snapshot remains unchanged. Wait for a terminal result before refreshing; interrupted submissions have a known recovery defect. **Minutes 6–8 — questions.** In **Help**, use **Ask a new question**, optionally attach a submission, check **Ask the instructor**, and select **Ask**. A suggested question demonstrates a prepared AI reply; use **Request instructor reply** to escalate that thread. **Minutes 8–15:** complete the shared checks below. Other expanded samples are **Queue Ticket Countdown** and **Count Tasks by Status**. Maria already passed Queue Ticket Countdown, so passing it again does not increase 4/10. Fable seeds 18 exercises: 16 published and 2 drafts. Its reference-number lesson has a known digit-contract inconsistency listed below. ## Shared administrator and failure checks — minutes 8–15 1. Switch to the administrator through **Prototype controls**. Open **Review Inbox → Questions**, find your question, and write an instructor reply. Return to the learner in the same tab: open the exercise's Help thread, read the reply, and resolve it. 2. Return to the administrator. In **Review Inbox → Submissions**, inspect the immutable source snapshot, test summary, and separate AI comments. Add an instructor comment and mark the review addressed. 3. In **Learners**, create a fictional account, assign exercises, and deactivate it. Sign out and try its issued credentials: sign-in must be rejected. Account activation and temporary-credential reset are available here too. 4. In **Content**, create a **new** exercise, complete the required authoring fields, save a draft and preview it. Publish after validation. Confirm it appears in the learner library without changing the existing assignment denominator. Review chapter naming/order and required/optional assignment controls. Fable's editing of existing published content has a separate known defect. 5. In a learner workspace, use **Prototype controls** to choose **Grading service unavailable**, then submit. Inspect the infrastructure-error explanation. Restore grading availability, set **AI unavailable** (Astra checkbox; Fable availability control), and submit a known passed variant. Grading remains independent of AI. Save a question for the instructor while AI is unavailable. Restore default controls afterward. For a clean repeat, **Prototype controls → Reset demo data** restores that prototype's seed after confirmation. It removes that browser's created accounts, drafts, submissions, questions and content edits. Counts above apply only to fresh seed data. ## Rules to preserve in production - **Run examples** is practice; it does not create a formal submission or complete an exercise. **Submit** captures source and checks public/private criteria. Compilation alone is not success. - Results say **Demo result — code was not executed**. Prepared code variants map to fixtures; arbitrary edits are **Not evaluated in this prototype** unless a reviewer explicitly forces an outcome. Forced outcomes demonstrate UI states, not code correctness. - **Sample AI feedback/reply** is separate from the test verdict. Suggested questions have prepared replies. Free text is saved for instructor review, not presented as a live AI answer. - Required progress counts distinct passed assigned exercise versions. Repeated passes, optional work, lessons, hints and AI do not inflate it. Later failures do not erase an earlier pass. New library content does not silently change assignments. No assignment means no percentage. ## Storage, files, and independent running **Mongoose serves static files only.** Two people on different PCs do not share accounts, submissions or instructor replies. Demonstrate the round trip in one browser/profile. Astra and Fable use different localStorage keys, so their data is separate even on the same server. A different hostname/IP, port, browser or profile has separate storage; clearing browser storage removes demo edits. Browser-side role checks and hidden grader configuration provide no real security. | | Source / entry | Internal-server copy | | --- | --- | --- | | Astra | `C:\PNP\Astra\index.html` | `C:\mongoose\java-practice\astra\index.shtml` | | Fable | `C:\PNP\Fable\index.html` | `C:\mongoose\java-practice\fable\index.shtml` | Keep each folder intact. Both use plain JavaScript without a build step. This Mongoose binary omits the Content-Type header for `.html`: hosted entries use **index.shtml**, including the portal. **Do not add index.html to hosted directories**; it overrides the working default entry. Original project entries remain `index.html`. Hosting adjustment: Astra IDs fall back to `crypto.getRandomValues` when HTTP makes `crypto.randomUUID` unavailable. Fable defects remain unchanged. The [handoff ZIP](http://192.168.0.100:8000/java-practice/developer-handoff.zip) contains `source/astra/`, `source/fable/`, a ready-to-copy `mongoose/java-practice/` web folder, and root-level `README-FIRST.md` and guides. For Mongoose, copy the packaged `java-practice` folder into its existing web root, retaining filenames and structure. For standalone development, open a terminal in the **extracted** `source/astra` folder and run `node server.mjs` (Node.js 20+); open `http://127.0.0.1:4173`. In extracted `source/fable`, run `node serve.js`; open `http://127.0.0.1:8080`. No `npm install` or fixed `C:\PNP` location is required. Before sharing, confirm both URLs from another internal PC and check loading, refresh and the workspace at 1366×768. Automated checks do not establish production readiness. ## Fable known issues — not fixed by this handoff - Saving edits as draft on an already published exercise exposes the edits to learners before publication. - Grading fixtures are not bound safely to changed assessment versions; old code can receive fabricated updated output. - Reassigned versions can show inconsistent completion between My Learning, Library and Workspace. - Refreshing during a queued/compiling/running submission can leave it permanently pending. - Stale tabs can overwrite each other's saved state; use one tab. - Reference validation requires ASCII `0–9`, while its lesson/fixture also accepts broader `Character.isDigit` behavior. - Administrator reopening of an unanswered question can incorrectly mark it answered. These are defects to address, not requirements to reproduce. See [the detailed review](fable-review.md) for evidence and reproduction steps. ## Production work Use the agreed flows as a specification for Java/Spring with Thymeleaf: server authentication and authorization, database/versioning, durable drafts and submission snapshots, queue/recovery, isolated grading workers, server-only private tests, backups and an optional real AI adapter. Never execute submitted Java inside the web process. Worker CPU/time/memory/process/output/network limits and disposable environments are required. Server sizing needs measured concurrency. No Linux server setup, Spring project workspace, embedded IDE, CI, or multi-file project phase is part of these prototypes.