@smartytalent/mcp-tools 0.9.56 → 0.9.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tools.json +106 -12
- package/package.json +1 -1
package/dist/tools.json
CHANGED
|
@@ -5307,6 +5307,16 @@
|
|
|
5307
5307
|
"type": "string",
|
|
5308
5308
|
"description": "Source of the job posting (e.g. email, erecruiter)"
|
|
5309
5309
|
},
|
|
5310
|
+
"externalId": {
|
|
5311
|
+
"type": "string",
|
|
5312
|
+
"maxLength": 255,
|
|
5313
|
+
"description": "The job's reference in an ATS (2026-10-10, PLAN_ATS_INTEGRATION_STANDARD 1a): the recruitment's id exactly as the ATS shows it (eRecruiter's recruitment id, Teamtailor's job id). Travels with `externalProvider` - both or none; `null` removes the link (both attributes). Written by ReCops and above or by the organisation's virtual employee (403 for the other roles); the provider must be an ATS the virtual employee is connected to (400 `SM_ERROR_NOT_CONNECTED`); one ATS recruitment links to at most one job of the organisation (409 `SM_ERROR_CONFLICT` naming the other job). Absent when the job has no link. An application arriving from that ATS is matched to this job by the pair; never written into `shortCode`, which is our own number and the last segment of the apply address."
|
|
5314
|
+
},
|
|
5315
|
+
"externalProvider": {
|
|
5316
|
+
"type": "string",
|
|
5317
|
+
"maxLength": 64,
|
|
5318
|
+
"description": "The catalogue id of the ATS `externalId` belongs to (`erecruiter`, `teamtailor`; `GET /v1/integrations` kind `ats`). Set and cleared together with `externalId`."
|
|
5319
|
+
},
|
|
5310
5320
|
"recruitmentType": {
|
|
5311
5321
|
"type": "string",
|
|
5312
5322
|
"enum": [
|
|
@@ -5371,6 +5381,19 @@
|
|
|
5371
5381
|
"maximum": 1000,
|
|
5372
5382
|
"description": "Stage 3 (2026-10-06): how many people the job hires (brief.intakeContext.headcount). Written by the job build (copied); PATCH-able (an integer from 1 to 1000); null clears it."
|
|
5373
5383
|
},
|
|
5384
|
+
"workingTime": {
|
|
5385
|
+
"type": "array",
|
|
5386
|
+
"items": {
|
|
5387
|
+
"type": "string",
|
|
5388
|
+
"enum": [
|
|
5389
|
+
"1/4",
|
|
5390
|
+
"1/2",
|
|
5391
|
+
"3/4",
|
|
5392
|
+
"full-time"
|
|
5393
|
+
]
|
|
5394
|
+
},
|
|
5395
|
+
"description": "The strict first gate (S.K. 2026-10-07): the working-time fractions the hiring manager's contract offers, read off brief.employmentType by the job build (code, never a model: '1/2, 3/4 or full-time' -> the three tokens; a text naming no fraction leaves the field absent). The application form asks 'which working time?' with the four fractions and rejects a choice the job does not offer - only when the job offers a part-time fraction or several fractions (a full-time-only job keeps the minimum of fields). Not PATCH-able: a rebuild of the job reads it again."
|
|
5396
|
+
},
|
|
5374
5397
|
"languageCode": {
|
|
5375
5398
|
"type": "string",
|
|
5376
5399
|
"description": "Primary language code for the job posting (e.g. en-US, pl-PL)"
|
|
@@ -6287,6 +6310,16 @@
|
|
|
6287
6310
|
"type": "string",
|
|
6288
6311
|
"description": "Source of the job posting (e.g. email, erecruiter)"
|
|
6289
6312
|
},
|
|
6313
|
+
"externalId": {
|
|
6314
|
+
"type": "string",
|
|
6315
|
+
"maxLength": 255,
|
|
6316
|
+
"description": "The job's reference in an ATS (2026-10-10, PLAN_ATS_INTEGRATION_STANDARD 1a): the recruitment's id exactly as the ATS shows it (eRecruiter's recruitment id, Teamtailor's job id). Travels with `externalProvider` - both or none; `null` removes the link (both attributes). Written by ReCops and above or by the organisation's virtual employee (403 for the other roles); the provider must be an ATS the virtual employee is connected to (400 `SM_ERROR_NOT_CONNECTED`); one ATS recruitment links to at most one job of the organisation (409 `SM_ERROR_CONFLICT` naming the other job). Absent when the job has no link. An application arriving from that ATS is matched to this job by the pair; never written into `shortCode`, which is our own number and the last segment of the apply address."
|
|
6317
|
+
},
|
|
6318
|
+
"externalProvider": {
|
|
6319
|
+
"type": "string",
|
|
6320
|
+
"maxLength": 64,
|
|
6321
|
+
"description": "The catalogue id of the ATS `externalId` belongs to (`erecruiter`, `teamtailor`; `GET /v1/integrations` kind `ats`). Set and cleared together with `externalId`."
|
|
6322
|
+
},
|
|
6290
6323
|
"recruitmentType": {
|
|
6291
6324
|
"type": "string",
|
|
6292
6325
|
"enum": [
|
|
@@ -6351,6 +6384,19 @@
|
|
|
6351
6384
|
"maximum": 1000,
|
|
6352
6385
|
"description": "Stage 3 (2026-10-06): how many people the job hires (brief.intakeContext.headcount). Written by the job build (copied); PATCH-able (an integer from 1 to 1000); null clears it."
|
|
6353
6386
|
},
|
|
6387
|
+
"workingTime": {
|
|
6388
|
+
"type": "array",
|
|
6389
|
+
"items": {
|
|
6390
|
+
"type": "string",
|
|
6391
|
+
"enum": [
|
|
6392
|
+
"1/4",
|
|
6393
|
+
"1/2",
|
|
6394
|
+
"3/4",
|
|
6395
|
+
"full-time"
|
|
6396
|
+
]
|
|
6397
|
+
},
|
|
6398
|
+
"description": "The strict first gate (S.K. 2026-10-07): the working-time fractions the hiring manager's contract offers, read off brief.employmentType by the job build (code, never a model: '1/2, 3/4 or full-time' -> the three tokens; a text naming no fraction leaves the field absent). The application form asks 'which working time?' with the four fractions and rejects a choice the job does not offer - only when the job offers a part-time fraction or several fractions (a full-time-only job keeps the minimum of fields). Not PATCH-able: a rebuild of the job reads it again."
|
|
6399
|
+
},
|
|
6354
6400
|
"languageCode": {
|
|
6355
6401
|
"type": "string",
|
|
6356
6402
|
"description": "Primary language code for the job posting (e.g. en-US, pl-PL)"
|
|
@@ -7439,7 +7485,8 @@
|
|
|
7439
7485
|
},
|
|
7440
7486
|
"meta": {
|
|
7441
7487
|
"type": "object",
|
|
7442
|
-
"additionalProperties": true
|
|
7488
|
+
"additionalProperties": true,
|
|
7489
|
+
"description": "The analysis' record on the row. `verdict` (verdict-v1): band, code, the must outcomes (`must.met[]` with `reason: formDeclared | declaredOnly`, `must.failed[]`, `must.unverified[]`, `must.toClarify[]` = the salary without a figure), and - the screening package A, 2026-10-07 - the card's flags `verdict.declaredOnly[]` (musts met on the application form's word alone), `verdict.noReadableDocument` (the document gave the extraction nothing), `verdict.salaryToClarify` (no salary figure on the candidate's side, or the salary scale's 3: 5-20% above the ceiling or more than 5% below the floor), `verdict.formSetAside[]` (the criteria whose application-form answer RecOps set aside when it ordered the analysis past the knockout - the CV decided them; `must.unverified[]` entries with `reason: formSetAside` where the CV said nothing about the requirement; the answers and the reason are in `knockoutReleased`). `knockoutFailure.failures[]` (a row the form rejected: `fieldId`, `verifies`, `expected`, `actual`; package B adds `label`, `answerLabel`, `expectedLabel` in the job's language - the reason RecOps reads; a `multiple` select's failure adds `actualValues`, the picks, with `actual` and `answerLabel` joining them - package 3a). `knockoutReleased` (package B: RecOps' candidates:analyze past the form's knockout - `by`, `at`, `taskId`, `reason`, `knockout {failures, band}`, `submissionId` = the application released; kept after the analysis, while `decision` reads `analyzeAnyway` only until the verdict's decision replaces it; a later re-application keeps the key, so the current application was analysed past the knockout only when `submissionId` equals `lastSubmissionId`). `decision`, `mandatoryCheck`, `provenance`, `lastSubmissionId` and the arc keys as before."
|
|
7443
7490
|
}
|
|
7444
7491
|
}
|
|
7445
7492
|
},
|
|
@@ -7498,6 +7545,26 @@
|
|
|
7498
7545
|
},
|
|
7499
7546
|
"id": {
|
|
7500
7547
|
"type": "string"
|
|
7548
|
+
},
|
|
7549
|
+
"meta": {
|
|
7550
|
+
"title": "CandidateFileLinkMetaSchema",
|
|
7551
|
+
"type": "object",
|
|
7552
|
+
"description": "Plan #2 (S.K. 2026-10-08): the state of this file OF THE APPLICATION - every file of it is linked, read or not; its type is the file's own `type`. Absent on links written before.",
|
|
7553
|
+
"properties": {
|
|
7554
|
+
"status": {
|
|
7555
|
+
"type": "string",
|
|
7556
|
+
"enum": [
|
|
7557
|
+
"read",
|
|
7558
|
+
"notRead",
|
|
7559
|
+
"failed"
|
|
7560
|
+
],
|
|
7561
|
+
"description": "read = the CV, or an evidence document the document reader read; notRead = typed, not read for facts; failed = the file failed or was refused."
|
|
7562
|
+
},
|
|
7563
|
+
"reason": {
|
|
7564
|
+
"type": "string",
|
|
7565
|
+
"description": "notRead: limit (an evidence document past the reader's 5) | secondCv | identityDocument | noFactSource (a cover letter, references, the rest) | readerFailed (the document reader or the profile update did not complete; the file itself is fine); failed: the file's error code (DOCUMENT_TOO_LARGE, UNSUPPORTED_FORMAT, CONVERSION_FAILED, DOCUMENT_UNREADABLE, FILE_ANALYSIS_FAILED)."
|
|
7566
|
+
}
|
|
7567
|
+
}
|
|
7501
7568
|
}
|
|
7502
7569
|
}
|
|
7503
7570
|
}
|
|
@@ -8086,7 +8153,8 @@
|
|
|
8086
8153
|
},
|
|
8087
8154
|
"meta": {
|
|
8088
8155
|
"type": "object",
|
|
8089
|
-
"additionalProperties": true
|
|
8156
|
+
"additionalProperties": true,
|
|
8157
|
+
"description": "The analysis' record on the row. `verdict` (verdict-v1): band, code, the must outcomes (`must.met[]` with `reason: formDeclared | declaredOnly`, `must.failed[]`, `must.unverified[]`, `must.toClarify[]` = the salary without a figure), and - the screening package A, 2026-10-07 - the card's flags `verdict.declaredOnly[]` (musts met on the application form's word alone), `verdict.noReadableDocument` (the document gave the extraction nothing), `verdict.salaryToClarify` (no salary figure on the candidate's side, or the salary scale's 3: 5-20% above the ceiling or more than 5% below the floor), `verdict.formSetAside[]` (the criteria whose application-form answer RecOps set aside when it ordered the analysis past the knockout - the CV decided them; `must.unverified[]` entries with `reason: formSetAside` where the CV said nothing about the requirement; the answers and the reason are in `knockoutReleased`). `knockoutFailure.failures[]` (a row the form rejected: `fieldId`, `verifies`, `expected`, `actual`; package B adds `label`, `answerLabel`, `expectedLabel` in the job's language - the reason RecOps reads; a `multiple` select's failure adds `actualValues`, the picks, with `actual` and `answerLabel` joining them - package 3a). `knockoutReleased` (package B: RecOps' candidates:analyze past the form's knockout - `by`, `at`, `taskId`, `reason`, `knockout {failures, band}`, `submissionId` = the application released; kept after the analysis, while `decision` reads `analyzeAnyway` only until the verdict's decision replaces it; a later re-application keeps the key, so the current application was analysed past the knockout only when `submissionId` equals `lastSubmissionId`). `decision`, `mandatoryCheck`, `provenance`, `lastSubmissionId` and the arc keys as before."
|
|
8090
8158
|
}
|
|
8091
8159
|
}
|
|
8092
8160
|
},
|
|
@@ -8145,6 +8213,26 @@
|
|
|
8145
8213
|
},
|
|
8146
8214
|
"id": {
|
|
8147
8215
|
"type": "string"
|
|
8216
|
+
},
|
|
8217
|
+
"meta": {
|
|
8218
|
+
"title": "CandidateFileLinkMetaSchema",
|
|
8219
|
+
"type": "object",
|
|
8220
|
+
"description": "Plan #2 (S.K. 2026-10-08): the state of this file OF THE APPLICATION - every file of it is linked, read or not; its type is the file's own `type`. Absent on links written before.",
|
|
8221
|
+
"properties": {
|
|
8222
|
+
"status": {
|
|
8223
|
+
"type": "string",
|
|
8224
|
+
"enum": [
|
|
8225
|
+
"read",
|
|
8226
|
+
"notRead",
|
|
8227
|
+
"failed"
|
|
8228
|
+
],
|
|
8229
|
+
"description": "read = the CV, or an evidence document the document reader read; notRead = typed, not read for facts; failed = the file failed or was refused."
|
|
8230
|
+
},
|
|
8231
|
+
"reason": {
|
|
8232
|
+
"type": "string",
|
|
8233
|
+
"description": "notRead: limit (an evidence document past the reader's 5) | secondCv | identityDocument | noFactSource (a cover letter, references, the rest) | readerFailed (the document reader or the profile update did not complete; the file itself is fine); failed: the file's error code (DOCUMENT_TOO_LARGE, UNSUPPORTED_FORMAT, CONVERSION_FAILED, DOCUMENT_UNREADABLE, FILE_ANALYSIS_FAILED)."
|
|
8234
|
+
}
|
|
8235
|
+
}
|
|
8148
8236
|
}
|
|
8149
8237
|
}
|
|
8150
8238
|
}
|
|
@@ -8504,7 +8592,8 @@
|
|
|
8504
8592
|
"type": "string"
|
|
8505
8593
|
},
|
|
8506
8594
|
"status": {
|
|
8507
|
-
"type": "string"
|
|
8595
|
+
"type": "string",
|
|
8596
|
+
"description": "pending | uploaded | success | failed | archived. `failed` = the conversion or the analysis failed, or the file was REFUSED at intake (plan #2 P2: too large / an unsupported format) - meta.failure says which."
|
|
8508
8597
|
},
|
|
8509
8598
|
"extension": {
|
|
8510
8599
|
"type": "string"
|
|
@@ -8519,7 +8608,8 @@
|
|
|
8519
8608
|
"type": "string"
|
|
8520
8609
|
},
|
|
8521
8610
|
"type": {
|
|
8522
|
-
"type": "string"
|
|
8611
|
+
"type": "string",
|
|
8612
|
+
"description": "The document's type as the file reader classified it (plan #2): resume, coverLetter, certificate (diplomas included), licence (a driving licence, a driver card), identityDocument (an ID card, a passport, a residence card), referenceLetter, portfolio, assessmentResult, jobBrief, jobDescription, document (anything else); videoRecording / audioRecording for media; undefined before the reader ran. Not an enum: rows written earlier may carry other values."
|
|
8523
8613
|
},
|
|
8524
8614
|
"kind": {
|
|
8525
8615
|
"type": "string",
|
|
@@ -8739,7 +8829,8 @@
|
|
|
8739
8829
|
"type": "string"
|
|
8740
8830
|
},
|
|
8741
8831
|
"status": {
|
|
8742
|
-
"type": "string"
|
|
8832
|
+
"type": "string",
|
|
8833
|
+
"description": "pending | uploaded | success | failed | archived. `failed` = the conversion or the analysis failed, or the file was REFUSED at intake (plan #2 P2: too large / an unsupported format) - meta.failure says which."
|
|
8743
8834
|
},
|
|
8744
8835
|
"extension": {
|
|
8745
8836
|
"type": "string"
|
|
@@ -8754,7 +8845,8 @@
|
|
|
8754
8845
|
"type": "string"
|
|
8755
8846
|
},
|
|
8756
8847
|
"type": {
|
|
8757
|
-
"type": "string"
|
|
8848
|
+
"type": "string",
|
|
8849
|
+
"description": "The document's type as the file reader classified it (plan #2): resume, coverLetter, certificate (diplomas included), licence (a driving licence, a driver card), identityDocument (an ID card, a passport, a residence card), referenceLetter, portfolio, assessmentResult, jobBrief, jobDescription, document (anything else); videoRecording / audioRecording for media; undefined before the reader ran. Not an enum: rows written earlier may carry other values."
|
|
8758
8850
|
},
|
|
8759
8851
|
"kind": {
|
|
8760
8852
|
"type": "string",
|
|
@@ -9991,7 +10083,7 @@
|
|
|
9991
10083
|
},
|
|
9992
10084
|
"content": {
|
|
9993
10085
|
"type": "string",
|
|
9994
|
-
"description": "The field schema, JSON-encoded: a flat map of `fieldId -> field`.\nA field carries `label` and `description` as locale maps, a\n`type` (text, textarea, select, checkbox, file, email, phone,\ndate, number), `required`, and for a select an `options` list of\n`{value, label}` - the candidate submits `value`, never the\nlocalized label.\n\nA knockout field adds `knockout: true`, `verifies` (the criterion\nit gates on) and `expectedAnswer` (the PASSING answer, matching\none of the option values for a select). The submission gate\nrejects a candidate on a failed knockout without any AI spend, so\na knockout missing `expectedAnswer` is refused: the gate would\nskip it and admit everyone. A knockout on a checkbox is refused\ntoo - a required checkbox renders as must-tick, so \"No\" cannot be\nexpressed and the gate could never fire.\n\nEvery label and option label must carry text in the form's\n`languageCode` or in `en-US` - the locales the apply page falls\nback to. A label that resolves in neither renders blank for the\ncandidate and is refused.\n\nAn apply form (`kind: candidateSubmission`) must keep the\n`fullName`, `email`, `phone` and `cv` fields: the apply page maps\nthem onto first-class submission slots.\n\nRejections come back as one error object per violation, each with\na `source.pointer` at the offending field. Limit: 131072 bytes."
|
|
10086
|
+
"description": "The field schema, JSON-encoded: a flat map of `fieldId -> field`.\nA field carries `label` and `description` as locale maps, a\n`type` (text, textarea, select, checkbox, file, email, phone,\ndate, number), `required`, and for a select an `options` list of\n`{value, label}` - the candidate submits `value`, never the\nlocalized label. A `file` field may take several files: `multiple:\ntrue` and `maxFiles` (the apply form's CV field: 6 - the CV + 5\ndocuments; plan #2, S.K. 2026-10-08: no separate field, the CV is\nfound by its type). A `select` with `multiple: true` takes several\npicks: the candidate submits an ARRAY of option values (the\nworking-time select of an apply form, package 3a, 2026-10-09).\n`multiple` is refused on any other field type.\n\nA knockout field adds `knockout: true`, `verifies` (the criterion\nit gates on) and `expectedAnswer` (the PASSING answer, matching\none of the option values for a select; since the strict first gate\nof 2026-10-07 it may be an ARRAY of option values - any of them\npasses: the weekends select 0-4 gating at the job's minimum, the\nworking-time select 1/4 / 1/2 / 3/4 / full-time gating on the\nfractions the job offers; the experience select gates on\n`{N}-years-or-more` aligned to the job's minimum). A `multiple`\nselect knockout needs an ARRAY `expectedAnswer` and passes when ANY\npick is in it. The submission gate\nrejects a candidate on a failed knockout without any AI spend, so\na knockout missing `expectedAnswer` is refused: the gate would\nskip it and admit everyone. A knockout on a checkbox is refused\ntoo - a required checkbox renders as must-tick, so \"No\" cannot be\nexpressed and the gate could never fire.\n\nEvery label and option label must carry text in the form's\n`languageCode` or in `en-US` - the locales the apply page falls\nback to. A label that resolves in neither renders blank for the\ncandidate and is refused.\n\nAn apply form (`kind: candidateSubmission`) must keep the\n`fullName`, `email`, `phone` and `cv` fields: the apply page maps\nthem onto first-class submission slots.\n\nRejections come back as one error object per violation, each with\na `source.pointer` at the offending field. Limit: 131072 bytes."
|
|
9995
10087
|
},
|
|
9996
10088
|
"publish": {
|
|
9997
10089
|
"type": "boolean",
|
|
@@ -10134,7 +10226,7 @@
|
|
|
10134
10226
|
},
|
|
10135
10227
|
"content": {
|
|
10136
10228
|
"type": "string",
|
|
10137
|
-
"description": "The field schema, JSON-encoded: a flat map of `fieldId -> field`.\nA field carries `label` and `description` as locale maps, a\n`type` (text, textarea, select, checkbox, file, email, phone,\ndate, number), `required`, and for a select an `options` list of\n`{value, label}` - the candidate submits `value`, never the\nlocalized label.\n\nA knockout field adds `knockout: true`, `verifies` (the criterion\nit gates on) and `expectedAnswer` (the PASSING answer, matching\none of the option values for a select). The submission gate\nrejects a candidate on a failed knockout without any AI spend, so\na knockout missing `expectedAnswer` is refused: the gate would\nskip it and admit everyone. A knockout on a checkbox is refused\ntoo - a required checkbox renders as must-tick, so \"No\" cannot be\nexpressed and the gate could never fire.\n\nEvery label and option label must carry text in the form's\n`languageCode` or in `en-US` - the locales the apply page falls\nback to. A label that resolves in neither renders blank for the\ncandidate and is refused.\n\nAn apply form (`kind: candidateSubmission`) must keep the\n`fullName`, `email`, `phone` and `cv` fields: the apply page maps\nthem onto first-class submission slots.\n\nRejections come back as one error object per violation, each with\na `source.pointer` at the offending field. Limit: 131072 bytes."
|
|
10229
|
+
"description": "The field schema, JSON-encoded: a flat map of `fieldId -> field`.\nA field carries `label` and `description` as locale maps, a\n`type` (text, textarea, select, checkbox, file, email, phone,\ndate, number), `required`, and for a select an `options` list of\n`{value, label}` - the candidate submits `value`, never the\nlocalized label. A `file` field may take several files: `multiple:\ntrue` and `maxFiles` (the apply form's CV field: 6 - the CV + 5\ndocuments; plan #2, S.K. 2026-10-08: no separate field, the CV is\nfound by its type). A `select` with `multiple: true` takes several\npicks: the candidate submits an ARRAY of option values (the\nworking-time select of an apply form, package 3a, 2026-10-09).\n`multiple` is refused on any other field type.\n\nA knockout field adds `knockout: true`, `verifies` (the criterion\nit gates on) and `expectedAnswer` (the PASSING answer, matching\none of the option values for a select; since the strict first gate\nof 2026-10-07 it may be an ARRAY of option values - any of them\npasses: the weekends select 0-4 gating at the job's minimum, the\nworking-time select 1/4 / 1/2 / 3/4 / full-time gating on the\nfractions the job offers; the experience select gates on\n`{N}-years-or-more` aligned to the job's minimum). A `multiple`\nselect knockout needs an ARRAY `expectedAnswer` and passes when ANY\npick is in it. The submission gate\nrejects a candidate on a failed knockout without any AI spend, so\na knockout missing `expectedAnswer` is refused: the gate would\nskip it and admit everyone. A knockout on a checkbox is refused\ntoo - a required checkbox renders as must-tick, so \"No\" cannot be\nexpressed and the gate could never fire.\n\nEvery label and option label must carry text in the form's\n`languageCode` or in `en-US` - the locales the apply page falls\nback to. A label that resolves in neither renders blank for the\ncandidate and is refused.\n\nAn apply form (`kind: candidateSubmission`) must keep the\n`fullName`, `email`, `phone` and `cv` fields: the apply page maps\nthem onto first-class submission slots.\n\nRejections come back as one error object per violation, each with\na `source.pointer` at the offending field. Limit: 131072 bytes."
|
|
10138
10230
|
},
|
|
10139
10231
|
"publish": {
|
|
10140
10232
|
"type": "boolean",
|
|
@@ -13585,7 +13677,7 @@
|
|
|
13585
13677
|
},
|
|
13586
13678
|
"fields": {
|
|
13587
13679
|
"type": "object",
|
|
13588
|
-
"description": "Form fields keyed by field identifier. Each field contains localized content grouped by language code. Structure: {fieldKey: {langCode: {label, description, value, type, relevance, clarity, completeness, confidence, reasoning}}}."
|
|
13680
|
+
"description": "Form fields keyed by field identifier. Each field contains localized content grouped by language code. Structure: {fieldKey: {langCode: {label, description, value, type, relevance, clarity, completeness, confidence, reasoning}}}. `value` is a string, or an ARRAY of option values for a `multiple` select (package 3a): the picks are copied, never translated."
|
|
13589
13681
|
},
|
|
13590
13682
|
"files": {
|
|
13591
13683
|
"type": "array",
|
|
@@ -13880,6 +13972,8 @@
|
|
|
13880
13972
|
},
|
|
13881
13973
|
"files": {
|
|
13882
13974
|
"type": "array",
|
|
13975
|
+
"maxItems": 10,
|
|
13976
|
+
"description": "The application's files (at most 10; each fileKey one the form's upload door issued - #66). The CV is found by its type (plan #2), not by its position.",
|
|
13883
13977
|
"items": {
|
|
13884
13978
|
"type": "object",
|
|
13885
13979
|
"properties": {
|
|
@@ -14126,7 +14220,7 @@
|
|
|
14126
14220
|
},
|
|
14127
14221
|
"fields": {
|
|
14128
14222
|
"type": "object",
|
|
14129
|
-
"description": "Form fields keyed by field identifier. Each field contains localized content grouped by language code. Structure: {fieldKey: {langCode: {label, description, value, type, relevance, clarity, completeness, confidence, reasoning}}}."
|
|
14223
|
+
"description": "Form fields keyed by field identifier. Each field contains localized content grouped by language code. Structure: {fieldKey: {langCode: {label, description, value, type, relevance, clarity, completeness, confidence, reasoning}}}. `value` is a string, or an ARRAY of option values for a `multiple` select (package 3a): the picks are copied, never translated."
|
|
14130
14224
|
},
|
|
14131
14225
|
"files": {
|
|
14132
14226
|
"type": "array",
|
|
@@ -18804,7 +18898,7 @@
|
|
|
18804
18898
|
"route": {
|
|
18805
18899
|
"type": "string",
|
|
18806
18900
|
"maxLength": 64,
|
|
18807
|
-
"description": "Workflow routing key (`namespace:verb`). The operator e-mail lane has exactly three: `emails:reply`, `emails:compose`, `emails:send` - nothing else. Optional, normalised to lowercase and shape-validated at create, stamped on the row and IMMUTABLE afterwards - a PATCH carrying route is rejected with 400. Creating a task whose route matches emails:* requires role recruiter/recops/admin/owner (hiringmanager and auditor are denied); the same gate guards a PATCH of an emails:* row."
|
|
18901
|
+
"description": "Workflow routing key (`namespace:verb`). The operator e-mail lane has exactly three: `emails:reply`, `emails:compose`, `emails:send` - nothing else. Optional, normalised to lowercase and shape-validated at create, stamped on the row and IMMUTABLE afterwards - a PATCH carrying route is rejected with 400. Creating a task whose route matches emails:* requires role recruiter/recops/admin/owner (hiringmanager and auditor are denied); the same gate guards a PATCH of an emails:* row. The RecOps doors on a candidate ride the same key with the candidate in `relationships.candidates` and their order in `meta`: `candidates:opinion` (`meta.override`, see the criterion's `override`), `candidates:stage` (`meta.stage`), and - the screening package B, 2026-10-07 - `candidates:analyze` (`meta.analyze {reason}`: analyse a candidate the application form knocked out; the action clears the knockout, keeps it in `meta.decision` history and runs the analysis on the pointed submission; the task closes `done`, or `failed` with the reason when the row is not a knockout)."
|
|
18808
18902
|
},
|
|
18809
18903
|
"kind": {
|
|
18810
18904
|
"type": "string",
|
|
@@ -19113,7 +19207,7 @@
|
|
|
19113
19207
|
"route": {
|
|
19114
19208
|
"type": "string",
|
|
19115
19209
|
"maxLength": 64,
|
|
19116
|
-
"description": "Workflow routing key (`namespace:verb`). The operator e-mail lane has exactly three: `emails:reply`, `emails:compose`, `emails:send` - nothing else. Optional, normalised to lowercase and shape-validated at create, stamped on the row and IMMUTABLE afterwards - a PATCH carrying route is rejected with 400. Creating a task whose route matches emails:* requires role recruiter/recops/admin/owner (hiringmanager and auditor are denied); the same gate guards a PATCH of an emails:* row."
|
|
19210
|
+
"description": "Workflow routing key (`namespace:verb`). The operator e-mail lane has exactly three: `emails:reply`, `emails:compose`, `emails:send` - nothing else. Optional, normalised to lowercase and shape-validated at create, stamped on the row and IMMUTABLE afterwards - a PATCH carrying route is rejected with 400. Creating a task whose route matches emails:* requires role recruiter/recops/admin/owner (hiringmanager and auditor are denied); the same gate guards a PATCH of an emails:* row. The RecOps doors on a candidate ride the same key with the candidate in `relationships.candidates` and their order in `meta`: `candidates:opinion` (`meta.override`, see the criterion's `override`), `candidates:stage` (`meta.stage`), and - the screening package B, 2026-10-07 - `candidates:analyze` (`meta.analyze {reason}`: analyse a candidate the application form knocked out; the action clears the knockout, keeps it in `meta.decision` history and runs the analysis on the pointed submission; the task closes `done`, or `failed` with the reason when the row is not a knockout)."
|
|
19117
19211
|
},
|
|
19118
19212
|
"kind": {
|
|
19119
19213
|
"type": "string",
|