Mimi Yin wrote:
Okay, I think there may only be 1 minor thing at the very bottom I
forgot to mention earlier...everything else seems fine...see comments
in-line..
OK - I'm getting rid of all the "fine" stuff - the rest is below.
...Bryan
[...]
OK - I've changed the spec to read:
* Changing the user alarm time on an item, or the event start or
end time on an event, or stamping an item as an event
* If it's an event:
* LATER if the start date is in the future **or* if
there's an alarm in the future*
* else DONE if the end date is in the past
* else NOW otherwise.
* (Note that items newly stamped as events are "anytime
today", and will thus be NOW.)
* Otherwise, if the item has an alarm time in the future
* LATER
* Otherwise, the triage status is left alone.
Sorry to keep nit-picking on this phrase. I'm not sure the above
captures all the scenarios. Here's another pass at it. Should we be
clear in the language that this is all trigger off the user
doing explicitly changing dates and times? as opposed to time passing.
* If it's an event:
* NOW *if the start date is moved to now, or the start date
is before now and the end date is after now *or* if an alarm is set
to now*
* else LATER if the start date is moved to the future **or*
if an alarm is set to the future*
* else DONE *if the end date is moved to the past*
* (Note that items newly stamped as events are "anytime
today", and will thus be NOW.)
* Otherwise, the triage status is left alone.
No: my description is more accurate and more succinct, and reflects
that the decision isn't based on which attribute the user changed to
trigger this autotriaging. Give me an example where it's wrong, and
what it should have done, and I'll change it.
Okay, I'm wondering if the rules you had would work for the following:
An event has an end-date in the past and then sets an Alarm to right
NOW, will the item get auto-triaged to DONE? Or An event has a
start-date in the future and an Alarm is set to NOW, will the item get
auto-triaged to LATER?
I guess, mostly I'm worried about alarms getting set to NOW and
auto-triaging not working properly, but I'm guessing that the
'Tickling' takes over to make things NOW at the appropriate time?
I did discover a flaw in the spec: when I added the "*or* if an alarm is
set to the future" clause to the LATER case, I should've also added a
clause to the DONE case too: it really should be this:
* LATER if the start date is in the future or if there's an
alarm in the future
* else DONE if the end date is in the past *or if there's an
alarm in the past.*
* else NOW otherwise.
The troublesome part is that it's ridiculously hard to set an alarm for
"right now"; even if your timing is microsecond-perfect once, you'll
never be able to reproduce those conditions. We need to specify behavior
that's repeatably verifiable, so instead, I specify "in the future" or
"not in the future", so that it's possible to implement, and to come up
with tests that set alarms for a little bit in the future, or a little
bit in the past, to see if they behave the way we want.
(It's also confusing because our time references have sub-minute
resolution: Back to your examples in a moment, but imagine you have an
event at 11:00 AM. It's actually at 11:00:00.000 AM: eleven hours, zero
minutes, zero seconds, zero milliseconds. If you wait until the clock in
your toolbar says "11:00" (pretend it's digital, and not your fancypants
Macintosh shiny sweep-secondy dashboard widget :-) ), it's after the
event time, so you're setting an alarm in the past (and it'll never go
off). If you set it even a tiny bit in the future (that is, if you wait
until 58 sections after your clock reads 10:59, so you're pretty close
to the actual precise internal event time), you'll set up an alarm in
the future, and it'll fire normally without us having to have any
special cases for "now" in the auto-triage stuff. Those special cases
would essentially *never* matter in real life, since no one sets alarms
for "right now" unless they're testing, so why bother?)
OK, so back to your examples: they're both cases of changing an alarm on
an item, so the relevant part of the spec is the "Changing the user
alarm time on an item... " section, and we're dealing with events in
both cases, so we're in the right place -- the rule I just tweaked is
the one that'll be used.
Your first question asks "An event has an end-date in the past and then
sets an Alarm to right NOW, will the item get auto-triaged to DONE?" --
Since we can't set an alarm for "right NOW", I'll be more specific: the
time you entered for the alarm is "11:00 AM", and you wait for the clock
to read "11:00" before you hit "enter" to commit the alarm time. If you
say you want an alarm at "11:00 AM", the time it's setting is
11:00:00.000 AM, but in the time it took your eyes to see that your
clock read "11:00" and got your muscles to hit the enter button, the
actual time moved past 11:00 exactly, to, say, 11:00:00.345 AM, which is
later than the alarm you just set. Therefore, you're setting an alarm in
the past, so the event will be marked DONE, just as if you'd waited
until 11:00 to set an alarm for 10:30 the same morning.
(I still think autotriaging based on expired alarms is wrong, which is
partly why I forgot to add that extra clause. If you agree, I can take
it back out.)
OK, so if I interpret your first question another way: the time you
entered for the alarm is still "11:00 AM", but you hit "enter" to apply
it after waiting for your clock to change to "10:59AM", then carefully
counting "1-mississippi, 2-mississippi" ... "56-mississippi,
57-mississippi, 58-mississippi, <enter>!" The "LATER if the start date
is in the future or if there's an alarm in the future" case applies: the
event's button triageStatus will be set to LATER, button
triageStatusChanged will be set to "11:00 AM", but it's sort order won't
change (because its previous button triageStatus and button
triageStatusChanged will be copied to sectionTriageStatus &
sectionTriageStatusChanged first).
Right away, though, probably imperceptibly later, the alarm will fire,
which triggers a different autotriage rule: the item will get its button
triageStatus set to NOW. (The code will also set button
triageStatusChanged to the alarm time, 11:00AM, but it already has that
value.) Because we don't move unpurged items willy-nilly, though, the
item won't move to the top of Now until the user purges...
(...Unless you tell me now that this is another case where we want to
override unpurged state, and toss sectionTriageStatus &
sectionTriageStatusChanged, so that the item *does* immediately pop to
the top of the Now section in this case. Note that this is distinct from
the similar case of an alarm firing on an event just after the user had
clicked on a triage widget: that case would never pop to the top when
the alarm fires because we turn off auto triaging when the user creates
an unpurged state by clicking on the widget, remember?)
The next question asked "[...] An event has a start-date in the future
and an Alarm is set to NOW, will the item get auto-triaged to LATER?" --
This also has two answers (whether your alarm is a teensy bit in the
past vs. a teensy bit in the future): If in the past, it'll work just
like the first case described above (DONE); if in the future, like the
second (LATER, but when the alarm immediately fires, it'll be set to NOW).
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Open Source Applications Foundation "Design" mailing list
http://lists.osafoundation.org/mailman/listinfo/design