diff --git a/index.bs b/index.bs
index 3e2cdaa1c..2b23dfb33 100644
--- a/index.bs
+++ b/index.bs
@@ -790,7 +790,7 @@ An attribution source is a [=struct=] with the following items:
: internal ID
-:: A [=string=].
+:: An [=internal ID=].
: source origin
:: A [=suitable origin=].
: event ID
@@ -1011,7 +1011,7 @@ An attribution report is a [=struct=] with the following items:
: external ID
:: A UUID formatted as a [=string=].
: internal ID
-:: A [=string=].
+:: An [=internal ID=].
@@ -1125,9 +1125,9 @@ An attribution rate-limit record is a [=struct=] with the following i
: expiry time
:: Null or a [=moment=].
: entity ID
-:: Null for [=obtain a fake report|fake reports=] or an [=event-level report=]'s [=event-level report/internal ID=] or an
- [=aggregatable attribution report=]'s [=aggregatable attribution report/internal ID=] or an
- [=attribution source=]'s [=attribution source/internal ID=].
+:: Null for [=obtain a fake report|fake reports=] or an [=internal ID=] for an
+ [=event-level report=], [=aggregatable attribution report=], or
+ [=attribution source=].
: deactivated for unexpired destination limit (default false)
:: A [=boolean=].
: destination limit priority (default null)
@@ -1302,6 +1302,12 @@ shared among all [=environment settings objects=].
Note: This would ideally use storage bottles to provide access to the attribution caches.
However attribution data is inherently cross-site, and operations on storage would need to span across all storage bottle maps.
+An internal ID is an integer.
+
+To get the next internal ID, return an [=internal ID=] strictly
+greater than any previously returned by this algorithm. The user agent MAY reset
+this sequence when no [=attribution cache=] entry contains an [=internal ID=].
+
# Constants # {#constants}
Valid source expiry range is a 2-tuple of positive [=durations=] that controls the
@@ -2273,7 +2279,7 @@ an [=aggregation coordinator=] |aggregationCoordinator|, and a [=moment=] |now|:
: [=aggregatable debug report/external ID=]
:: The result of [=generating a random UUID=]
: [=aggregatable debug report/internal ID=]
- :: A new unique [=string=]
+ :: The result of [=getting the next internal ID=]
: [=aggregatable debug report/contributions=]
:: |contributions|
: [=aggregatable debug report/aggregation coordinator=]
@@ -2804,7 +2810,7 @@ To parse source-registration JSON given a [=byte sequence=]
1. Let |source| be a new [=attribution source=] struct whose items are:
: [=attribution source/internal ID=]
- :: A new unique [=string=]
+ :: The result of [=getting the next internal ID=]
: [=attribution source/source origin=]
:: |sourceOrigin|
: [=attribution source/event ID=]
@@ -2961,7 +2967,7 @@ A destination limit record is a [=struct=] with the following items:
: time
:: A [=moment=]
: source ID
-:: A [=string=].
+:: An [=internal ID=].
@@ -4396,7 +4402,7 @@ a 64-bit integer priority |priority|, and a [=trigger spec map=] [=map/entry=]
: [=event-level report/external ID=]
:: The result of [=generating a random UUID=].
: [=event-level report/internal ID=]
- :: A new unique [=string=]
+ :: The result of [=getting the next internal ID=]
: [=event-level report/attribution debug info=]
:: (|source|'s [=attribution source/debug key=], |triggerDebugKey|).
1. Return |report|.
@@ -4426,7 +4432,7 @@ an [=attribution trigger=] |trigger|:
: [=aggregatable attribution report/external ID=]
:: The result of [=generating a random UUID=].
: [=aggregatable attribution report/internal ID=]
- : A new unique [=string=]
+ :: The result of [=getting the next internal ID=]
: [=aggregatable attribution report/attribution debug info=]
:: (|source|'s [=attribution source/debug key=], |trigger|'s [=attribution trigger/debug key=]).
: [=aggregatable attribution report/contributions=]
@@ -4461,7 +4467,7 @@ To obtain a null attribution report given an [=attribution trigger=]
: [=aggregatable attribution report/external ID=]
:: The result of [=generating a random UUID=]
: [=aggregatable attribution report/internal ID=]
- : A new unique [=string=]
+ :: The result of [=getting the next internal ID=]
: [=aggregatable attribution report/attribution debug info=]
:: (null, |trigger|'s [=attribution trigger/debug key=])
: [=aggregatable attribution report/contributions=]