skip to content

Feeds, Tokens and Exports

Everything that crosses a case repository's edge: outcomes pushed in from automation, code tied back to stored definitions, who holds which token, and what survives a move elsewhere.

on this pageshow

explore

questions

19

When an automated suite pushes its outcomes into a TestRail-class case repository, what three things must each recorded result name, and which of the three usually fails at push time?

level: juniorimportance: must knowfreq 72%

answer

  1. three handles, not one payload
  2. which round, which item, what happened
  3. two are free, one is not
  4. the middle handle needs prior agreement
  5. silent partial cycle, not an error

basics

~20 s

Every pushed result names three things: the cycle it belongs to, the stored item it is a result for, and the outcome. The item handle is the one that fails, because code and repository must already agree on one identifier.

solid answer

~50 s

A push into a case repository is not a document upload; it writes rows into a cycle. Each row carries a **cycle handle** (which round of execution this belongs to), an **item handle** (which stored definition this outcome is about) and the **outcome** itself. Most repositories expose a bulk result endpoint shaped exactly that way: one cycle identifier plus a list of item identifiers with their outcomes. Two of the three handles are free — the cycle handle is minted once per pipeline run and handed to the suite, and the harness already knows the outcome the moment a case finishes. The item handle is the only one that needs an agreement made in advance between a codebase and a system it cannot see, and when it does not resolve you usually get a partially populated cycle rather than a loud error.

go deeper

for a junior

Be able to say the payload names three things — the cycle, the stored item, and the outcome — and that the item handle is the one that has to be agreed in advance between the code and the repository.

for a middle

Explain why bulk result endpoints are shaped as one cycle identifier plus a list of item-and-outcome pairs, and what a repository does when a handle names nothing, names something outside the cycle, or names two definitions at once.

for a senior

Show that you check the response body and reconcile counts, because an unresolved handle usually yields a quietly short cycle rather than a failed call. Say how you would make that gap fail the job.

for a principal

Own the position that identifier resolution belongs before execution, not after, and argue for a mapping that a title edit cannot break — including who is accountable when the two systems drift apart.

## What a push into a case repository actually writes A case repository stores **definitions** — the durable, reusable description of what should be checked — and it records **outcomes** against those definitions inside a **cycle**, the named container for one round of execution. When an automated suite reports into a TestRail-class product, or into a Jira-resident tool that lives inside the tracker rather than beside it, it is not uploading a document. It is writing rows into that container, one row per definition it has something to say about. Every row has to answer three questions, and a push is only as good as the weakest of the three. ## The three handles - **The cycle handle** — *which round is this?* It scopes the write. Outcomes do not hang off a definition directly; they hang off that definition's appearance in a cycle, so without this handle a result has nowhere to land. - **The item handle** — *which stored definition is this about?* This is the join between something that exists in a code repository and something that exists in a case repository, two systems that share no memory of each other. - **The outcome** — *what happened?* The verdict the harness produced, usually with a duration, a message, and evidence. Which verdicts a harness ought to be able to record is a separate subject; here it is simply the payload's third element. Most repositories expose a bulk result endpoint shaped exactly like that: a cycle identifier, plus a list of pairs of item identifier and outcome. That shape is worth memorising, because it tells you what your suite must already be able to produce before a single line of push code is worth writing. ## Why the middle handle is where teams get stuck Two of the three are nearly free. The cycle handle is minted once per pipeline run and handed to the suite as an ordinary environment value. The outcome is in the harness's hands the instant a case finishes. The item handle is the only one that requires an agreement made *before* the run, between a codebase and a system nobody in the codebase can see. How a suite carries that identifier in code is its own subject with its own answer. What matters here is what the repository does when the handle it receives is wrong: | What the push sends | What a repository typically does | What the team sees | |---|---|---| | A handle that does not exist | Rejects that row, or the whole batch | A loud error — the good case | | A handle that exists but is not in this cycle | Rejects the row, or ignores it quietly | A cycle holding fewer results than cases run | | A handle that matches more than one definition | Records against one of them, or errors | An outcome sitting on the wrong definition | | No handle, only a title to match on | Fuzzy-matches, or refuses outright | Reporting that breaks when someone edits a title | The middle two rows are the dangerous ones, because both produce a **partially populated cycle that looks finished**. Nobody stares at a cycle and counts. A run of several hundred cases that recorded a fraction of them reads, at a glance, exactly like a run that was smaller. ## Making the weak handle fail loudly 1. **Resolve before you run, not after.** Map every case the suite is about to execute onto its handle during setup, and fail immediately if one is missing or ambiguous. A broken mapping then surfaces in seconds instead of at the end of a long suite, when the outcomes are already produced and about to be dropped. 2. **Count both ends.** Compare the number of outcomes the harness produced with the number the repository reports as accepted. Treat any gap as an error even when the call itself returned success. 3. **Read the response body, not just the transport status.** Bulk endpoints commonly return per-row errors inside an overall success, and a push step that checks only the status code swallows every one of them. 4. **Never fall back to matching on the definition's title.** Titles are edited by people who have no idea an automated suite depends on their exact wording, and the breakage arrives long after the edit. ## Where the boundary sits Everything above concerns the *payload*: what a push has to name, and what happens when a name does not resolve. It is deliberately not about which failures should stop a pipeline stage, which verdicts a harness ought to support, or what a cycle is and how executions hang off it. Those are neighbouring concerns with their own answers. The claim this material makes is narrow and holds everywhere: **an outcome with no cycle handle has nowhere to go, an outcome with no item handle has nothing to be about, and of the two, the second is the one that quietly does not exist yet.**

  • The push returned success but the cycle holds fewer results than the suite ran. Where do you look first?
    At the response body rather than the status. Bulk result endpoints commonly report per-row failures inside an overall success, so unresolved or out-of-cycle item handles are accepted at the transport level and dropped underneath. Compare the count the harness produced with the count the repository accepted, and treat any difference as a build error rather than a curiosity.
  • Why is a cycle handle needed at all, when the item handle already identifies the definition?
    Because a definition accumulates many outcomes over its life, and a bare result would be ambiguous about which round produced it. The cycle handle is what makes a result answerable: this verdict, from this round, on this item. Without it the repository cannot decide whether the write is new history or a correction to old history.

