Skip to content

feat: infer links regardless of Raider.IO ownership visibility - #33

Closed
Erilla wants to merge 2 commits into
mainfrom
feat/fingerprint-ignores-hidden-ownership
Closed

feat: infer links regardless of Raider.IO ownership visibility#33
Erilla wants to merge 2 commits into
mainfrom
feat/fingerprint-ignores-hidden-ownership

Conversation

@Erilla

@Erilla Erilla commented Aug 10, 2026

Copy link
Copy Markdown
Owner

Stacked on #32; GitHub will retarget this to main when that merges.

The sweep gated both its root and every candidate on ownerId === null — Raider.IO ownership not being publicly linked. That single condition covers two unrelated states:

State user Was it excluded?
Player withheld the ownership link null yes
Character never claimed on Raider.IO null yes

Sampling arbitrary characters found the second state is the ordinary one, and it is exactly the population the fingerprint exists to reach — bank alts and levelling alts are the least likely characters to be claimed upstream. Both gates are removed.

This reverses a closed decision. Privacy stance on defeating hidden ownership resolved that privacy-hidden ownership excludes fingerprint-derived linkage, and Data-protection exposure for publishing derived account linkage identified not publishing inferred-only linkage where a contrary preference was signalled as one of the two mitigations that materially move the UK GDPR balancing and necessity tests. A fingerprint-derived link may now connect characters whose Raider.IO ownership is not public. Maintainer's decision; recorded on both issues.

Also in scope, because the candidate gate was where it lived: each candidate cost one live getCharacter call to Raider.IO — hundreds per sweep, counted against neither the discovery request cap nor the Blizzard hourly budget. Removing the gate removes the call; a test now pins it.

  • /privacy no longer promises an exclusion the code does not make, and points at removal requests as the only route.
  • The design spec carries a dated amendment; CONTEXT.md redefines privacy-hidden ownership.
  • Suppression checks, including the recheck immediately before admission, are untouched.

Both new handler tests were confirmed red against the previous code.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Qh8Zb2HnaxebWrRLUMoAiv

Erilla and others added 2 commits August 10, 2026 17:50
A 404 from the Profile API turned the whole sweep into a retryable
upstream failure, so it published nothing and retried from the root.
The live measurement saw 23 of 393 candidates 404, which means in
practice no real sweep would ever have published.

Skip such a candidate and keep the request it already spent. For the
root's own roster or achievements, report an empty sweep instead: the
root cannot be fingerprinted at all, so its Raider.IO snapshot should
publish rather than the run being stranded on a retry that cannot
succeed. Unguilded roots already return an empty roster and are
unaffected.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qh8Zb2HnaxebWrRLUMoAiv
The sweep gated both its root and every candidate on Raider.IO ownership
being public (`ownerId === null`). That condition cannot tell a player who
withheld the link from a character never claimed on Raider.IO at all, and
it excluded the latter — most characters, and precisely the bank and
levelling alts the fingerprint exists to find.

Maintainer's decision to remove both gates. This reverses the resolution
of "Privacy stance on defeating hidden ownership" (#8) and drops the
behavioural mitigation "Data-protection exposure for publishing derived
account linkage" (#16) identified as the one that materially moves the UK
GDPR balancing and necessity tests. Manual removal requests are now the
only exclusion route, and suppression checks are unchanged.

Removing the candidate gate also removes one unbudgeted Raider.IO request
per roster member — hundreds per sweep, counted against neither the
discovery cap nor the Blizzard hourly budget.

/privacy no longer promises an exclusion the code does not make; the
design spec carries an amendment and CONTEXT.md redefines the term.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qh8Zb2HnaxebWrRLUMoAiv
Base automatically changed from fix/fingerprint-sweep-skips-missing-profiles to main August 10, 2026 17:02
@Erilla

Erilla commented Aug 10, 2026

Copy link
Copy Markdown
Owner Author

Superseded by the rebased branch — see the replacement PR. #32 squash-merged underneath this one, leaving it conflicting.

@Erilla Erilla closed this Aug 10, 2026
Erilla added a commit that referenced this pull request Aug 10, 2026
Replaces #33, which was left conflicting after #32 squash-merged. Same
single commit, rebased onto `main`.

The sweep gated both its root and every candidate on `ownerId === null`
— Raider.IO ownership not being publicly linked. That one condition
covers two unrelated states:

| State | `characterDetails.user` | Was it excluded? |
| --- | --- | --- |
| Player withheld the ownership link | `null` | yes |
| Character never claimed on Raider.IO | `null` | yes |

Sampling arbitrary characters found the second state is the ordinary
one, and it is exactly the population the fingerprint exists to reach —
bank alts and levelling alts are the least likely characters to be
claimed upstream. Both gates are removed.

**This reverses a closed decision.** [Privacy stance on defeating hidden
ownership](#8) resolved that
privacy-hidden ownership excludes fingerprint-derived linkage, and
[Data-protection exposure for publishing derived account
linkage](#16) named not
publishing inferred-only linkage where a contrary preference was
signalled as one of the two mitigations that materially move the UK GDPR
balancing and necessity tests. A fingerprint-derived link may now
connect characters whose Raider.IO ownership is not public. Maintainer's
decision; recorded on both issues and on the map.

Also in scope, because the candidate gate was where it lived: each
candidate cost one live `getCharacter` call to Raider.IO — hundreds per
sweep, counted against neither the discovery request cap nor the
Blizzard hourly budget. Removing the gate removes the call, and a test
now pins it.

- `/privacy` no longer promises an exclusion the code does not make, and
points at removal requests as the only route.
- The design spec carries a dated amendment; `CONTEXT.md` redefines
*privacy-hidden ownership*.
- Suppression checks, including the recheck immediately before
admission, are untouched.

Both new handler tests were confirmed red against the previous code.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01Qh8Zb2HnaxebWrRLUMoAiv

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant