diff --git a/index.bs b/index.bs
index ab39d711ca..49095a3ef2 100644
--- a/index.bs
+++ b/index.bs
@@ -944,7 +944,6 @@ An aggregatable source registration time configuration is one of the
-
Attribution trigger
An attribution trigger is a [=struct=] with the following items:
@@ -1300,7 +1299,6 @@ A destination rate-limit result is one of the following:
"hit reporting limit
"
-
# Storage # {#storage}
A user agent holds an attribution source cache, which is a [=set=] of [=attribution sources=].
@@ -2295,7 +2293,7 @@ an [=aggregation coordinator=] |aggregationCoordinator|, and a [=moment=] |now|:
:: |contributions|
: [=aggregatable debug report/aggregation coordinator=]
:: |aggregationCoordinator|
-
+
1. [=Queue a task=] to [=attempt to deliver an aggregatable debug report=] with |report|.
To obtain and deliver an aggregatable debug report on registration given a [=list=] |contributions|,
@@ -2382,7 +2380,6 @@ To obtain a randomized source response given a [=randomized response
1. Return the result of [=obtaining a randomized response=] with null, |possibleValues|, and
|pickRate|.
-
Computing channel capacity
To compute the channel capacity of a source given a [=randomized response output configuration=] |config| and a double |epsilon|:
@@ -3134,10 +3131,15 @@ and an optional [=boolean=] |isNoised| (default false):
1. Run [=obtain and deliver an aggregatable debug report on source registration=]
with |dataTypes|, |source|, and |isNoised|.
+To delete expired sources given a [=moment=] |now|:
+
+1. [=set/iterate|For each=] |source| of the [=attribution source cache=]:
+ 1. If |source|'s [=attribution source/expiry time=] is less than |now|,
+ [=set/remove=] |source| from the [=attribution source cache=].
+
To process an attribution source given an [=attribution source=] |source|:
-1. Let |cache| be the user agent's [=attribution source cache=].
-1. [=list/Remove=] all [=attribution sources=] |entry| in |cache| where |entry|'s [=attribution source/expiry time=] is less than |source|'s [=attribution source/source time=].
+1. [=Delete expired sources=] with |source|'s [=attribution source/source time=].
1. Let |randomizedResponseConfig| be a new [=randomized response output configuration=] whose items are:
: [=randomized response output configuration/max attributions per source=]
@@ -3164,7 +3166,7 @@ To process an attribution source given an [=attribution source=] |sou
|source|'s [=attribution source/randomized response=] is null,
[=attribution source/randomized response=]'s [=list/size=] otherwise.
1. Let |pendingSourcesForSourceOrigin| be the [=set=] of all
- [=attribution sources=] |pendingSource| of |cache| where |pendingSource|'s
+ [=attribution sources=] |pendingSource| of the [=attribution source cache=] where |pendingSource|'s
[=attribution source/source origin=] and |source|'s
[=attribution source/source origin=] are [=same origin=].
1. If |pendingSourcesForSourceOrigin|'s [=list/size=] is greater than or equal
@@ -3261,7 +3263,7 @@ To process an attribution source given an [=attribution source=] |sou
|debugDataTypes|.
1. Run [=obtain and deliver debug reports on source registration=] with
|debugDataTypes|, |source|, and |isNoised|.
-1. [=set/Append=] |source| to |cache|.
+1. [=set/Append=] |source| to the [=attribution source cache=].
Note: Because a fake report does not have a "real" effective destination, we need to subtract from the
privacy budget of all possible destinations.
@@ -3431,7 +3433,7 @@ To parse aggregatable key-values given a [=map=] |map| and a positive
rules for parsing non-negative integers to |value|["[=trigger-registration JSON key/filtering_id=]
"].
1. If |filteringId| is an error, return null.
1. If |filteringId| is not in [=the exclusive range|the range=]
- 0 to 256|maxBytes|, exclusive, return null.
+ 0 to 256|maxBytes|, exclusive, return null.
1. [=map/Set=] |out|[|key|] to a new [=aggregatable key value=] whose items are
: [=aggregatable key value/value=]
:: |value|["[=trigger-registration JSON key/value=]
"]
@@ -3515,7 +3517,7 @@ a [=moment=] |triggerTime|, and a [=boolean=] |fenced|:
with |value|.
1. If |aggregatableTriggerData| is null, return null.
1. Let |filteringIdsMaxBytes| be the result of [=parsing aggregatable filtering ID max bytes=] with |value|.
-1. If |filteringIdsMaxBytes| is null, return null.
+1. If |filteringIdsMaxBytes| is null, return null.
1. Let |aggregatableValuesConfigurations| be the result of running
[=parse aggregatable values=] with |value| and |filteringIdsMaxBytes|.
1. If |aggregatableValuesConfigurations| is null, return null.
@@ -4197,7 +4199,7 @@ To trigger attribution given an [=attribution trigger=] |tri
1. [=list/Remove=] all [=attribution rate-limit records=] |entry| from the [=attribution rate-limit cache=] if the result of running
[=can attribution rate-limit record be removed=] with |entry| and |trigger|'s [=attribution trigger/trigger time=] is true.
-Issue(1287): Consider replacing |debugDataSet| with a [=list=].
+Issue(1287): Consider replacing |debugDataSet| with a [=list=].
Establishing report delivery time
@@ -4264,7 +4266,7 @@ a 64-bit integer priority |priority|, and a [=trigger spec map=] [=map/entry=]
: [=event-level report/report ID=]
:: The result of [=generating a random UUID=].
: [=event-level report/attribution debug info=]
- :: (|source|'s [=attribution source/debug key=], |triggerDebugKey|).
+ :: (|source|'s [=attribution source/debug key=], |triggerDebugKey|).
1. Return |report|.
Obtaining an aggregatable report's required budget
@@ -4401,7 +4403,6 @@ an [=attribution trigger=] |trigger|:
1. Set |reports|[i]'s [=aggregatable attribution report/report ID=] to |verifications|[i]'s [=trigger verification/id=].
1. Set |reports|[i]'s [=aggregatable attribution report/serialized private state token=] to |verifications|[i]'s [=trigger verification/token=].
-
To generate null attribution reports and assign private state tokens given an [=attribution trigger=] |trigger|
and an optional [=aggregatable attribution report=] report defaulting to null:
@@ -4466,7 +4467,7 @@ of running the following steps:
1. If |report| is an:
: [=aggregatable attribution report=]
- ::
+ ::
1. If the result of [=checking if attribution debugging can be enabled=] with
|report|'s [=aggregatable attribution report/attribution debug info=] is true,
return enabled.
@@ -4502,7 +4503,7 @@ of running the following steps:
Note: The inclusion of "`report_id`" in the shared info is intended to allow the report recipient
to perform deduplication and prevent double counting, in the event that the user agent retries
- reports on failure.
+ reports on failure.
: "`reporting_origin`"
:: |reportingOrigin|, [=serialization of an origin|serialized=]
@@ -4510,7 +4511,7 @@ of running the following steps:
:: |report|'s [=aggregatable report/report time=] in seconds since the UNIX epoch, [=serialize an integer|serialized=]
: "`version`"
:: "`1.0`"
-
+
Note: The "`version`" value needs to be bumped if the aggregation service upgrades.
1. If |report|'s [=aggregatable report/debug mode=] is enabled,
@@ -4963,7 +4964,6 @@ an [=origin=] |contextOrigin|, and a [=boolean=] |fenced|:
:: |body|
1. Run [=obtain and deliver a verbose debug report=] with « |data| », |origin|, and |fenced|.
-
# Report Verification Algorithms # {#report-verification}
"Sec-Attribution-Reporting-Private-State-Token
" is a [=structured header=] used