3.65.What the classification vocabularies are, what the system checks before it delivers, what it confirms versus what it infers, and what we have actually measured about whether it repeats itself. Including the claims we have withdrawn.
| Engine on this page | Role Intel | Profile Intel |
|---|---|---|
| Renderer | 27.9.67 | 16.92 |
| Delivery check before sending | gate 1.14 (21 coded rules) | Quality Reviewer gate (29 phases) |
| Salary tables | 3.65 | 2.77 |
| Object transformer | 2.4.8 | 1.16.2 |
| Request builder · prompt | 4.23.0 | 3.35.22 · prompt 3.35.26 via patch 1.4.0 |
| Input step | calibrator prompt 1.1 | input builder 1.9 |
| Reviewer prompt | 2.9 | 3.20.12 |
| Index emit | 0.3.3 | 0.3.0 |
| ESCO codes | terms 1.0.0 · shown, exact matches only | lookup 0.1.0 · stored, not shown |
| Generation temperature | 0 since 2 Oct 2026 | 0.3 |
| Last repeat-run measurement | 1 Oct 2026 | 1 Oct 2026 |
Read back from the live workflows on 5 October 2026, not from notes. The product columns were reviewed line by line on 23 September; newer facts are added as notes dated 5 October and in the changelog. Where an older sentence and a newer dated note disagree, the dated note is current.
Both are read from a document you submit, both are delivered to this domain, and both run on the same engine. What differs is what they read, what they emit, and how much of each has been measured. They are set side by side so the difference is visible rather than asserted — including where one column is fuller than the other.
There is a second reason they sit together. Both already emit the same class of structured output — a closed classification, an evidence trail, a pay figure with its basis stated — and that shared shape is what a future comparison layer would read. Role × Profile, the planned layer that reads a person's structured profile directly against a role's structured demand, does not exist yet. When it does, it will not re-read either document; it will read the two structured outputs this page already documents. Nothing below should be taken as evidence that layer is built — the open backlog on each side, and the "On the roadmap" section further down, are what is actually true today.
| Product | Comparable today | Open backlog |
|---|---|---|
| Role Intel | 4 of 7 fields — the money and what feeds it, not the archetype word | 14 open |
| Profile Intel | 7 of 9 fields — the money and the vocabulary, not management tier or peak reports | 7 open |
Counted by hand from the comparability tables and open-backlog lists below on every weekly update — not computed, and not a substitute for reading either list.
5 October 2026: backlog counts recounted from the lists below (the counts shown on 23 September were already behind them). Items closed today stay on the list, marked closed with their evidence. The comparability column was not recounted; the repeat-run cards in each column show what moved.
A structured read of a role — what a job description is actually asking for, and how to read it.
Same test as the column beside this one: for each value list, does the prompt lock it or merely list it. Role Intel answers worse than Profile Intel on the first vocabulary, and that is the most important line on this page.
Builder · Operator · Specialist · Connector · Fixer · Translator · Anchor
Until 10 September 2026 the prompt carried the seven bare words and no definitions; the definitions existed only as tooltip strings in the renderer, written after the fact, and the model never saw them. That is no longer true. Each of the seven now carries a written definition in the prompt itself, together with the evidence necessary for it to apply at all, the evidence sufficient to assign it decisively, and named patterns that resemble it and are not it. Job titles, seniority words, industry, culture language and tool lists are excluded as evidence by rule. A role carries a dominant type and may carry a secondary.
The vocabulary is still not runtime-validated. The reviewer is instructed to fail an off-vocabulary value as severe, and a legacy eighth value is coerced before storage — but neither is a deterministic check in code, which is why this heading says defined rather than closed. Whether the definitions make the assignment reproduce is a separate question, measured separately, and it has not been measured yet.
Senior IC · Manager · Senior Manager · Director · VP/Executive
These five are the rungs the pay engine can actually price and label.
Three problems sit behind that sentence. The free-text matcher accepts seventeen tokens and
maps them onto those five. ic_junior is priced but has no band label, so a
junior role is captioned with the senior band's name, and it is absent from the ladder, so it can
never be scope-adjusted. And ic_mid, c_level and head_of are
referenced by three consumers but producible by none.
Families resolve through an alias map to a canonical set. Geography
resolves to one of ten bands: four Romanian cities plus RO_other, and
EU_west, EU_cee, EU_south, EU_nordic_ch,
EU_unspecified. Pay is held per family × geography × rung.
Calibrated or Estimated, with
Disclosed where the employer published a band. Any inferred seniority forces
Estimated.
Calibrated. The label now follows the actual basis in all four cases,
shipped 7 September 2026. More published figures read Estimated than did before,
and that is the correct direction. Briefs delivered between 1 and 7 September that carried an
ambiguous title may show Calibrated where they should read Estimated;
the figure itself is unchanged, only its confidence label. If you hold one and want it re-issued,
ask.gap_type — the label naming what a role is missing — has no fixed
list: two runs of the same input produced eight distinct labels with one overlap. And
role_seniority_chip has no runtime validator anywhere in the pipeline; the
sister product has been observed emitting C-level, which is off-vocabulary, and it
reached a pay band regardless. Both are open. Recorded 2 September 2026.
| Field | Vocabulary | Reproduced | Comparable? |
|---|---|---|---|
| Seniority band (pay) | closed, 5 | yes | yes |
| Family · geography | closed | yes | yes |
| Likely offer · ask · range | derived from those three | yes, to the euro | yes |
| Pay confidence tier | closed, 3 | yes | yes |
| Role archetype | listed, not locked | no — 3 of 5 | NO |
| Secondary archetype | listed, not locked | no — 1 of 6 | NO |
| Gap type | not closed | no | NO |
| Prose, ordering, phrasing | free | no, by design | not intended to be |
So the honest claim is that two Role Intel briefs are comparable on money and on the classifications that set it, and not on the single word that names the role's shape. That word is the most quotable thing on the brief and it is the least reproducible.
Everything comes from the job description submitted. Nothing is looked up: the posting is not fetched, the employer is not researched, no listing is retrieved.
These are readings of a posting, not facts about the employer.
Deterministic code inside the renderer, not a model. Nineteen
numbered rules, DG-01 to DG-19, gate version 1.8. Each
finding carries a rule id, a severity, a message and a machine-readable evidence object. Any
finding at BLOCK stops delivery; WARN findings are recorded and the brief
ships.
Why 1.8, briefly: 1.7 could reject its own correct output. One rule demanded a verdict — under-priced, over-priced, or aligned — on every brief, including ones priced against a job description that published its own salary grid, where no verdict was ever computable. 1.8 tells the two cases apart before asking for a verdict. The incident that surfaced it is below, dated.
| # | Checks | # | Checks |
|---|---|---|---|
| DG-01 | Indexability / robots contract | DG-11 | Fabricated provenance ("retrieved the JD") |
| DG-02 | Verbatim JD span leakage | DG-12 | Renderer produced a deliverable brief |
| DG-03 | Third-party email / phone leakage | DG-13 | Function-area count vs calibrator |
| DG-04 | Named third-party employers on a public page | DG-14 | No figure above a published ceiling |
| DG-05 | Salary node contract completeness | DG-15 | Ask basis matches the ask figure |
| DG-06 | Scope bump must not leak into likely offer | DG-16 | Floor-only and degenerate disclosed ranges |
| DG-07 | Estimated-family band above Estimated confidence | DG-17 | Unanchored geography vs a rendered figure |
| DG-08 | EU anchor cap against evaluated value | DG-18 | Editorial claims vs evidence |
| DG-09 | Offer plausibility, disclosed and modelled paths | DG-19 | Comp scenarios vs the offer figure |
| DG-10 | Banned strings in the delivered brief |
1.8. The live gate is 1.14 and has twenty-one rules. DG-20
(gate 1.12, 4 Oct) blocks delivery when a posting that is not employment renders a salary figure.
DG-21 (gate 1.13, 5 Oct) warns, and never blocks, when the brief's written commentary
contradicts the computed comparison with a published pay range. Gate 1.14 (5 Oct) fixed
DG-17: it searched for a piece of stylesheet text rather than a rendered pay figure,
and in one tested case blocked a correct brief. Versions 1.9 to 1.11 are recorded in the
renderer's own change notes and are not itemised here yet.delivery_gate_findings: the full serialised list of every finding, with ids,
severities and evidence, plus a pass flag and block and warn counts. But a blocked brief
throws, and the throw replaces the output — so the findings were lost precisely when they
mattered. On 1 September a real brief was blocked and the stored reason was 77 characters of
the tail of one sentence, with every rule id cut off; identifying the rule took a
reconstruction from the payload. Two fixes have shipped: the message is now a single line, and the
rule ids are appended at the end, where the truncation keeps them. Recorded 2 September
2026.
Three additions from 4 and 5 October 2026. Each is code around the model's reading, not a new model judgement.
Employment · Contract / fractional · Board / advisory seat · Fellowship / programme · Investment call · Volunteer role
Every posting is classified before it is priced. Only employment is
priced against employment salaries. Anything else gets an economics panel and no salary figure,
with a fixed line saying why: it is not employment, ReLoop.me does not compare it with employment
salaries, and calibrated market data for that engagement type is not available yet. Gate rule
DG-20 blocks delivery if a figure renders anyway, and these postings are kept out of
the pay index. On the stored test set, 16 of 16 employment briefs came out unchanged and 44 of 44
non-employment briefs carried no figure. Profile Intel describes engagement with different
words today (salaried, fractional, founder with equity); the two lists are not yet
reconciled.
When a posting publishes a pay range, the brief states where that range
sits against ReLoop.me's own estimate for the scope the posting describes: below, at the
low end, within or above. The comparison is made at the band edges, in gross
annual terms, by code. A typical line: “The published range sits below ReLoop.me's
estimate for this scope (…): even its ceiling (€XK) is under the band's floor
(€YK).” It compares an estimate with a published figure; it is not a market fact
and not an apply-or-pass verdict. No line is shown when no range is published, when only a floor
is published below the band's top, when the location cannot be anchored, or when pay is
equity-led. DG-21 flags a brief whose written commentary contradicts the computed
line.
The title now caps the model's seniority reading (salary
3.65, 5 Oct). A title containing “manager” is priced no higher than
Manager, and one containing “lead” or “leader” no higher than Senior
Manager, when the level comes from the model rather than the title. The cap only ever lowers a
level, and the brief says so in one line. Where the posting names no team, the brief prices the
work described rather than the title.
3.65. Re-run on the same advert, the brief now reads
within, matching the prediction written down before the fix. On roughly 40 recent briefs,
7 had been priced from a model reading above a plain title; about one recent brief in six would
now price lower.A brief can carry the role's occupation in ESCO, the European Commission's classification of skills, competences and occupations (v1.2.1), linked to its ESCO page. It is shown only when the job title matches a mapping a person has checked and marked an exact match; closest-family matches are stored and not shown. The code is read from that table with no model call, so the same title always gets the same code. Most titles have no checked mapping yet, so most briefs carry no code. Requirement terms are looked up and stored, not shown. How the mapping is built and kept current is under the common engine.
Same intent as the column beside this one, same answer in shape, but the split falls in a different place: Role Intel's money reproduces and Role Intel's headline word does not.
Two runs of the same job description on the same day reproduced the pay figures exactly. A third run, captured separately as a fixture on live code, reproduced an earlier brief's figures to the euro. A fourth case was checked by recomputing the arithmetic by hand from the published band: likely offer at the lower third of a €89,700–€152,300 grid gives €110,566.7, rounded to €110,550, and the ask at the grid maximum gives €152,300. Both matched the delivered figures digit for digit.
The pay engine is deterministic code and behaves like it. Where pay has moved between runs, the cause has been a classification changing upstream, not the table.
Sixteen runs of byte-identical input returned Builder six times, Operator six times, Fixer four times — near-uniform across three of the seven values. Temperature was tested at three settings including 0; pinning it made the spread worse, not deterministic.
Separately, six real job descriptions were each submitted twice by accident, hours apart, byte-identical. The dominant archetype reproduced in 3 of 5 comparable pairs, the secondary in 1 of 6. In one case a single submission was delivered twice from literally the same bytes and came back Operator/Translator once and Builder/Connector the other.
The cause was known and it was not mysterious: the seven archetypes were handed to the model as a bare list with no definitions. That was the cheapest experiment on the backlog, and on 10 September 2026 it was run — the seven now carry written definitions, necessary and sufficient evidence tests, named false positives, and a stated order of resolution rather than a best-fit judgement.
Those figures have now been replaced by repeat runs. The paragraph that used to sit here promised numbers rather than more description. They are in the card below.
A real, already-delivered job description. Reproduced offline: no live form submission. The live Request Builder node code was re-fetched from the workflow, and the two clauses deployed that morning were located in the captured system prompt to confirm the prompt under test is today's. The real user message was pulled from execution history straight to disk and never hand-retyped. Four independent, blind completions against that prompt and that message.
| Field | Run A | Run B | Run C | Run D | |
|---|---|---|---|---|---|
| Role title | AI Practice Lead — all four | stable | |||
| Company | Kognitiv Inc. — all four | stable | |||
| Scope mis-level flag | under — all four | stable | |||
| Single-function flag | true — all four | stable | |||
| AI-exposure level | Builder — all four | stable | |||
| Compensation structure | salaried — all four | stable | |||
| Dominant archetype | Translator | Operator | Translator | Operator | moved |
| Secondary archetype | Operator | Translator | Operator | Translator | moved |
| Seniority reading | Senior Manager | Senior Manager | Director | Senior Manager | moved |
| Geography chip | Unstated | Unstated | Unstated | empty | moved |
| Confidence label | Medium | medium | medium | medium | moved |
Seven fields of twelve reproduced across all four runs. Five moved.
The archetype pair is stable as a set and unstable as an order. All four runs returned the same two types — Translator and Operator — and all four disagreed about which of them the role is accountable for, two each way, with the secondary the exact mirror of the dominant every time. That is a sharper result than the sixteen-run spread above: the rubric appears to have settled which types are in play without settling which one is the answer. The step that assigns accountability is where the remaining instability sits.
The pay engine is still deterministic. The reading handed to it is not. Three runs read the role as Senior Manager and one as Director, with nothing else about the document changed. On the live table those two bands, for this occupational family and this region, are €3,650 and €4,700 net per month — a 29% swing in the delivered figure, roughly €73,000 against €94,000 gross a year, on identical input. The arithmetic below the classification reproduces to the euro; the classification above it does not. The brief actually delivered from this document carried the Director reading — the one that came up once in four.
Caveats, both limiting. One document, four runs, is not a rate — it is one document on one day, and the two Profile Intel studies on this page show that which field is unstable depends on the document. And the harness is not the production caller: the live Role Intel request sets no temperature parameter at all, taking the API default, and these four runs were independent completions at whatever sampling the harness applied. Directionally informative about reproducibility, not a claim of identical decoding.
The change also alters some outputs: where a posting’s accountability and its dominant method point to different types, the dominant type may now differ from what the same posting returned before 10 September. The direction is intended; the size of the shift is unmeasured. A further clause narrowing one of the seven types shipped on 23 September, hours before the runs above; it is present in the prompt they were run against, and is itself unverified until a widened set is graded.
1 October, thirty runs of one job description on production
settings (temperature 0.3), set beside two general models given a simple prompt
(gpt-5-mini, gemini-3-flash-preview, thirty runs each). Role type
Builder 30 of 30. Seniority Senior Manager 22, Senior 8, so the same posting can be priced on two
rungs. Capability names were close to unique: 124 distinct names in 140 slots. Capability themes
overlapped from run to run at 0.66, against 0.73 and 0.76 for the general models. So Role
Intel is not more repeatable than a general model on capability wording, and this page does not
claim it is.
1 October, title test, eight runs per arm. The same posting body under two titles, “Head of Growth” and “Growth Marketing Specialist”. Role Intel read the seniority as Mid-Senior 8 of 8 under both titles; both general models moved with the title. What differs is judgement, not repeatability: it reads the scope the posting describes, not the title.
Since then: on 2 October the generation call was set explicitly to temperature 0. On 5 October the title cap above came in: for the posting in the four-run card, titled “AI Practice Lead”, a Director reading is now priced as Senior Manager, so the 29% swing shown there can no longer reach the delivered figure for titles of that kind. Neither change has been re-measured with repeat runs yet. One job description per test is not a rate.
Not analysed, and not inherited. The Profile Intel analysis turns on a brief being commissioned by the person it describes. A Role Intel brief describes a job, is commissioned by a candidate reading that job, and evaluates no natural person at any point — a structurally different question that has not been worked through. The mechanism set out under the common engine below is stated there because it is the same whoever reads it; where the line falls for Role Intel specifically is open.
Not established. Whether Role Intel makes the same retention promise as Profile Intel, and whether a mechanism stands behind it, has not been audited. Stating it before checking is how the Profile Intel promise ran ahead of its mechanism, and the same mistake is not worth repeating on this side of the page.
A Role Intel brief declares product = "Role Intel", and that
label appears in the brief's provenance paragraph and in its structured page data. Whether the two
products are visually distinguishable to a reader who lands on one has not been audited.
ic_junior has no band label and cannot be scope-adjusted; a junior role is
priced correctly and captioned with the senior band's name. 2 Sep 2026.A structured capability read of one person, from their CV, commissioned by that person.
A closed vocabulary means the system may only emit values from a fixed list. It is what lets two briefs be compared. Where a vocabulary is not closed, this page says so.
Builder · Operator · Specialist · Connector · Fixer · Translator · Anchor
The prompt states these must be exactly this set. A profile carries a primary type and may carry a secondary. The type is separate from the career archetype — a free-text positioning label capped at four words, which may never be one of the seven types.
Linear · Progression · Steady · Lateral · Crossover · Multi-track · Multi-context
A profile carries a dominant pattern and, where the shape is dual, a foundation pattern. The dominant is always the more distinctive of the two, never the more common one.
Every brief carries four to six capability clusters. Each gets a band, an evidence confidence and a recency class. The band is not a judgement of the person; it is a statement about how much of the CV supports the claim.
| Band | Requires |
|---|---|
| Distinctive | Documented market outcome and rarity evidence and confidence High and recency Current or Recent |
| Expert | Consistent multi-role evidence at confidence High — or Med only where the cluster has a quantified outcome anchor |
| Demonstrated | Two or more roles, no outstanding outcomes; confidence Med or Thin |
| Emerging | Limited, recent or unvalidated evidence; mentioned once or implied only |
| High | 3+ anchors, 2+ roles |
| Med | 2 anchors, or one role |
| Thin | 1 anchor, or implied |
| Current | within 2 years |
| Recent | 2–6 years |
| Historic | 7+ years |
The recency gate caps the top of the ladder, and only the top. If the newest supporting evidence for a capability is seven or more years old and has not been refreshed by recent work, that capability caps at Expert rather than Distinctive. It is never dropped below Expert on recency alone. A rare credential stays a rare credential even when it is old — currency of a capability and rarity of a credential are different axes, and the system does not collapse them.
Legacy labels. Briefs generated before the ladder was renamed
carry Solid, Developing and Basic. These map to
Demonstrated, Emerging and Emerging. They are not emitted in new output.
IC / Team Lead / Manager / Senior Manager / Director / VP / C-level
— is specified as a list but not locked the way the vocabularies above are, and its seven values
do not map one-to-one onto the six-rung scale the pay engine uses. A fix is specified and not yet
shipped. Recorded 1 September 2026; see the changelog.
Comparability rests on the closed value lists, not on the prose being identical. So it holds for exactly the fields whose vocabularies are closed and which have been shown to reproduce:
| Field | Vocabulary | Reproduced | Comparable? |
|---|---|---|---|
| Profile type | closed, 7 | not measured | by vocabulary |
| Career pattern | closed, 7 | not measured | by vocabulary |
| Capability band | closed, 4 | not measured | by vocabulary |
| Confidence · recency | closed, 3 each | not measured | by vocabulary |
| Seniority band (pay) | closed, 6 | yes | yes |
| Family · geography | closed | yes | yes |
| Likely-offer figure | derived from those three | yes | yes |
| Management tier | not closed | no | NO |
| Peak direct reports | an integer, not a vocabulary | no | NO |
| Prose, ordering, phrasing | free | no, by design | not intended to be |
So the honest form of the claim is narrower than "briefs are comparable". Two briefs can be compared on profile type, career pattern, capability band, seniority, family, geography and the pay figures. They cannot currently be compared on management tier or peak direct reports. Those two are named in the changelog as open, and this table is what the claim is reduced to until they close.
Everything on a brief comes from the submitted CV. Nothing is looked up about the person, and no external record is consulted. But not everything on a brief has the same standing.
Every evidence anchor must trace to specific content in the CV. An empty anchor list is a correct output; an invented one is a failure.
These are readings of a document, not verified facts about a person.
Before a brief is delivered, a separate reviewer model checks it against numbered rules and returns pass, warn or fail on each. The gate owns the final decision. There are 29 numbered phases — eleven K phases and sixteen L phases, plus a truncation check and a language check. Six L phases carry lettered sub-checks. There is no K8.
| # | Phase | # | Phase |
|---|---|---|---|
| K1 | Version compatibility | L1 | Required fields |
| K2 | Seniority calibration | L2 | Type and enum validation |
| K3 | Calibration gates | L3 | Inflation-signal validation |
| K4 | Path coherence | L4 | Friction-point type enum |
| K5 | Type-confidence validation | L5 | Inflation coherence |
| K6 | Market-adjacency completeness | L6 | Recency rule |
| K7 | Unique-signal nullability | L7 | CV-completeness mirror |
| K9 | Delivery gate (final call) | L8 | Vocabulary gate, inflation risk |
| K10 | Substantiation validation | L9 | Language consistency |
| K11 | Contamination resolution | L10 | Distinctive-edge structure |
| K12 | Macro ranking-implication | L11 | Value-layer enum |
| Y | Truncation check | L12 | Capability schema |
| Z | Language gate | L13 | Searchable skill tags |
| L14 | Visible / internal field contract | ||
| L15 | Source-citation defaults | ||
| L16 | Premium-eligible flag |
A brief is delivered on pass_validated or
compact_validated. On fail_validated it is held and not sent. A held
brief is a working gate, not a lost order — it means the reviewer found something the read could
not stand on.
The design intent is that the same CV produces the same brief. That is not what we measured, so it is not what we claim.
| Field | Run A | Run B | |
|---|---|---|---|
| Seniority band | Director | Director | stable |
| Occupational family | marketing | marketing | stable |
| Geography | RO_bucharest | RO_bucharest | stable |
| Likely-offer figure | €3,250 | €3,250 | stable |
| Inflation-risk label | Medium | Medium | stable |
| Market-value figure | €4,017 | €4,095 | moved |
| Peak direct reports | 1 | 4 | moved |
| Coordination-scope label | two different strings | moved | |
The classifications that set the salary reproduced exactly. The management-scope reading did not.
A different real, already-delivered candidate document from the one used on 1 September — not a re-run of the same input. Reproduced offline: no live Tally submission. The exact live CIA Request Builder and CIA Prompt Patch (REGRESSION-78) node code was re-fetched from the workflow and executed standalone to reconstruct today's deployed system prompt; the real user message was pulled from n8n execution history straight to disk, never hand-retyped. Two independent, blind runs against that reconstructed prompt and the real user message.
| Field | Run A | Run B | |
|---|---|---|---|
| Seniority band | senior_manager | manager | moved |
| Occupational family | hr_people | hr_people | stable |
| Geography | RO_bucharest | RO_bucharest | stable |
| Likely-offer figure | €3,100 | €2,200 | moved |
| Inflation-risk label | Medium | Medium | stable |
| Market-value figure | €3,500 | €2,500 | moved |
| Peak direct reports | 5 | 5 | stable |
| Coordination-scope label | two different strings, same tier ("Regional") | moved | |
This run moved on the field the 1 September run held stable — seniority band swung a full band (senior_manager → manager) — and the salary figures moved with it, roughly a 29–38% swing on the same document. Peak direct reports, which moved on the 1 September document, held stable on this one. Two single-document measurements six weeks apart do not average into a rate; they show that which field is unstable depends on the document, not on a fixed property of the field.
Caveat: the harness used to run this comparison cannot pin the API's temperature parameter the way the live call does (temperature 0.3). The two runs above are independent completions at whatever sampling the runtime applied, so this is directionally informative about reproducibility, not a claim of the exact same decoding setting as production.
The same document with an eighteen-character phrase deleted from one bullet. Nine of twelve timeline rows were identical. Three moved, and the peak-level reading moved with them:
| Role | With | Without |
|---|---|---|
| Head of Marketing & Growth | Director | Manager |
| Marketing & Operations Lead | Director | Manager |
| Founder | C-level | IC |
Peak management level for the whole profile: Director in one run, Manager in the other — a two-band swing on the same document. The claims audit also differed: twelve claims listed in one run, thirteen in the other, and the one claim marked unsupported in the first was not audited at all in the second. That single difference propagated to the inflation-risk label and to whether a whole block appeared on the page.
The prediction under test — that the phrase was setting the seniority band — was wrong. The band did not move; the management tier did. We are recording the failed prediction because it is the result.
Thirty runs of one real CV on production settings, set beside two general models given a simple prompt (thirty runs each). Seniority 30 of 30, profile type Builder 30 of 30. Capability themes overlapped from run to run at 0.69, against 0.79 and 0.83 for the general models, so Profile Intel is not more repeatable on capability wording either. The headline capability took 14 different values in 30 runs, and one capability sat on the Expert/Distinctive boundary, 17 against 13.
Echo test, eight runs per arm, synthetic CV. The same CV with and without a header in which the person rates their own capabilities. The self-rated capabilities appeared in 0 of 8 Profile Intel runs, against 4 to 8 of 8 for the general models; Profile Intel marked the self-labelled version down for inflation instead. The CV used in the thirty-run test labels its own “distinctive edge”: the general models rated that capability Distinctive in 31 of 32 and 29 of 31 slots, and Profile Intel rated it Demonstrated in 22 of 30.
2 October: the evidence-quality score moved from
the model into code (object transformer 1.15.0). Ten runs of one CV then returned
the same score, 58, every time, where it had ranged from 62 to 74.
A Profile Intel brief is a capability overview commissioned by the person it describes, and in that use it is not a high-risk AI system. Using one to evaluate, screen, rank or compare someone else against a role is a different purpose and may fall within high-risk classification. The mechanism, and the date it applies, is set out under the common engine below.
16.92).2.50/2.51; the fix shipped before 23 September and this page never
recorded it.cia=3.20.0 against a single 3.27.2 figure this page stated on
2 Sep 2026. Status 23 Sep 2026: this page no longer publishes one overall number to
compare against — the header above now lists five components read separately off the live
workflow. Root cause now traced. The CIA prompt never defines a
_metadata.cia_version field — zero occurrences in the decoded system prompt.
The Quality Reviewer prompt tells its model to read that field anyway; asked to copy a value that
is not on the page in front of it, the model supplies a plausible one, most often its own version
number, which is why so many briefs carry the Quality Reviewer's changelog numbers rather than the
generation engine's. Demonstrated live 4 Sep 2026: three briefs of one person on an identical
engine carried cia=3.20.0, cia=3.20.0+ and cia=3.27.2.
Traced, not fixed — the field the model is asked to copy still does not exist.
Closed, recorded 5 Oct 2026: fixed by prompt patch 1.3.0 and object
transformer 1.16.1 (3 Oct). A brief generated on 4 October carries
cia=3.35.26, the build it actually ran on.detected_language="ro" at 0.90 confidence, and an explicit instruction naming every
narrative field the lock covers — the model still wrote the entire brief in English (0.95
confidence, 926 markers across all 181 narrative strings; not a marginal slip). The G-5 merge
guard, added 11 Sep 2026 after a different language-lock incident, caught it and held the brief
undelivered — that is the guard working as designed, not a new failure, and nothing was sent
to the candidate on the wrong-language brief. A revised instruction, naming English job-title and
industry-terminology density explicitly as vocabulary rather than a language signal, was tested
offline against the real held document: two independent runs, both fully Romanian (roughly 1,000
Romanian markers against under 60 English markers each, no individual field scoring predominantly
English). Prepared as a versioned patch. Not yet deployed. Status 5 Oct 2026: deployed
in input builder 1.8 on 23 September; not yet observed on a second jargon-dense
Romanian CV, so it stays open.Both products run on this. It is stated once here rather than twice above, because a claim written in two places is a claim that will eventually disagree with itself.
Deterministic code around model calls: a generation step that reads the document and writes the structured output, and a separate reviewer that checks that output against numbered rules before anything is delivered. Everything between and around them — extraction, normalisation, the pay lookup, the gate arithmetic, the rendering — is ordinary code and behaves the same way every time.
The number of calls is not the same on both sides, and this page said it was until 2 September 2026. Profile Intel runs two. Role Intel runs three: a small calibrator that classifies the posting first, then generation, then the reviewer. Model and temperature differ too — see the table beside this one.
| Generation | claude-sonnet-4-6 | temp 0.3, max_tokens 20,000 |
| Reviewer | claude-haiku-4-5 | temp 0 |
| Calibrator | claude-haiku-4-5 | temp 0.3 |
| Generation | claude-sonnet-4-6 | temp 0 since 2 Oct 2026, max_tokens 32,000 |
| Reviewer | claude-sonnet-4-6 | temp 0.3, max_tokens 16,001 |
Temperature 0 on the Profile Intel reviewer is not determinism either — it is a decoding setting, not a guarantee of an identical result. Role Intel has no call at 0: all three run at 0.3, and the reviewer is the larger model rather than the small one. Changed 2 October 2026: Role Intel's generation call now runs at 0, so the sentence before this one describes the configuration up to that date.
Since 5 October 2026 both products look up codes in ESCO v1.2.1, the European Commission's classification of skills, competences and occupations. Romanian COR codes come from the EURES ESCO–COR mapping where one exists. This service uses the ESCO classification of the European Commission; the Commission does not endorse ReLoop.me.
The pipeline is deterministic code around a language model, and the code is deterministic — the same inputs produce the same pay lookup, the same gate arithmetic, the same rendered layout. The classification step is not. Any claim that "the same input produces the same output" has to say which of those two it is talking about, and ours did not. That is why it was withdrawn rather than restated.
A brief commissioned by the person it describes is not, in that use, a high-risk AI system. Using one to evaluate, screen, rank or compare someone else against a role is a different purpose, and may fall within high-risk classification under Annex III point 4(a) of Regulation (EU) 2024/1689 — AI systems intended for the recruitment or selection of natural persons, in particular to evaluate candidates — via Article 6(2). Article 25(1)(c) is the route by which provider obligations transfer: a party who modifies the intended purpose of a system so that it becomes high-risk is considered its provider and takes on the obligations in Article 16. Those obligations apply from 2 December 2027, deferred from 2 August 2026 by Regulation (EU) 2026/1744 — so this describes where the line will fall, not an obligation in force today. It is a statement of scope, not legal advice.
This states the mechanism, which is the same whoever reads it. How it applies to Role Intel specifically has not been analysed — Role Intel reads a role rather than a person, which is a different question and does not inherit the Profile Intel answer.
Not defects — features that don't exist yet, named here on purpose so they don't quietly drop off the list. Dated when work starts. Moved to the changelog, and off this list, when they ship.
Started 5 October 2026. Job titles are looked up and stored, not shown. Codes appear on Profile Intel briefs once three briefs in a row each carry at least one validated exact code. Capability terms need a stable input first: the model naming each capability's core term from a closed list, rather than in its own words.
Shipped in part, 5 October 2026, as the published-range comparison line in the Role Intel column. Kept here until the gap is shown as a figure as well as a position.
Today, whenever a job description publishes its own salary band, Role Intel still computes its own independently modelled value for the same work — and then doesn't show it, deferring entirely to the employer's number. The plan is to show both: what they publish, what the model independently values the work at, and the gap between the two, stated plainly.
The gap runs both ways, and the copy has to say so. Sometimes the independent estimate is higher than the published band — under-priced scope. It can also be lower: early-stage, well-funded roles in particular sometimes publish a band ahead of what the seat's actual scope would independently price at. Neither direction is the one to expect by default; the point is showing the number, not editorialising it.
Seven values are listed for management tier; only six are locked in the pay engine, and nothing checks the list at runtime today (see the open-vocabulary flag above). The plan is one shared enum across both consumers, hard-failed in deterministic code rather than judged by a model.
Enough to check a claim on a brief against a stated definition, and to see the shape and pace of the work. Not enough to rebuild the engine.
The line is drawn where it is on purpose: what's shown is what a reader needs to check a claim on their own brief. What's kept is what would let someone reproduce the read without doing the work of building it.
Claims added, changed and withdrawn. Newest first. Every entry carries a date and a reason. A withdrawn claim stays on this page — removing it would defeat the point of the page.
3.65.DG-17 looked for a piece of stylesheet text instead of a rendered pay figure; in a tested case it blocked a correct brief. It now looks for the rendered element. 66 stored inputs unchanged. Renderer 27.9.67, gate 1.14.27.9.66, ESCO terms 1.0.0.DG-21. Salary 3.64, renderer 27.9.66, gate 1.13.16.92.2.77.2.50/2.51 and never recorded here). The cia= version stamp (fixed 3 Oct). The placeholder brief identifier (never a delivered brief). Each stays on the list, marked closed with its evidence.DG-20; these postings are kept out of the pay index. Object transformer 2.4.8, renderer 27.9.64, gate 1.12, index emit 0.3.3.1.4.0, input builder 1.9, renderer 16.91.2.4.7.3.63; Profile Intel salary 2.72 to 2.76.16.90.2.4.6, salary 3.61.1.15.0.gpt-5-mini and gemini-3-flash-preview. On capability wording ReLoop.me was not more repeatable than either; the general models overlapped slightly more. The differences were in judgement: ReLoop.me did not echo a CV's self-ratings, and read a posting's seniority from its scope rather than its title. The claim that ReLoop.me is more consistent than general AI is not supported, and is not made. Figures in each product column.4.23.0.3.58). Profile Intel now prices a role marked ready to move into at no more than one rung above the person's current level (salary 2.71).4.21.0, renderer 27.9.61.detected_language="ro" lock at 0.90
confidence and an explicit instruction naming every narrative field the lock covers — and
the model wrote the whole brief in English anyway (0.95 confidence, 926 markers across all 181
narrative strings; every field, not one stray sentence). This is not the source-of-truth bug fixed
12 Sept (the lock correctly read the deterministic value, not a model echo) and not the buried-
instruction bug fixed 11 Sept (the instruction was unmissable). It is the underlying problem those
two fixes narrowed but did not eliminate: the model can still decline to follow an explicit
instruction. The G-5 merge guard, built 11 Sept for exactly this failure mode, caught it and held
the brief — undelivered, unpublished, no email sent. Working hypothesis for this document
specifically: the header and skills lines carry an unusually heavy load of English HR jargon kept
as-is in the Romanian original, which may pull the model into an English register despite the
lock. Tested offline against the real held document with a revised instruction naming that
jargon-density pattern explicitly as vocabulary, not a language signal: two independent runs, both
fully Romanian. Prepared as a versioned Build CIA Input patch; not yet deployed. See the open
backlog for the current line.role_archetype, a Role Intel-only field with no Profile Intel equivalent,
where this engine's classification vocabulary is profile type, career pattern and the capability
ladder. The Profile Intel study stays unsourced and open; the two findings are separate.ic_junior.min (500). Role Intel's own equivalent fix tied
ic_junior.min = ic_senior.min = 500 exactly, leaving the two engines ten EUR a month
apart on the same cell — flagged as cosmetic and offered as a low-effort follow-up, now
actioned. ic_senior.min: 510 → 500, mid 700 and max 1000 unchanged. This is a floor
tie, not an inversion, and it now matches Role Intel's live value exactly. Row re-checked at min,
mid and max: fully monotonic, zero new inversions anywhere in the table (the eight pre-existing
product-family inversions are unchanged and remain open). Shipped as CIA-salary v2.69.v0.2.0. The
constants it actually runs on — NODE_VERSION and INDEX_EMIT_VERSION,
both checked against the end-of-file marker — were already correctly at 0.3.0 /
0.3. Only the banner line was wrong, and only a human reading the source file would
ever have seen it; nothing a brief emits was affected. Corrected to read v0.3.0. No
version bump, because the real version was already right.ic_junior.min for every EU_west row on this engine. mid 1660 and max 1950
unchanged. Ties ic_senior.min = ic_junior.min = 1422, a floor tie rather than an
inversion, the same pattern already used elsewhere in this table (finance_accounting,
hospitality). Zero new inversions; blast radius zero — the highest
salary_version on any of the 174 delivered briefs swept was still 2.63. Shipped as
CIA-salary v2.68.ic_senior
through vp; ic_junior untouched) at sourced regional ratios against this
engine's own Bucharest anchor: Cluj ×1.20, Timișoara ×0.85, Iași ×0.95,
other ×0.70 (lower confidence). Two of the four ratios — Cluj and Iași — read
as at or above Bucharest rather than below it, which is not the intuitive direction; reviewed
against the sourced data and approved as sourced rather than adjusted to match instinct. These
ratios are anchor-independent by construction and were shared with Role Intel so the same
multipliers can be applied there if and when it adopts the same Bucharest anchor — that
adoption is a separate, not-yet-made decision on Role Intel's side. Zero new inversions. Shipped as
CIA-salary v2.67.ic_senior.min = 2500
was set, ahead of a possible reconciliation. Traced through this engine's own changelog history
rather than raw workflow-version archaeology: no change from v2.63 through v2.69 touches
ic_senior on this cell, and it already carried its current value before this session's
visible history begins. It is a legacy anchor, the same category as this page's other
documented 2021-era anchors, not something a recent fix introduced. Unlike the elementary fix
above, there is no sourced replacement value for this cell on either engine yet — Role
Intel's own figure for it is equally unsourced. Left as is, folded into the shared product-family
reconciliation work still open on both sides.Calibrated. The test looked at which fallback supplied
the level rather than at whether the level came from the title at all, and the model-generated path
matched neither string it was looking for. It now tests the basis directly, which has exactly one
non-inferred value. More published figures now read Estimated than did before.
That is the correct direction and it is what this page already promised. Briefs delivered between
1 and 7 September on an ambiguous title may carry the wrong confidence label; the figure itself is
unaffected. Ask and it will be re-issued.gap_type has no fixed list at all — two runs of one input produced
eight distinct labels with a single overlap. And role_seniority_chip has no runtime
validator anywhere in the pipeline, in either product; the Profile Intel side has been
observed emitting C-level, which is off-vocabulary, and it reached a pay band. Named
here because the Role Intel column now claims a closed vocabulary for other fields, and that claim
is only worth something if the exceptions are named beside it.