saying these in an interview costs you the question

  • Thinks pushing results means uploading a report file
  • Matches results to definitions by title text
  • Assumes a success status means every row landed
  • Cannot say what a result is scoped to
  • Treats a half-populated cycle as normal
open as a page

A CI job pushes results into a TestRail-class case repository using an engineer's own account. What goes wrong inside the repository, and what should it use instead?

level: juniorimportance: must knowfreq 60%

basics

~20 s

Every automated outcome is attributed to that engineer, the pipeline inherits their full human reach across projects, and the job breaks when they change team or leave. Use a dedicated machine account holding only the capability to record results.

open as a page

Pairing automated tests to stored manual case definitions by matching their titles looks free. In a case-management product, why does it break, and what does a durable identifier change?

level: middleimportance: must knowfreq 62%

basics

~20 s

Titles are editorial text: they get reworded, translated, duplicated and re-scoped, and none of those edits signals that coverage changed. A durable identifier survives every rename, so the pairing breaks only when the definition is actually deleted.

open as a page

When a team moves its stored test-case definitions from one commercial case-management product to another, what survives the export and import intact, and what usually does not?

level: middleimportance: must knowfreq 60%

basics

~20 s

Definitions travel; the context the old product wrapped around them mostly does not. Titles, step text, folder placement and plain fields import cleanly. Execution history, attachments, typed custom-field meaning and shared-step relationships arrive degraded or missing.

open as a page

In a TestRail-class case repository, why is the permission to record a result on a run kept separate from the permission to author or edit a case definition?

level: middleimportance: must knowfreq 66%

basics

~20 s

Recording a result adds evidence about what happened; authoring changes what the test says. Splitting them lets an automation account report outcomes continuously while never being able to rewrite the definitions its own results are evidence for.

open as a page

A stored manual case definition has ten steps, and the automated test claiming it exercises only the first four. How do you represent that partial automation honestly?

level: seniorimportance: must knowfreq 52%

basics

~20 s

Either split the definition so each part is wholly automated or wholly manual, or keep one definition in an explicit partial state that records what the automation asserts and what a human still checks. Marking the whole definition automated is the one wrong answer.

open as a page

In a staged cutover between two case-management products, why must the authoring freeze sit on exactly one side, and which side should carry it?

level: seniorimportance: must knowfreq 52%

basics

~20 s

Freeze authoring on one side because neither product can merge divergent edits to the same definition — there is no shared identity and no merge tool. Freeze the source once its final delta is exported, and author only in the target.

open as a page

A CI job that pushes an automated run's outcomes into a case repository times out and is retried, and the cycle ends up holding the same outcomes twice. What mechanism prevents that, and how do you choose its key?

