PACKAGE-FUNCTION-CONSISTENCY:USE argument to MAKE-PACKAGE or IN-PACKAGE - the first argument to IN-PACKAGE, FIND-PACKAGE, RENAME-PACKAGE or DELETE-PACKAGE - the second argument to INTERN, FIND-SYMBOL, UNINTERN - the second argument to EXPORT, UNEXPORT, IMPORT, SHADOWING-IMPORT, and SHADOW - the first argument (or a member of the list which is the first argument) to USE-PACKAGE or UNUSE-PACKAGE. - all package-name arguments in DEFPACKAGE except for the name and nicknames of the package being defined. - the first argument to PACKAGE-NAME, PACKAGE-NICKNAMES, PACKAGE-USE-LIST, or PACKAGE-USED-BY-LIST - the PACKAGE argument to DO-SYMBOLS. - the PACKAGE argument to DO-EXTERNAL-SYMBOLS. - the PACKAGE argument to DO-ALL-SYMBOLS.
If FIND-PACKAGE is given a package object as an argument, it simply returns it.
Clarify that the function MAKE-PACKAGE permits only a package name as an argument since it does not make sense to create an existing package.
Clarify that package nicknames must always be expressed as package names (symbols or strings) and may never be actual package objects.
In the list above, IN-PACKAGE may be changed to SELECT-PACKAGE if IN-PACKAGE-FUNCTIONALITY:NEW-MACRO passes.
(INTERN "FOO" "KEYWORD") => :FOO
(DEFVAR *FOO-PACKAGE* (MAKE-PACKAGE "FOO")) (RENAME-PACKAGE "FOO" "FOO0") (PACKAGE-NAME *FOO-PACKAGE*) => "FOO0"
(PACKAGE-NAME "SYS") might return "SYSTEM".
FIND-PACKAGE and IN-PACKAGE require names.
It would be possible to say that MAKE-PACKAGE took package objects as arguments and just returned that package. That might have limited usefulness on rare occasions, but mostly seemed too far out in left field to bother suggesting it.