Whilst revising the validation rules and thinking about where in the spec the rule about unique ids should reference I discovered that some previous specs (comp & qual) had added a paragraph to the main syntax section on the Scoping of identifiers.
In the case of qual - where this is straight forward there is a paragraph Section 3.7 that just summarises it.
I think it would be good practice for all package specs to include a similar paragraph in the main body of the test. Obviously packages that introduce new id namespacing will do this; but for the sake of clarity I dont think it would be too much repetition to just clearly state that a package does not do this and merely extends the id namespace of core.
I think this is a good idea, I've open a ticket for the FBC spec.
I ended up deciding it made the most sense to talk about this in the 'primitive types' section. Here's what I came up with:
3.2.2 Type SId
The SId primitive data type is used here unchanged from its description in SBML Level 3 Version 1 Core. When used as the type of a groups:id attribute, that ID is added to the core SId namespace, and must continue to follow those rules for uniqueness: no groups:id may duplicate any other groups:id, nor the id of any Model, FunctionDefinition, Compartment, Species, Reaction, SpeciesReference, ModifierSpeciesReference, Event, or Parameter, nor the package:id of any other SBML Level 3 package element that is also defined as being in the SId namespace.