A verb negated with 没 / 没有 cannot be suffixed with 了. Is this true? For example:

I didn't eat breakfast today.


我今天没吃早饭。
我今天没有吃早饭。
我今天没吃早饭了。
我今天没吃饭了。(I didn't eat today.)


This rule implies that 1 and 2 are correct but 3 and 4 are incorrect.

Are 3 and 4 incorrect ?

I feel 4 might be ok when a non-specific object is attached to the verb (i.e. 我没写字了，我没说话了，我没睡觉了)

I feel 3 is a bit awkward when a specific object is attached to the verb (i.e. 我没写了一本书，我没写一本书了，我没说那句话了，我没说了那句话，我没睡了一个晚上，我没睡一个晚上了)
TL;DR: Yes and no.  The most relevant grammar structures are:

没 + [verb] (with no 了), e.g. 我今天没吃饭 (I haven't eaten today);
[duration] + 没 + [verb] + 了, e.g., 我一天没吃饭了 (I didn't eat for one day);

along with:

没 + [noun] + 了, e.g., 我没有米饭了 (I don't have rice [anymore]);
不 + [verb] + 了, e.g., 我今天不吃饭了 (I won't eat today [anymore]).

These last two use the change-of-state 了.
(I'm a learner, so there may be exceptions I'm unaware of.  In writing this answer, I tried to cross-check as much as reasonably possible.)

1. Negating past actions
The most relevant grammar structure is the following.

Subj. + 没有 / 没 + Verb
Negation of past actions with &quot;meiyou&quot;

This should be thought of as the default:

我今天没吃早饭
I haven't eaten breakfast today

There's no semantic distinction between 没 and 没有 here: pick whichever is most suitable in the given context.
Adding in a change-of-state 了 here, if it isn't plain ungrammatical (i.e. no state is being changed), is probably going to sound weird.  This was emphasized in dan's answer.  As another data point, this Zhihu article (although not a reliable source for grammar) talks about how they feel 我还没吃饭了 (I still haven't eaten) is a regional dialect, with one author writing ...这个语法很奇怪 (this grammar is very strange).  However, this doesn't stop it being used: see Baidu &quot;我还没吃饭了&quot;.  As an aside, we can use the modal particle 呢 here: 我还没吃饭呢.
2. Duration of inaction
Using 没...了 with a verb ordinarily (always?) implies we are using the construct:

Subj. + (已经 +) Duration + 没 + Verb + 了
Expressing duration of inaction

(I'll ignore 已经 for simplicity.)  In the running example, 今天 is not a duration.  So here's another example:

我超过二十个小时没吃东西了
I, [for] more than twenty hours, have not eaten anything

If we wanted to use this grammar structure with 今天, we could say:

我今天一天没吃饭了
Today, I haven't eaten all day

3. Change of state (noun)
If you're anything like me, there might be confusion with

没(有) + [Noun Phrase] + 了
Expressing &quot;not anymore&quot; with &quot;le&quot;

It's the change-of-state 了, for when we no longer have something.  For example:

2050年就没有巧克力了 (source)
in 2050, [there] will be no chocolate [future change of state]

4. Change of state (verb)
If we want to highlight a change of state for a verb, the appropriate grammar structure is:

Subj. + 不 + Verb + 了
Change of Situation in the Negative

In this case, there's some variety, such as:

我明天不吃饭了
I won't eat tomorrow [change of decision]
从今以后,我不吃肉了 (source)
From today on, I won't eat meat [current change of state]
我好几年不吃猪肉了 (source)
I, for many years, have not eaten pork [past change of state]

Above we have a change of state, but (for contrast) below we don't (so no 了):

回族不吃猪肉
Hui Muslims don't eat pork [no change of state]