level: seniorimportance: must knowfreq 58%

basics

~20 s

Send an idempotency key with the push, derived from the run's identity rather than generated fresh on each attempt, so a repeated write is recognised as the same one. Timeouts are ambiguous: the first call may already have landed.

open as a page

In a TestRail-class case repository, how does an automated test get tied to the stored manual case definition it covers, and what does the repository do with that tie?

level: juniorimportance: should knowfreq 58%

basics

~20 s

The automated test carries the stored definition's identifier in code, as an annotation, a tag, or a filename convention. The results push sends that identifier back, so the repository can mark the definition automated and file outcomes under it.

open as a page

When a case library is exported from one case-management product so it can be loaded into another, what happens to the files attached to its cases?

level: juniorimportance: should knowfreq 45%

basics

~20 s

Attachments come out in one of two shapes: the actual bytes bundled beside the data, or links back into the source instance. Links stop resolving once that instance is retired or the credential expires, so the export must carry bytes.

open as a page

A suite reports each case outcome to a case repository in its own call as that case finishes, instead of one bulk push at the end of the run. What does the per-case shape buy, and what does it cost?

level: middleimportance: should knowfreq 60%

basics

~20 s

Per-case calls fill the cycle live and survive a run that dies halfway. They cost a round trip per case, run into bulk rate limits, and make the run depend on the repository staying healthy throughout.

open as a page

In a TestRail-class case repository, what is the difference between a project-scoped and an organisation-scoped credential, and when does a job genuinely need the wider one?

level: middleimportance: should knowfreq 50%

basics

~20 s

A project-scoped credential reaches one project's definitions, cycles and outcomes; an organisation-scoped one reaches every project, including ones created after it was issued. Only genuinely cross-project work, such as a rollup export or a migration, needs the wider reach.

open as a page

Many teams make the step that pushes outcomes into a case repository non-fatal, so a failed push cannot fail the job. What does that choice hide, and what has to be added to make it safe?

level: seniorimportance: should knowfreq 54%

basics

~20 s

Non-fatal reporting is right in principle — a repository outage should not change a suite's verdict — but swallowing the error leaves a half-empty cycle nobody notices. Make the push loud: durable outcomes file, an alert on failure, reconciled counts.

open as a page

Every team's pipeline pushes into your TestRail-class case repository with the same machine account and the same credential. What does that cost you, and how would you break it up?

level: seniorimportance: should knowfreq 44%

basics

~20 s

One shared account collapses attribution, forces organisation-wide reach, couples every team to a single rotation or revocation, and makes them share one bulk allowance. Split it into one project-scoped account per pipeline, migrated a wave at a time.

open as a page

A case repository publishes an automated-coverage figure over its stored case definitions. What belongs in that figure's denominator, and who gets to decide?

level: principalimportance: should knowfreq 42%

basics

~20 s

The denominator is the set of stored definitions the organisation has agreed are worth automating, not every record in the tree. Someone must own that scope in writing, or archiving, splitting and re-scoping cases will move the figure with no test written.

open as a page

You are moving to a new case-management product and the old one holds years of recorded execution history. How do you decide whether to carry that history across, and what do you do if you do not?

level: principalimportance: should knowfreq 40%

basics

~20 s

Decide by who actually queries it. Most teams read only recent history, so migrate definitions and keep history outside the new product: the old instance read-only for a fixed window, then a neutral file export that stays searchable.

open as a page

You run one TestRail-class case repository for many teams. How would you decide where the permission boundary sits, and who is allowed to close a cycle?

level: principalimportance: should knowfreq 36%

basics

~10 s

Put the boundary at the project, because that is the unit teams already own: read wide, author and record narrow, close-cycle held by a named human. Then defend it against drift toward everyone-administrator.

open as a page

A case library uses shared step blocks that many cases reference. What typically happens to that sharing when the library is exported into a different case-management product?

level: middleimportance: nice to knowfreq 32%

basics

~20 s

Sharing is normally flattened. Each referencing case receives its own inlined copy of the block's steps, so the library reads correctly on day one while the single edit that used to update every case is gone.

open as a page

A suite runs as many parallel shards inside one pipeline run, and each shard pushes its own outcomes into a case repository. How would you design the cycle handle so the run lands as a single cycle?

level: principalimportance: nice to knowfreq 44%

basics

~20 s

Mint the cycle once in a setup job before the shards start, pass its handle down as an ordinary job value, and let shards record only. Get-or-create inside each shard races and yields duplicate cycles.

open as a page