NL · EN

Maze-Guild

Recruitment and selection through an address of your own and a trade community: a client's request becomes an open place, the machine computes distance and seam, people decide in a three-way conversation, and the work lands on the tradesperson's address. A prototype with fictional people only.

Open the Maze-Guild →

Vision and brief: J. Konstapel, Maze-Guild information package (9-11-2026) · first version

This is the manual of the earlier prototype on swarp.nl/gilde (9 November 2026). The Maze-Guild itself was then built further as a standalone app; its manual is at /handleidingen/guild/en.

lastingsurvives a rebuild: what it is and why
moves with the codetrue for this version of the code

1 For the user lasting

/gilde — the Maze-Guild on swarp.nl

Log in to swarp.nl and open swarp.nl/gilde. At I am pick a fictional person: Mila (19, wants to work with her hands), Joop (71, retired master plasterer), Sanne (guide), the owner of a listed building (client), and a few others. Everything you do, you do as that person; the ledger also records that you operated it. No real people are in it.

My address. Roles, trades, interests (RIASEC), route and demonstrated skills, work and masterpieces (including work someone guided as master) and learning steps, with a link to the same person in the MAZE.

State first. Only the person reports their own load and whether there is room for a step. Without such a self-report of at most 30 days the Guild computes no distance; with high load or no room the advice is rest. Never via camera, voice or body signals.

Direction. Trades at the right distance: close enough to your interests and one or two steps above your current level, plus the O*NET occupations at that distance.

The second guild. A retired master sees the open places in his disappearing trade and can propose a pairing to a young person; the young person sees the masters and decides whether the pairing goes ahead.

Open places. A client posts a request with postcode and trade. The Guild looks for tradespeople in the same province. If there is nobody, it says gap, with the reason; a match is never invented.

Seam and three-way conversation. A guide computes the seam (which required skills are still open), records how the seam feels (connection, dominance or compromise) and opens the conversation with the person, the client and possibly a master. Each participant agrees themselves (choose that person at I am); only then can the guide place. If the computation says "does not close" or the advice is rest, the guide can still go ahead with a reason; that deviation is in the ledger.

Work and masterpiece. The maker records work; the client and two peers judge it. A master of the guild who was not the person's own guide decides on the step from apprentice to journeyman.

My data. View (everything recorded about you), the private layer (birth data and reflection, only for you) and delete. After deletion your data is gone and everything about you in the ledger is erased; only the chain itself stays verifiable.

Ledger. Every decision about a person, with rule, label, time and who decided, and the chain check (intact or broken).

Labels. Every reading carries established (a count, a recorded fact) or hypothesis (distance, seam, state). "What is this based on?" shows the data and rules used.

Start over. Administrators of swarp.nl see a button that resets the test world, including its ledger.

Language. NL/EN at the top switches the page language; a few fixed sentences from the computing core stay Dutch.

2 For the thinker lasting

The vision (J. Konstapel, Recruitment and Selection: A Vision) says: recruitment methods measure ever better what the employer wants to know and ever less what the person needs. The guild did both: proof through work, a long bond between master and apprentice, and growth. The Guild rebuilds that in three layers: an address per person, the relationship as a seam, and the trade as a community. The client of the work stands at the start (the request) and at the end (the judgement).

The machine computes, people decide. Placement, pairing, class jump and agreement exist only as a ledger line with a human decision-maker. What is a hypothesis (the distance rule, the seam rule 9/36/36, the state) is advice; a person may deviate from it, with a reason. What is established (a count, a judgement, a decision) carries that label.

Two layers. Birth date and everything derived from it (the blueprint) are for the person only. Age-discrimination law forbids selecting on it; the Guild proves with a test that no employer, guild, client or matching answer contains it.

Invent nothing. No tradesperson within reach is a gap: a reason to train, and a signal to the second guild. Retired masters do not count in that tally; they are the second guild that answers the gap.

Limits. No emotion recognition (EU AI Act art. 5(1)(f)); recruitment is high-risk AI (Annex III), hence an explanation with every outcome, logging, human oversight, access and deletion. The prototype does not actually broker work (Dutch Wtta). Still open: the eleven research questions of the vision wait for real users.

3 For the builder moves with the code

Code in maze/guild/: guild.mjs (rules, guild_* tables in maze-db, ledger), route.mjs (API, only with the shared secret), pagina.html, data/aanvulling.json (marked fictional additions to the package data), toets.mjs (A1–A13). The package is kept unchanged in maze/guild/pakket/.

Rules. R-afstand: Euclidean distance between the person's RIASEC (0..1) and the occupation's ((OI−1)/6); close enough = among the nearest 25% of all occupations with interest data; step = job zone − current level, right at 1 or 2. R-naad: open windows = required skills (the guild records them per level) minus demonstrated ones. R-gat: tradespeople (not retired, with hours) or training places in the same province. Occupations from Extended's occupations table (O*NET 29.1), via Support.

Ledger. Redactable per field: the chain keeps per line the action, rule, time and a content hash; every field (decision-maker, operator, objects) has its own commitment sha256(key | value | 128-bit nonce). Each line has its own pseudonym sha256(salt | id | previous hash), with a salt per person. Deletion erases value and nonce of the fields about the person and their objects, sets a redaction mark (HMAC with the server key) and runs VACUUM (FULL, ANALYZE). Free text and unknown actions are refused.

Tests. GUILD_TOETS_DB=… SWARP_DB=… OPENAI_API_KEY=… MAZE_VULSLEUTEL=… node maze/guild/toets.mjs against a test database of its own. Plans plan-guild-1 to -10, each hashed before code or run; nine independent judges; outcome in uitkomst-guild-1.md.

Open. Personas are a choice of the logged-in user, not a login of their own; no external anchor for the final hash; copies in the transaction log and backups follow their retention; ESCO is not in the stack; if an occupation is missing from the production table, the page says so.

4 For the connector moves with the code

swarp.nl (server/routes/gilde.ts) fetches /gilde from the MAZE (/guild/pagina) and forwards /api/guild/* with x-swarp-secret and x-swarp-user; swarp.nl answers /api/guild/bediener itself (logged in, administrator). support.swarp.nl/gilde redirects to swarp.nl; Support supplies the occupation table to the MAZE via /api/beroepen/namens (secret only).

GET /api/guild/personen · /persoon?id= · /vakken · /werkplekken · /open-plekkenthe shared layer (never the private layer)
GET /api/guild/toestand · /afstand · /richting · /naad · /zoek · /tweede-gildereadings, each with status and explanation; reading writes nothing
POST /api/guild/klantvraag · /toestand · /naad · /naad/lezing · /driegesprek · /akkoord · /plaatsactions as a persona (als), each with a ledger line
POST /api/guild/leerstap/behaald · /werk · /beoordeel · /klassesprong · /koppel · /koppeling/akkoord · /vak/vensterslikewise
POST /api/guild/plaatsing/einde · /plaatsing/verzuim · /uitkomstoutcome measures for the later research questions
GET /api/guild/ik?als= · /ik/prive?als= · POST /api/guild/verwijderaccess, private layer and deletion (GDPR)
GET /api/guild/grootboek · /regels · POST /api/guild/opnieuwledger with chain check and the rules with status; start over for administrators only