_ _ _ __ __ _ __ _
/ \ ___ __ _ __| | ___ _ __ ___ (_) ___ \ \ / /__ _ __| | __/ _| | _____ __
/ _ \ / __/ _` |/ _` |/ _ \ '_ ` _ \| |/ __| \ \ /\ / / _ \| '__| |/ / |_| |/ _ \ \ /\ / /
/ ___ \ (_| (_| | (_| | __/ | | | | | | (__ \ V V / (_) | | | <| _| | (_) \ V V /
/_/ \_\___\__,_|\__,_|\___|_| |_| |_|_|\___| \_/\_/ \___/|_| |_|\_\_| |_|\___/ \_/\_/
____ _ _
/ ___| _ _(_) |_ ___
\___ \| | | | | __/ _ \
___) | |_| | | || __/
|____/ \__,_|_|\__\___|<div align="center">
[](https://github.com/academic-workflow-suite/actions)
[](https://github.com/academic-workflow-suite/releases)
[](https://hub.docker.com/r/aws-edu/core)
[](docs/SECURITY.md#gdpr-compliance)
[](docs/SECURITY.md)
[Website](https://aws-edu.org) • [Documentation](docs/README.md) • [Quick Start](docs/QUICK_START.md) • [Installation](docs/INSTALLATION_GUIDE.md) • [Support](https://discuss.aws-edu.org)
Reduce TMA marking time from 20-30 minutes to under 10 minutes while maintaining quality and protecting student privacy.
</div>
[Overview](#overview)
[The Problem We Solve](#the-problem-we-solve)
[Key Features](#key-features)
[Screenshots](#screenshots)
[Quick Start](#quick-start)
[Architecture](#architecture)
[Installation](#installation)
[Usage](#usage)
[Documentation](#documentation)
[Development](#development)
[Security & Privacy](#security—privacy)
[Roadmap](#roadmap)
[Support](#support)
[Contributing](#contributing)
[License](#license)
[Citation](#citation)
[Acknowledgments](#acknowledgments)
Academic Workflow Suite (AWS) is an open-source, privacy-first AI assistant designed specifically for Open University Associate Lecturers to streamline the marking of Tutor-Marked Assignments (TMAs).
Unlike cloud-based AI tools that compromise student privacy, AWS runs entirely on your local machine with mathematical guarantees that student data never reaches AI systems in identifiable form.
OU Associate Lecturers marking TMAs across all modules
Academic institutions requiring GDPR-compliant AI assistance
Researchers studying educational technology and privacy-preserving AI
Developers interested in event-sourced, privacy-first architectures
Traditional Marking: With Academic Workflow Suite:
───────────────── ────────────────────────────
📄 Read submission 📄 Load document (auto)
📝 Check rubric 📝 Rubric loaded (auto)
💭 Analyze quality 🤖 AI analysis (10-30s)
✍️ Write feedback ✍️ Review & edit AI suggestions
🔢 Calculate scores 🔢 Scores calculated
📋 Format comments 📋 Auto-format & insert
⏱️ 20-30 minutes/TMA ⏱️ <10 minutes/TMA
🔒 100% student privacyOpen University Associate Lecturers face a significant workload challenge:
20-30 minutes per TMA on average
50-100+ TMAs per assignment for popular modules
Repetitive feedback for common mistakes
Cognitive load of maintaining rubric consistency
Tight deadlines (typically 2-3 weeks)
Total time commitment: 16-50+ hours per assignment batch
While commercial AI assistants can help, they pose serious privacy risks:
❌ Student data sent to cloud servers ❌ No control over data retention ❌ Potential GDPR violations ❌ University policy non-compliance ❌ No audit trail ❌ Risk of data breaches
AWS provides AI assistance with zero privacy compromise:
✅ Runs entirely on your machine (no cloud required) ✅ Student IDs never reach AI (cryptographically anonymized) ✅ Network-isolated AI (cannot exfiltrate data) ✅ Complete audit trail (event sourcing) ✅ GDPR compliant by design ✅ University-approved architecture
Intelligent analysis against custom or pre-loaded rubrics
Constructive feedback suggestions that you can edit or reject
Score recommendations based on rubric criteria
Consistency checking across multiple submissions
Learn your style (adapts to your feedback patterns over time)
Student ID: A1234567
↓ SHA3-512 Hash (one-way, irreversible)
Hash: 7f3a2b9c8e1d4a5c6f8b9e2d3c4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b...
↓ Sent to AI Jail (network-isolated container)
AI sees:
✓ Anonymous hash
✓ Essay content
✓ Rubric criteria
AI never sees:
✗ Student ID
✗ Student name
✗ Any personally identifiable informationMathematical guarantee: SHA3-512 hash cannot be reversed (2^512 search space = more combinations than atoms in the universe)
Every action is logged immutably:
2025-11-22 14:32:01 - Document loaded: TM112-TMA01
2025-11-22 14:32:15 - Student ID anonymized: A1234567 → hash
2025-11-22 14:32:47 - AI analysis completed (29 seconds)
2025-11-22 14:35:22 - Tutor edited feedback for criterion: Understanding
2025-11-22 14:36:10 - Feedback inserted into Word document
2025-11-22 14:36:32 - Document exported as PDFBenefits: - Prove compliance for university audits - Reproduce past decisions for quality assurance - Time-travel debugging for troubleshooting - GDPR right to explanation support
Seamless integration with Microsoft Word via official Office Add-in:
Task pane interface in Word (no context switching)
Direct document manipulation using Office.js
Inline comments inserted automatically
Rubric-based scoring with auto-calculation
Export to PDF/DOCX with formatting preserved
Future releases will include: - Direct download of student submissions - Automated grade upload to Moodle gradebook - Batch processing of entire assignment cohorts
Mark multiple TMAs efficiently:
= Analyze all TMAs in a directory
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
aws-core batch analyze --module TM112 --assignment TMA01 --input ./submissions/
= Process 50 TMAs in parallel
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
= Average processing time: 10 minutes per TMA
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
= Total time: ~8-10 hours → Run overnight!
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]Create and share rubrics:
= Example: TM112 TMA01 Rubricimage:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]module: TM112assignment: TMA01total_marks: 100criteria:
- id: understandingname: Understanding of Conceptsmarks: 30description: Demonstrates grasp of networking fundamentals
- id: analysisname: Critical Analysismarks: 30description: Evaluates concepts critically with evidence
- id: structurename: Structure & Claritymarks: 20description: Well-organized, clear writing
- id: evidencename: Use of Evidencemarks: 20description: Appropriate citations and examplesFull compliance with EU General Data Protection Regulation:
Data minimization: Only necessary data processed
Purpose limitation: Data used only for marking
Storage limitation: Configurable retention periods
Right to erasure: Complete data deletion on request
Right to explanation: Full audit trail available
Data portability: Export all data in standard formats
Privacy by design: Architecture prevents PII leakage
Note: The following are placeholder descriptions. Actual screenshots will be added in future releases.
┌─────────────────────────────────────────────────────────────────────┐
│ Microsoft Word - TM112-TMA01.docx │
├─────────────────────────────┬───────────────────────────────────────┤
│ │ ┌─────────────────────────────────┐ │
│ Student: A1234567 │ │ Academic Workflow Suite │ │
│ Module: TM112 │ │ │ │
│ Assignment: TMA01 │ │ Module: TM112 ▾ │ │
│ │ │ Assignment: TMA01 ▾ │ │
│ Question 1: │ │ │ │
│ Explain the concept of... │ │ [Load Document] │ │
│ │ │ │ │
│ [Student's essay text] │ │ Status: ✓ Document loaded │ │
│ Lorem ipsum dolor sit │ │ │ │
│ amet, consectetur │ │ Rubric: TM112-TMA01 Official │ │
│ adipiscing elit... │ │ │ │
│ │ │ [Analyze Submission] │ │
│ │ └─────────────────────────────────┘ │
└─────────────────────────────┴───────────────────────────────────────┘Figure 1: Office add-in task pane showing document loaded and ready for analysis
┌─────────────────────────────────────────────────────────────────────┐
│ AI Analysis Complete │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ Suggested Scores: │
│ │
│ 📚 Understanding of Concepts: 24/30 ★★★★☆ │
│ 🔍 Critical Analysis: 22/30 ★★★☆☆ │
│ 📝 Structure & Clarity: 17/20 ★★★★☆ │
│ 📖 Use of Evidence: 15/20 ★★★☆☆ │
│ ───────────────────────────────────────────────── │
│ Total: 78/100 (B+) │
│ │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ Suggested Feedback (Understanding of Concepts) │ │
│ │ │ │
│ │ "You demonstrate a solid understanding of networking │ │
│ │ fundamentals. Your explanation of the TCP/IP model is clear │ │
│ │ and accurate. To improve, consider exploring how the OSI │ │
│ │ model relates to real-world protocols in more depth." │ │
│ │ │ │
│ │ [✎ Edit] [✓ Accept] [✗ Reject] │ │
│ └───────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘Figure 2: AI-generated feedback suggestions with scores
┌─────────────────────────────────────────────────────────────────────┐
│ AWS Settings │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ⚙️ General │
│ ├─ Feedback Tone: ◉ Formal ○ Friendly ○ Custom │
│ ├─ Scoring Strictness: [█████████░] 85% │
│ └─ Auto-save Interval: [5 minutes ▾] │
│ │
│ 🔒 Privacy │
│ ├─ Hash Algorithm: SHA3-512 (FIPS 202) ✓ │
│ ├─ Network Isolation: ✓ Enabled │
│ └─ Data Retention: [90 days ▾] │
│ │
│ 🎨 Appearance │
│ ├─ Theme: ◉ Light ○ Dark ○ Auto │
│ └─ Font Size: [14pt ▾] │
│ │
│ 📊 Analytics │
│ ├─ Anonymous Usage Stats: ○ Enabled ◉ Disabled │
│ └─ Crash Reports: ○ Enabled ◉ Disabled │
│ │
│ [Save Changes] [Reset to Defaults] │
└─────────────────────────────────────────────────────────────────────┘Figure 3: Settings panel for customizing AWS behavior
┌─────────────────────────────────────────────────────────────────────┐
│ Marking Statistics - TM112 TMA01 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 📈 Overview │
│ ├─ TMAs Marked: 47 / 52 │
│ ├─ Average Time: 8.5 minutes/TMA │
│ ├─ Time Saved: ~9.5 hours (vs 20min average) │
│ └─ AI Suggestions Accepted: 73% │
│ │
│ 📊 Score Distribution │
│ ┌─────────────────────────────────────────────┐ │
│ │ A: ████████ (17%) │ │
│ │ B: ████████████████ (30%) │ │
│ │ C: ████████████████████ (38%) │ │
│ │ D: ████████ (13%) │ │
│ │ Fail: ██ (2%) │ │
│ └─────────────────────────────────────────────┘ │
│ │
│ 🎯 Rubric Criteria (Average Scores) │
│ ├─ Understanding: 23.4/30 (78%) │
│ ├─ Analysis: 21.8/30 (73%) │
│ ├─ Structure: 16.2/20 (81%) │
│ └─ Evidence: 15.9/20 (80%) │
│ │
│ [Export Report] [View Trends] │
└─────────────────────────────────────────────────────────────────────┘Figure 4: Analytics dashboard showing marking statistics
Microsoft Word 2019 or later (or Office 365)
Docker or Podman (for AI isolation)
10 GB free disk space
8 GB RAM (16 GB recommended)
= 1. Start AWS services
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
aws-core start
= 2. Open Word and click the AWS tab
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
= 3. Open a TMA document
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
= 4. Click "Analyze Submission"
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
= 5. Review and edit AI suggestions
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
= 6. Insert feedback into document
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
= 7. Export and submit!
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]Full guide: See [Quick Start Guide](docs/QUICK_START.md) for detailed walkthrough
See TOPOLOGY.md for a visual architecture map and completion dashboard.
┌─────────────────────────────────────────────────────────────────────┐
│ USER ENVIRONMENT │
│ │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ Presentation Layer │ │
│ │ ┌─────────────────────────────────────────────────────────┐ │ │
│ │ │ Microsoft Word + AWS Office Add-in (ReScript) │ │ │
│ │ │ - Task pane UI │ │ │
│ │ │ - Document manipulation (Office.js) │ │ │
│ │ └──────────────────────┬──────────────────────────────────┘ │ │
│ └─────────────────────────┼─────────────────────────────────────┘ │
│ │ HTTPS/TLS 1.3 (localhost:8080) │
│ ┌─────────────────────────▼─────────────────────────────────────┐ │
│ │ Application Layer (Rust) │ │
│ │ ┌──────────┐ ┌──────────┐ ┌─────────────────┐ │ │
│ │ │ REST API │ │ Business │ │ Anonymization │ │ │
│ │ │ (Actix) │ │ Logic │ │ Engine (SHA3) │ │ │
│ │ └──────────┘ └──────────┘ └─────────────────┘ │ │
│ └─────────────────────────┬─────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────▼─────────────────────────────────────┐ │
│ │ Persistence Layer │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │ │
│ │ │ Event │ │ Read │ │ File Storage │ │ │
│ │ │ Store │ │ Models │ │ (Documents) │ │ │
│ │ │ (LMDB) │ │(In-Mem) │ │ │ │ │
│ │ └──────────┘ └──────────┘ └──────────────┘ │ │
│ └─────────────────────────┬─────────────────────────────────────┘ │
│ │ Unix Socket (IPC) │
│ ┌─────────────────────────▼─────────────────────────────────────┐ │
│ │ AI Isolation Layer (Network-Isolated Container) │ │
│ │ ┌─────────────────────────────────────────────────────────┐ │ │
│ │ │ 🔒 Sandboxed Environment (gVisor/Firecracker) │ │ │
│ │ │ ┌────────┐ ┌─────────┐ ┌──────────────────────────┐ │ │ │
│ │ │ │ AI │ │ ONNX │ │ Security Controls: │ │ │ │
│ │ │ │ Model │ │ Runtime │ │ ✗ No network access │ │ │ │
│ │ │ │ │ │ │ │ ✗ Read-only filesystem │ │ │ │
│ │ │ │ │ │ │ │ ✗ No PII received │ │ │ │
│ │ │ └────────┘ └─────────┘ └──────────────────────────┘ │ │ │
│ │ └─────────────────────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
│
│ HTTPS (Optional)
│
┌─────────────▼────────────────┐
│ Backend Services (Optional) │
│ - Rubric repository │
│ - Software updates │
│ - NO student data │
└──────────────────────────────┘| Component | Technology | Purpose | |-----------|------------|---------| | Office Add-in | ReScript, Office.js, Webpack | UI and Word integration | | Core Engine | Rust, Actix-Web, Tokio | Business logic and API | | Event Store | LMDB (via Heed) | Immutable event log | | AI Jail | Rust, ONNX Runtime, Docker | Isolated AI inference | | Backend | Rust, Actix-Web (optional) | Rubric repository, updates |
Frontend: ReScript → JavaScript, React, Office.js
Backend: Rust (stable), Actix-Web 4.x
Database: LMDB (Lightning Memory-Mapped Database)
AI Runtime: ONNX Runtime, llama.cpp
Containerization: Docker/Podman, gVisor
Cryptography: SHA3 (FIPS 202), AES-256-GCM
Build System: Cargo, npm, Make
Verified Libraries: proven (Idris2 formally verified modules)
Academic Workflow Suite integrates with the proven library - a formally verified, crashproof library written in Idris2 with 45 modules and 43 language FFI bindings.
| Module | Purpose | Guarantee |
|---|---|---|
SafeCrypto | SHA3-512 anonymization, AES-256-GCM encryption | Timing attack resistance, no panics |
SafeJson | IPC communication, API parsing | No parse failures, memory safety |
SafeRegex | PII detection, input validation | No ReDoS, polynomial-time matching |
SafeStateMachine | Event sourcing, workflow states | No invalid states, deterministic |
SafePath | Document path handling | Path traversal prevention |
Mathematical Guarantees: Formally proven correctness
Crash Safety: No panics or undefined behavior
Security Hardening: Verified cryptographic implementations
Auditability: Proofs available for security review
See: Proven Integration Guide for implementation details
1. Tutor opens TMA → Office Add-in parses document
2. Student ID extracted → Core Engine anonymizes (SHA3-512)
3. Anonymized data sent → AI Jail via Unix socket
4. AI analyzes essay → Returns feedback suggestions
5. Core re-associates → Hash → Student ID
6. Tutor reviews/edits → Inserts into Word document
7. Audit event logged → Immutable event storeDetailed architecture: See [Architecture Documentation](docs/ARCHITECTURE.md)
| Component | Minimum | Recommended | |-----------|---------|-------------| | OS | Windows 10, macOS 11, Ubuntu 20.04 | Windows 11, macOS 13+, Ubuntu 22.04+ | | CPU | 2 cores, 2.0 GHz | 4+ cores, 3.0 GHz | | RAM | 8 GB | 16 GB | | Disk | 10 GB free | 20 GB free (SSD) | | Word | Office 2019 | Office 365 | | Docker | Docker 20.10+ | Docker 24.0+ or Podman 4.0+ |
One-liner installation with sensible defaults:
macOS / Linux:
curl -sSL https://install.aws-edu.org/install.sh | bashWindows (PowerShell as Administrator):
iwr https://install.aws-edu.org/install.ps1 -useb | iexWhat gets installed:
- AWS Core Engine (/usr/local/bin/aws-core)
- Office Add-in (configured in Word)
- AI Jail container image
- Default rubrics for popular modules
- System dependencies
Choose components and installation paths:
= Download installer
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
curl -sSL https://install.aws-edu.org/install.sh -o install.sh
= Run with custom options
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
bash install.sh \
--prefix ~/.local \
--no-ai-jail \
--modules TM112,M250 \
--config-file my-config.tomlFor developers or custom builds:
= Clone repository
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
git clone https://github.com/academic-workflow-suite/aws.git
cd aws
= Build all components
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
make build
= Install
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
sudo make install
= Or install to custom location
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
make install PREFIX=~/.localFull installation guide: See [Installation Guide](docs/INSTALLATION_GUIDE.md)
= Check AWS Core
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
aws-core --version
= Expected: AWS Core Engine v0.1.0
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
= Check Docker
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
docker ps
= Expected: Container list (may be empty)
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
= Check Office Add-in
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
= Open Word → Look for"AWS" tabin ribbon
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]= Start AWS Core Engine
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
aws-core start
= Check status
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
aws-core status
= Expected:
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
= ✓ Core Engine: Running
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
= ✓ AI Jail: Ready
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
= ✓ Database: OK
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]= Edit configuration
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
aws-core config edit
= Common settings:
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
= - feedback_tone: formal, friendly, or custom
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
= - scoring_strictness: 0-100
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
= - data_retention_days: 90
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
= - theme: light, dark, or auto
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]In AWS task pane: - Module: Select from dropdown (e.g., TM112) - Assignment: Select TMA (e.g., TMA01) - Click Load Document
AWS will parse the document and detect: - Student ID - Module/assignment metadata - Question structure - Student responses
Click Analyze Submission
Wait 10-30 seconds for AI analysis
Review suggested scores and feedback
Important: AI provides suggestions, not decisions!
Edit any feedback text
Adjust scores based on your judgment
Add personal comments
Remove suggestions you disagree with
Click Insert Feedback
AWS adds comments to Word document
Review inserted feedback
Make final adjustments
Mark multiple TMAs at once:
= Prepare TMAs
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
mkdir -p ~/marking/TM112-TMA01
= Place all TMA documents in this directory
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
= Batch analyze
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
aws-core batch analyze \
--module TM112 \
--assignment TMA01 \
--input ~/marking/TM112-TMA01 \
--output ~/marking/TM112-TMA01-marked \
--parallelism 4
= Review and finalize in Word
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]Create rubrics for any module:
= Interactive rubric creator
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
aws-core rubric create \
--module M250 \
--assignment TMA02
= Follow prompts to define criteria
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]Or edit YAML directly:
= ~/.aws/rubrics/M250-TMA02.ymlimage:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]module: M250assignment: TMA02total_marks: 100criteria:
- id: oop_designname: Object-Oriented Designmarks: 40description: Quality of class design and UML diagrams
- id: implementationname: Code Implementationmarks: 40description: Correctness and style of Java code
- id: testingname: Testing & Documentationmarks: 20description: Unit tests and code documentation= Start/stop services
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
aws-core start
aws-core stop
aws-core restart
= Status and health
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
aws-core status
aws-core doctor # Diagnose issues
= Rubrics
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
aws-core rubric list
aws-core rubric show TM112 TMA01
aws-core rubric create --module M250 --assignment TMA03
aws-core rubric import rubric.yml
= Updates
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
aws-core update # Update AWS
aws-core update-rubrics # Update rubric repository
= Logs and diagnostics
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
aws-core logs
aws-core logs --tail 50
aws-core logs --follow
= Configuration
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
aws-core config show
aws-core config edit
aws-core config reset
= Export statistics
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
aws-core stats export --module TM112 --format csvFull user guide: See [User Guide](docs/USER_GUIDE.md)
[Quick Start Guide](docs/QUICK_START.md) - Get started in 10 minutes
[Installation Guide](docs/INSTALLATION_GUIDE.md) - Detailed installation instructions
[User Guide](docs/USER_GUIDE.md) - Comprehensive manual
[FAQ](docs/USER_GUIDE.md#faq) - Frequently asked questions
[Troubleshooting](docs/USER_GUIDE.md#troubleshooting) - Common issues and solutions
[Architecture](docs/ARCHITECTURE.md) - System architecture and design
[API Reference](docs/API_REFERENCE.md) - REST API specification
[Security](docs/SECURITY.md) - Security model and privacy guarantees
[Proven Integration](docs/PROVEN_INTEGRATION.adoc) - Formally verified library integration
[Roadmap](docs/ROADMAP.adoc) - Future directions and development paths
[Development Guide](docs/DEVELOPMENT.md) - Contributing and development
[CI/CD](docs/CI-CD.md) - Continuous integration and deployment
[Core Engine](components/core/README.md) - Rust backend
[Office Add-in](components/office-addin/README.md) - ReScript frontend
[AI Jail](components/ai-jail/README.md) - Isolated AI inference
[Backend](components/backend/README.md) - Optional cloud services
Rust 1.75+ (
rustup install stable)Node.js 18+ and npm
Docker 20.10+ or Podman 4.0+
Git 2.30+
= Clone repository
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
git clone https://github.com/academic-workflow-suite/aws.git
cd aws
= Install dependencies
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
make deps
= Build all components
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
make build
= Run tests
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
make test
= Start development servers
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
make devacademic-workflow-suite/
├── components/
│ ├── core/ # Rust backend (Actix-Web)
│ ├── office-addin/ # ReScript frontend (Office.js)
│ ├── ai-jail/ # Isolated AI inference
│ ├── backend/ # Optional cloud services
│ └── shared/ # Shared types and utilities
├── docs/ # Documentation
├── scripts/ # Build and deployment scripts
├── tests/ # Integration tests
├── docker/ # Dockerfiles and compose configs
├── cli/ # Command-line interface
├── config/ # Default configurations
└── website/ # Project website= Create feature branch
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
git checkout -b feature/my-feature
= Make changes and test
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
make test
make lint
= Run locally
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
make dev
= Build release
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
make release
= Create pull request
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
git push origin feature/my-feature= All tests
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
make test
= Unit tests only
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
make test-unit
= Integration tests
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
make test-integration
= End-to-end tests
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
make test-e2e
= With coverage
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
make test-coverageThis project follows:
- Rust: rustfmt and clippy (strict mode)
- ReScript: ReScript formatter
- YAML: yamllint
= Format code
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
make format
= Lint code
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
make lint
= Fix auto-fixable issues
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
make lint-fixWe welcome contributions! Please see [CONTRIBUTING.md](components/office-addin/CONTRIBUTING.md) for:
Code of conduct
Development workflow
Pull request process
Coding standards
Testing requirements
Quick start for contributors:
Fork the repository
Create a feature branch
Make your changes with tests
Ensure
make testandmake lintpassSubmit a pull request
AWS provides mathematical guarantees that student personally identifiable information (PII) cannot reach AI systems:
Student ID → SHA3-512 Hash → AI Jail
A1234567 → 7f3a2b9c... → (irreversible)
Attack resistance:
• Brute force: 2^512 search space (infeasible)
• Rainbow table: Prevented by random salt
• Timing attack: Constant-time implementationAI Jail container is completely isolated:
Security Controls:
✓ No network access (iptables DROP all)✓ Read-only filesystem✓ System call filtering (seccomp)✓ Memory limits (4 GB)✓ No GPU access✓ Container destroyed after useAll student data stays on your machine
No cloud services required for core functionality
Optional backend only for rubrics (no student data)
AWS is compliant with EU General Data Protection Regulation:
| GDPR Right | Implementation |
|------------|----------------|
| Right to be informed | Complete audit trail available |
| Right of access | Export all data via aws-core export |
| Right to rectification | Edit or delete any data |
| Right to erasure | aws-core delete --student A1234567 |
| Right to restriction | Pause processing for specific students |
| Right to data portability | Export in JSON, CSV, or XML |
| Right to object | Opt-out mechanisms available |
| Rights related to automated decision-making | Human (tutor) always in the loop |
AWS is designed to meet university data protection requirements:
✅ No cloud data storage (student data never leaves machine) ✅ Anonymized AI processing (PII cryptographically protected) ✅ Complete audit trail (prove compliance) ✅ Tutor override (AI assists, tutor decides) ✅ Open source (auditable by university IT)
We conduct regular security assessments:
Static analysis: Clippy, cargo-audit
Dependency scanning: Dependabot, Snyk
Container scanning: Trivy, Clair
Penetration testing: Annual third-party audits
Fuzzing: Continuous fuzzing with cargo-fuzz
Found a security issue? Please report responsibly:
Email: security@aws-edu.org
PGP Key: [Download](https://aws-edu.org/pgp-key.asc)
Response time: 24-48 hours
Do not open public GitHub issues for security vulnerabilities.
See: [Security Policy](security/policies/SECURITY_POLICY.md) for full details
✓ Core engine with event sourcing
✓ Office Add-in for Word
✓ AI isolation with Docker/gVisor
✓ SHA3-512 anonymization
✓ LMDB event store
✓ Basic rubric support
✓ Manual feedback editing
✓ PDF export
✓ CLI interface
✓ Documentation
❏ Moodle LMS integration - Direct submission download
❏ Batch processing improvements - Parallel analysis
❏ Advanced analytics dashboard - Marking statistics
❏ Custom AI models - Fine-tune on your feedback style
❏ Voice dictation - Speak your feedback
❏ Mobile app - Review feedback on iOS/Android
❏ Collaborative marking - Multiple tutors on same module
❏ Plagiarism detection - Integration with Turnitin API
❏ Grade moderation - Cross-tutor consistency checking
❏ Student progress tracking - Longitudinal analysis
❏ Multilingual support - Support for non-English TMAs
❏ Enhanced privacy - Zero-knowledge proofs
❏ Browser extension - Mark TMAs in any web interface
❏ Automated grading - For objective questions (opt-in)
❏ Student self-assessment - Pre-submission feedback tool
❏ Research analytics - Anonymized data for pedagogy research
❏ Integration with Turnitin, Gradescope, Canvas
❏ Machine learning model marketplace - Share fine-tuned models
Suggest a feature: [Open a discussion](https://github.com/academic-workflow-suite/discussions)
First, check our comprehensive documentation:
[User Guide](docs/USER_GUIDE.md) - How to use AWS
[FAQ](docs/USER_GUIDE.md#faq) - Common questions
[Troubleshooting](docs/USER_GUIDE.md#troubleshooting) - Fix common issues
[Installation Guide](docs/INSTALLATION_GUIDE.md) - Setup help
Join our community:
[Discussion Forum](https://discuss.aws-edu.org) - Ask questions, share tips
[GitHub Discussions](https://github.com/academic-workflow-suite/discussions) - Feature requests, Q&A
[Discord Server](https://discord.gg/aws-edu) - Real-time chat
[Monthly Webinars](https://aws-edu.org/webinars) - Live demos and Q&A
Report bugs or request features:
[GitHub Issues](https://github.com/academic-workflow-suite/issues) - Bug reports, feature requests
[Security Issues](mailto:security@aws-edu.org) - Confidential security reports
For direct assistance:
General: support@aws-edu.org
Technical: tech@aws-edu.org
Security: security@aws-edu.org
Press/Media: press@aws-edu.org
Response time: Usually 24-48 hours (weekdays)
Enterprise support available for institutions:
Priority email support (4-hour response SLA)
Dedicated Slack channel
Custom feature development
On-site training
Annual security audits
Contact: enterprise@aws-edu.org
We welcome contributions from the community! AWS is built by educators, for educators.
Fix bugs
Implement features from roadmap
Improve documentation
Add tests
Optimize performance
See [Development](#development) section for setup instructions.
Share rubrics for your module:
= Export your rubric
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
aws-core rubric export M250 TMA02 > M250-TMA02.yml
= Submit via PR to rubrics repository
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]
= https://github.com/academic-workflow-suite/rubrics
image:https://img.shields.io/badge/License-MPL_2.0--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"]Contributors are recognized in:
[Contributors](https://github.com/academic-workflow-suite/graphs/contributors) page
Release notes
Annual contributor report
Top contributors may receive: - AWS swag (stickers, t-shirts) - Early access to new features - Invitation to contributor meetups
This project is licensed under the Palimpsest-MPL License v3.0 (PMPL-1.0).
Academic Workflow Suite
Copyright (C) 2025 Academic Workflow Suite Contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the Palimpsest-MPL License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Palimpsest-MPL License for more details.
You should have received a copy of the Palimpsest-MPL License
along with this program. If not, see <https://www.gnu.org/licenses/>.Why AGPL?
We chose PMPL-1.0 to ensure that:
AWS remains free and open source for all users
Improvements are shared with the community (even for web services)
Student privacy is protected (source code is auditable)
Commercial vendors must contribute back if they modify AWS
See: [LICENSE](LICENSE) for full text
Documentation is licensed under Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0).
You are free to: - Share — copy and redistribute the material - Adapt — remix, transform, and build upon the material
Under the following terms: - Attribution — You must give appropriate credit - ShareAlike — If you remix, you must distribute under the same license
If you use Academic Workflow Suite in your research or teaching, please cite:
APA Style:
Academic Workflow Suite Contributors. (2025). Academic Workflow Suite:
Privacy-First AI-Assisted TMA Marking (Version 0.1.0) [Computer software].
https://github.com/academic-workflow-suiteBibTeX:
@software{academic_workflow_suite_2025,
title = {Academic Workflow Suite: Privacy-First AI-Assisted TMA Marking},
author = {{Academic Workflow Suite Contributors}},
year = 2025,
version = {0.1.0},
url = {https://github.com/academic-workflow-suite},
license = {PMPL-1.0},
keywords = {education, AI, privacy, marking, assessment}
}If you publish research about AWS, please let us know! We maintain a [Publications](https://aws-edu.org/publications) page.
Thank you to all our contributors:
See [Contributors](https://github.com/academic-workflow-suite/graphs/contributors) for full list
This project was inspired by:
Open University Associate Lecturers who dedicate countless hours to student feedback
Privacy-preserving AI research from academia
Open-source education tools like Moodle, Open edX, and Jupyter
Built with excellent open-source technologies:
| Technology | License | Purpose | |------------|---------|---------| | [Rust](https://www.rust-lang.org/) | MIT/Apache-2.0 | Core engine | | [ReScript](https://rescript-lang.org/) | MIT | Frontend | | [Actix-Web](https://actix.rs/) | MIT/Apache-2.0 | Web framework | | [LMDB](https://www.symas.com/lmdb) | OpenLDAP | Database | | [ONNX Runtime](https://onnxruntime.ai/) | MIT | AI inference | | [Docker](https://www.docker.com/) | Apache-2.0 | Containerization | | [Office.js](https://docs.microsoft.com/en-us/office/dev/add-ins/) | MIT | Word integration |
This project is currently self-funded by contributors. If you’d like to support development:
[GitHub Sponsors](https://github.com/sponsors/academic-workflow-suite)
[Open Collective](https://opencollective.com/aws-edu)
Version: 0.1.0 (Initial Release)
Status: Beta - Ready for testing
Stability: Experimental - Use with caution in production
| Platform | Status | Notes |
|----------|--------|-------|
| Windows 10/11 | ✅ Supported | Tested on Word 2019, Office 365 |
| macOS 11+ | ✅ Supported | Intel and Apple Silicon |
| Linux (Ubuntu) | ✅ Supported | 20.04 LTS and later |
| Linux (Other) |
AI models: Currently English-only
Office: Word only (Excel/PowerPoint not supported)
Moodle: Integration not yet available (v0.2.0)
Batch processing: Limited to 100 TMAs at once
Stay informed about releases:
[Release Notes](https://github.com/academic-workflow-suite/releases) - All releases
[Newsletter](https://aws-edu.org/newsletter) - Monthly updates
[RSS Feed](https://github.com/academic-workflow-suite/releases.atom) - Release notifications
[Twitter](https://twitter.com/aws_edu) - Announcements
[Moodle](https://moodle.org/) - Open-source LMS
[Open edX](https://open.edx.org/) - MOOC platform
[Gradescope](https://www.gradescope.com/) - Grading platform
[Turnitin](https://www.turnitin.com/) - Plagiarism detection
[Zotero](https://www.zotero.org/) - Reference management
[LaTeX](https://www.latex-project.org/) - Document preparation
[Jupyter](https://jupyter.org/) - Interactive notebooks
[Hypothesis](https://web.hypothes.is/) - Web annotation
Homepage: https://aws-edu.org
Documentation: https://docs.aws-edu.org
Blog: https://blog.aws-edu.org
Twitter: [@aws_edu](https://twitter.com/aws_edu)
LinkedIn: [AWS Education](https://linkedin.com/company/aws-edu)
YouTube: [AWS Tutorials](https://youtube.com/@aws-edu)
General Inquiries: hello@aws-edu.org
Support: support@aws-edu.org
Press: press@aws-edu.org
Security: security@aws-edu.org
<div align="center">
If you find AWS useful, please consider starring the repository. It helps others discover the project!
[](https://github.com/academic-workflow-suite/aws)
Made with ❤️ by educators, for educators
Privacy-first • Open-source • Community-driven
Academic Workflow Suite - Empowering educators while protecting student privacy
</div>
Last Updated: 2025-11-22 Version: 0.1.0 Status: Beta Release