Answer
Check the NLS_LENGTH_SEMANTICS setting of the database session/tool you used to recompile the package — tools like Toad, Oracle SQL Developer, or PL/SQL Developer sometimes have this parameter set to BYTE in their own session defaults, and compiling database objects under a BYTE-semantics session causes those objects to be compiled with byte-based (rather than character-based/CHAR) length semantics. This mismatch is a known cause of exactly this 'buffer too small' error appearing after a routine recompile with no actual code changes. Setting NLS_LENGTH_SEMANTICS to CHAR in your SQL client tool's session/connection preferences before recompiling resolves it — increasing the variable's declared size (as a workaround) treats the symptom rather than the actual BYTE-vs-CHAR semantics mismatch causing it.