[CSSWG] Minutes and Resolutions Paris F2F 2012-02-07 Tue Afternoon II: CSS2.1 Errata, Spec Process Proposal

CSS2.1 Errata
-------------

   Discussed some difficult margin-collapsing issues in CSS2.1

Spec Process
------------

   Tantek proposed a new spec process with triggers for transitions.
   WG agrees the triggers are appropriate for triggering a discussion
   about process transitions, but shouldn't be forcing anything.

====== Full minutes below ======

Present:
     Rossen Atanassov (Microsoft)
     Tab Atkins (Google)
     David Baron (Mozilla)
     Bert Bos (W3C)
     Tantek Çelik (Mozilla)
     John Daggett (Mozilla)
     Elika Etemad (Mozilla)
     Simon Fraser (Apple)
     Sylvain Galineau (Microsoft)
     Daniel Glazman (Disruptive Innovations)
     Vincent Hardy (Adobe)
     Koji Ishii (Invited Expert)
     Håkon Wium Lie (Opera)
     Chris Lilley (W3C)
     Peter Linss (Hewlett-Packard)
     Luke Macpherson (Google)
     Alex Mogilevsky (Microsoft)
     Anton Prowse (Invited Expert)
     Florian Rivoal (Opera)
     Alan Stearns (Adobe)
     Steve Zilles (Adobe)

Observers:
     Jet Villegas (Mozilla Corporation)
     Tavmjong Bah (Inkscape)

<RRSAgent> logging to http://www.w3.org/2012/02/07-css-irc
Agenda: http://wiki.csswg.org/planning/paris-2012

2.1 errata
----------

   antonp: We've got about 88 issues on the bug tracker, with about 20 more
           I'm tracking and need to carry over.
   antonp: The remaining will need a lot of work to decide what's even wrong.
   antonp: The majority of the stuff on the list is not hard, and I think
           just needs to be approved.
   <smfr> https://www.w3.org/Bugs/Public/buglist.cgi?product=CSS&component=CSS%20Level%202&resolution=---
   antonp: So, we're not going to do 88 bugs in the next hour.  What's our
           strategy, and our timeline?
   antonp: There are a few that I think could benefit form a discussion now,
           6 in particular.
   antonp: Which we could do easiest first, or hardest first.
   antonp: So, first, general strategy to get them fixed, then we can discuss
           some specific ones.
   fantasai: I think a good strategy would be to put a couple on each telcon,
             so we burn them down eventually. And have a proposal ready to
             discuss.
   fantasai: So each week, we have one or two CSS 2.1 issues to look at that
             the WG can discuss.
   dbaron: I find it easier to think about a bunch at once, rather than
           switching regularly.
   antonp: Is that because of topic?  The topics divide up well.
   antonp: And then there are many easy editorial-like ones that can push
           through fairly easily.
   dbaron: Okay.  And I think it's good to come up with a proposal.
   fantasai: And if there isn't one, we should be discussing who's writing
             a proposal.
   antonp: Another question, what's our timeline for all of this?
   antonp: What are the reqs for an errata document?
   fantasai: It's continuously maintained.  As soon as we resolve, it goes
             on Bert's to-do list to update the errata.
   fantasai: We'd like to publish an updated 2.1 Rec sometime this year.
   fantasai: Ideally around June, but we can push it to August or whatever
             if necessary, if we have a few more bugs to handle.
   florian: I think most important is to resolve them faster than reported.
   florian: I don't think it's quite necessary to have them all resolved at
            the same time.
   antonp: Sounds reasonable.
   antonp: Most of these are small, editorial tweaks.  Only a small number
           require real thinking.
   antonp: So, do we now want to actually look at some of these beasts?
   antonp: We have two on margin-collapsing, one is kinda hard as it
           contradicts an old resolution.
   * sylvaing has a nagging suspicion Anton considered issue 60 as easy

<tantek> note: for ASCII art, here is a handy web-based visual editor:
          http://www.asciiflow.com/
Scribe: fantasai

   <dbaron> http://www.w3.org/TR/CSS21/box.html#collapsing-margins
   Anton draws on the board
   Anton: Partial margin collapsing could have been the perfect solution,
          but also kindof hard.
   Anton: This is the rewrite of the old margin collapsing stuff
   (points to screen)
   Anton: I'm using this wording b/c far better than the old wording, and
          for purposes I'm discussing is exactly the same.
   Anton: This is the situation we have. We have a box with a min-height.
          And it has one child, and the child is self-collapsing.
   Anton: The result of collapsing the child is this here (points at dotted
          rectangle inside solid rectangle). It is about to collapse with
          the parent's top margin.
   Anton: Problem is it also wants to collapse with the bottom margin.
   Anton: Not defined what happens there. Does this collapsed margin
         collapse with the bottom or the top or what?
   Anton: There was a discussion of min-height and max-height and their
          effect on collapsing.
   dbaron: There was at one point a distinction between whether min-height
           prevented collapsing through or collapsing the last child's
           bottom margin with the parent's margin when the margin was not
           collapsed with the parent's top margin
   Steve: Sounds like you said the case is already complete.
   dbaron: It's a hard compromise we ended up with
   Anton: There are one or two tiny things that need to be rethought, but
         not relevant to this case.
   dbaron: There was one issue I object to in the rewrite, because it made
           a case where the spec was self-contradictory be defined here.
   Anton: I believe it exists as a contradiction here.
   Anton: This is the contradiction.
   dbaron: I agree there's a contradiction in what to do here.
   dbaron: Last time we discussed it, didn't think about that.
   dbaorn: old spec contradicted itself with what collapsed with what.
   Anton: Think that transferred across. No difference, except this spec
          there's a slight.. it uses adjoining when it means collapsing
          and vice versa.
   <arron> do we have a test page that shows what anton drew on the board?
   Anton: Adjoining is now a non-transitive issue. Collapsing is a
          transitive issue.
   Anton: Collapsing is transitive because a collapsed margin ... Oh,
          hang on, maybe it's not an issue.
   dbaron: I thought we wanted adjoining to be transitive?
   fantasai: I tried. I couldn't do it.
   dbaron: The old contradiction was that there awas a statement that
           these 2 things collapse, and these two things don't.
   fantasai: I think most of the old text is in that note.

   Anton: To approach this problem, worth pointing out what discussions
          were had in the past.
   Anton: Was a very important case in the past where you've got your box
          here, you've actually got a genuine child non-collapsing child
   Anton: And the non-collapsing child has a margin which is really long...
          *draws margin that flows out of the box*
   Anton: and parent has a bottom margin.
   Anton: This child with the bottom margin, the height of that margin is
          bigger than the min-height of the box.
   Anton: What happens here? Does this force the parent to become bigger?
   Anton: Doing something different with min-height and max-height causes
          discontinuities.
   dbaron: They were dropped because something we really wanted to do and
           couldn't get two implementations passing the test suite, but
           what we decided to do didn't make sense.

   Alex: We have resisted conditional margin collapsing that depends on
         content actually hitting min-height or not. min-height has an
         effect or doesn't have an effect.
   Alex: All other aspects of margin collapsing can be calculated before
         layout starts.
   Alex: [...]
   Anton: The reason then that we have ourselves in a weird situation
          is because of that.
   Anton: Now, because there's no instructions about min-height in the
          spec anymore, we have a strange situation where this was a
          self-collapsing element *points at first drawing*
   Anton: Another interesting issue, now, *draws solid box inside bigger
          solid box*
   Anton: Spec says that the bottom margin of this small child collapses
          with the margin on the parent, even though the box is plenty
          big enough to contain the child and its margin
   * arron appreciates fantasai's descriptions of what is drawn on the board.
   <alexmog_>    +---------------+
   <alexmog_>    |               |
   <alexmog_>  +-|---------------|--+  +
   <alexmog_>  | |               |  |  |
   <alexmog_>  | +---------------+  |  |
   <alexmog_>  |  margin 1          |  |
   <alexmog_>  |                    |  | min-height
   <alexmog_>  |                    |  |
   <alexmog_>  |                    |  |
   <alexmog_>  |                    |  |
   <alexmog_>  |                    |  |
   <alexmog_>  +--------------------+  v
   <alexmog_>     margin 2
   Anton: From what I can tell from the minutes and resolutions, it was
          recognized that the resolution didn't solve all the problems,
          and it was recognized that it wasn't solved, would have to be solved
          later
   Anton: Seems to me fundamental problem, should this margin collapse
          with the one down there?
   Anton: Here you can do something sensible.
   Anton: In the case where you've got a non-self-collapsing child, as
          the last child
   Anton: You can do something sensible to collapse its bottom margin
          with the parent's bottom margin.
   Anton: You have to choose, but you can spec something sensible.
   Anton: But in the case where you have self-collapsing margin, you can't
   Anton: How does this margin manifest itself? You have a positive-height
          box, but it's supposed to be self-collapsing.

   dbaron: I see 2 possible changes to spec to fix this.
   dbaron: Minimal one is to change the third bullet under the third bullet
           in definition of adjoining.
           "bottom margin of a last in-flow child and bottom margin of its
            parent if the parent has 'auto' computed height"
   dbaron: To add the condition that either the parent has zero computed
           min-height, or the bottom margin of the last in-flow child does
           not collapse with the top margin of the parent.
   dbaron: Thought we had a condition like that in the spec.
   dbaron: And this condition with an either-or: either parent has zero
           computed-min-height, or, bottom margin of the last child doesn't
           collapse with the top margin of the parent.
   dbaron: What I'd really prefer is to reduce the condition by saying
           it's just "and the parent has a computed zero min-height"
   <dbaron> change from: "bottom margin of a last in-flow child and bottom
            margin of its parent if the parent has 'auto' computed height"
   <dbaron> change to option 1 (minimal):
            "bottom margin of a last in-flow child and bottom margin of its
            parent if the parent has 'auto' computed height and (the parent
            has a zero computed min-height or the bottom margin of the last
            in-flow child does not collapse with the top margin of the parent)"
   <dbaron> change to option 1 (preferred, but I don't remember why we didn't
            do it before): "bottom margin of a last in-flow child and bottom
            margin of its parent if the parent has 'auto' computed height and
            the parent has a zero computed min-height"

   Alex: I think reason min-height is not mentioned there is that we don't
         want to prevent margin collapsing when min-height didn't take effect.
   Alex: If you have min-height of 1px, min-height will not make a difference,
         but will prevent margin collapsing.
   Anton: exactly
   Anton: Seem to be definitely in past resolutions to not distinguish cases
          of whether min-height takes effect or not.
   Anton: But I think you can't have continuity if you think to that.
   dbaron: ...
   Alex: min-height has an effect, and bottom margin doesn't collapse with
         top margin, your position will change ....
   Anton: resolution in the past ...
   Anton: we have to say that those can collapse
   Anton: Brings us back to this case (points at solid solid boxes)
   Alex: ... is pretty rare, and making that work, with all of the complications
         that we have
   Alex: If we make it work, will be pretty complicated, but we're not sure
         how much we really need it.
   Anton: Confirming that we don't exclude min-height in general that would
          be collapsing here.
   Alex: One case you've shown doesn't make any sense, but keeps everything
         predictable
   Anton: Important to decide what we want in this case, b/c will help us
          understand the contradictory case.
   Anton: David your solution is then appropriate for this
          (points to middle picture of collapsed margin inside min-height box)
   Anton: Self-collapsing box sits at the top, doesn't make sense to collapse
         to the bottom.
   Anton: In this case you need to break collapsing with the bottom.

   fantasai: I think we discussed this situation wrt defining the position
             of the self-collapsed element, not here for how to collapse it.
   Anton: Yeah, the border position is well-defined. Just not defined how it
          collapses.
   Anton: The border position sets up a hypothetical situation where you
          don't have these collapsing.

   Anton: There is an issue where if you've got a min-height, you begin by
          doing the calculation based on the normal height, and you do the
           Chapter 10 calculations to determine your height.
   Anton: If that's less than the min-height, then you do your calculations
           again.
   Anton: assuming that the height is then set to the specified min-height.
   Anton: In all of these cases, incidentally, height is assumed to be 'auto'.
   Anton: There's a note in Ch 10.7, that tries to explain something about
          margin collapsing. But I can't understand what that note is saying
          in relation to this.
   Anton: If you're recalculating b/c you're assuming auto height, then
          assuming height = min-height, you run into different rules in margin
          collapsing.
   Anton: Confusing note in 10.7, don't know whether it's trying to address
          this situation or not.
   <dbaron> These steps do not affect the real computed values of the above
            properties. The change of used 'height' has no effect on margin
            collapsing except as specifically required by rules for 'min-height'
            or 'max-height' in "Collapsing margins" (8.3.1).
   <dbaron> (note in 10.7)
   dbaron: I think what the second sentence means is that the change of used
           height has no effect on margin collapsing. (period.) However
           min-height or max-height might have an effect as defined in 8.3.1
   Anton: So, you do all your calculations with height, but not big enough
          b/c have min-height, and have to redo the calculations
   dbaron: Note says that you don't recompute anything wrt margin collapsing.
           It stays the way it was.
   Anton: As in, all relationships of what collapses with what stays the same
   dbaron: yes
   Bert: Your rewrite of that sentence into the two parts is what I understand,
         yes.
   fantasai also agrees with this interpretation.
   <dbaron> Possible rewrite of note: These steps do not affect the real
            computed values of the above properties. The change of used
            'height' has no effect on margin collapsing. 'min-height' and
            'max-height' only affect margin collapsing as specified by the
            rules in in "Collapsing margins" (8.3.1).
   Anton: Ok, with that interpretation of the note... I think that doesn't
          add anything new to this.
   Anton: Think suggestion of preventing margin-collapsing in this case is
          enough to solve the problem, and doesn't contradict what's intended
          by the other rules

   Anton points at child inside larger box case
   Anton: I don't think there's anything that says if this margin collapses
          with the other margin, which border it sticks to.
   Anton: You'll get strange behavior either way, but it's not defined where
          the collapsed margin resides
   Florian: If you say they dont collapse... but that brings up other problems.
   dbaron: Where do we define where the position of the next block is?
   Anton: There is a whole issue on where is actually the top content edge
   dbaron: We do actually define ... in [really convoluted case]
   Anton: You might be right, there might be a loophole in a special case.
         But in the general case not defined.
   ...
   Anton: If we're going to collapse these two things, then it should go to
          the parent. Otherwise it's really odd.
   dbaron: 9.4.1 says the vertical distance between 2 sibling blocks is
           determined by the margin properties
   Anton: With a big leap of faith you can make that work.
   Bert: I know I tried to rewrite that in the Box Module...
   fantasai: I think for things that are a bit handwavy and need a leap of
             faith... well, it's an old spec. We need to rewrite all this,
             and shouldn't do that rewrite as 2.1
   fantasai: Should just fix errors in it.

   fantasai: So I believe there are two issues here.
   fantasai: One is that if you have a self-collapsing only child and a
             min-height, don't collapse the child with the bottom parent
             margin
   fantasai: Other one is, if a parent and child margins collapse, the
             collapsed margin is attached to the border edge of the parent.
   dbaron: I think we should say where the top of a block goes. Which
           right now we don't
   Anton: So we note this down as something that needs to be turned into
         proposed text, discuss that text on the telecon.
   ACTION Anton: Record these two issues and the conclusion, point to
                 these minutes, write a next-action to propose text.
   <trackbot> Created ACTION-435

   Anton: Absolute positioning is defined in terms of the top margin edge
          of something.
   Anton points us to definition of static position
   dbaron: static position doesn't really matter, because UAs may approximate.
   dbaron: I'd try 10.1 or 10.6.4 (?)
   <Rossen> http://www.w3.org/TR/CSS21/visudet.html#static-position
   dbaron quotes from the spec the part about "... would have been the first
          box of the element ... specified clear had been none ..."
   <dbaron> More precisely, the static position for 'top' is the distance
            from the top edge of the containing block to the top margin edge
            of a hypothetical box that would have been the first box of the
            element if its specified 'position' value had been 'static' and
            its specified 'float' had been 'none' and its specified 'clear'
            had been 'none'. (Note that due to the rules in section 9.7 this
            might require also assuming a different computed value for 'display'.)
   <dbaron> (from 10.6.4)
   Anton: Issue is that it says that the static position for top is from the
          top edge of the containing block.. to the top margin edge of the
          hypothetical position
   Anton: So you need to know the top margin edge, which is not well-defined
          in most cases.
   Anton: If margins don't collapse, it's obvious where it is.
   Anton: But when you have margin collapsing in general... you have this
          blob in the middle. can you really say where the top margin edge is?
   Alex: Top of the collapsed margin
   dbaron: Does anyone know why we say top margin edge of the first child
           box rather than top content edge of the box itself?
   dbaron: That might solve the problem. Or may be different and not what we mean.
   Bert: ...
   dbaron: nevermind that question
   Anton: Top margin edge is not a well-defined concept, except in exceptional
          cases
   dbaron: I'm going to suggest this issue lead to someone writing test cases
           to find out what implementations actually do
   Anton: I think this was discussed by Øyvind from Opera, who wrote testcases,
          found there isn't an issue in practice, but spec doesn't reflect the
         practice.
   Anton: Don't think we should define a top margin edge.
   Anton: Example is in the bug tracker somewhere.
   Anton: There's very weird kind of things when you've got self-collapsing
          elements trapped in the middle of a collapsed margin
   anton: Where the self-collapsing element has a 20px top margin, but when
          you calculate it's border position doesn't allow for a top margin
          of 20px
   anton: There aren't enough pixels above the top border edge
   Anton: B/c of this don't think we should define where the top margin edge is.
   Anton: Instead I think where it relies on the top margin edge, seems to be
          a consensus that we should define it relation to the border edge,
          which is well-defined
   Anton: We define static position in terms of the border edge, and then add
          the top margin edge onto it as a correction.
   Steve: That seems to have the effect that in the collapsed margin case, ...
   Anton: It would be this height above its border edge...
   Anton: defining the top margin edge to be up here *points above the collapsed
          margin* doesn't make sense to me, so would rather not do that
   Anton: [my suggestion] seems to match implementations
   Alex: Example of what's defined as margin edge?
   Anton: It's not defined. The text defines static position (10.6.4) in terms
          of the top margin edge, which is not defined.
   <smfr> http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-height
   dbaron: So, I'm ok with whatever bzbarsky is ok with, because I defer
           everything about static position to him.
   dbaron: I also don't especially care. I think it's a horrible concept.
   <Bert> (Something like: "More precisely, the static position for 'top' is
           a length A - B, where A is the distance from the top edge of the
           containing block to the top border edge of a hypothetical box that
           would have been the first box of the element if its specified
           'position' value had been 'static' and its specified 'float' had
           been 'none' and its specified 'clear' had been 'none'; and B is
           the top margin of the element.")
   Anton: b/c spec doesn't make sense as it is, important to make testcases,
          and check that proposed wording doesn't change the behavior of those
          test cases.
   [Alex and Anton discuss the issue]
   Alex: top: auto means it won't move in reasonable cases
   Anton: ...
   Alex: I'm not proposing recollapsing. Saying that for purposes of that
         position, margin is used [...]
   Anton: The way i understand there's inline and block. Inline, no margins.
          If you make inline abspos, it will be shifted down by its margin.
   fantasai disagrees
   fantasai: Inline has a margin, it just doesn't affect line height
   Alex: for block, we know very well ...
   Alex: It's top margin, which we don't have to collapse with anything b/c
         it's positioned.
   Alex: It's inline, it's out of flow.
   Alex: To determine the static, all you do is look at the bottom of this
         line, and it's ... in the current flow and that's it
   Alex: The top margin used for static calculation has now been collapsed
   Alex: It's not even a block for purposes of static layout
   Alex: it's a hypothetical situation
   Alex: For hypothetical situation, nothing to collapse
   Anton: Doesn't explain final result
   Alex: Does. because abpsos elements are out-of-flow that have in-flow
         static position, determined by anonymous line
   Anton: You're saying that abspos elements leave an inline-level placeholder
   Anton: Even if they're blocks.
   Anton: The spec definitely doesn't say that at the moment.
   Anton: In tables it does.
   Alex: Having something absolutely positioned... a line.
   Alex: element has no right to collapse with anything else because it has
         never been a block.
   Alex: only hypothetically
   Alex: it's happening relative to that imaginary line, as if that was a
         line with some kind of content
   Alex: With that no collapsing would happen
   Anton: Where is the position of that line?
   Anton: I see, would be anonymous self-collapsing block.
   Anton: I'm fairly certain it doesn't leave behind a placeholder currently
          in the spec
   Alex: ...
   Alex: Abspos element is inline content
   Alex: That for all other purposes is empty, but it has very well defined
         position
   Anton: I understand the argument you're making, but I don't think the spec
          is there.
   Anton: Spec says to treat it as non-abspos to find its position, and if
          it's a physical inline-level box. You're redoing layout with a
          different assumption.
   Anton: But you're saying when it's abpsos, it leaves behind a placeholder
          that affects layout.
   Alex: ...
   Alex: That defines inline position of abspos
   Alex: our implementation also has a line which might be empty which has
         a... ok Rossen disagrees.
   Anton: I honestly don't think that's what the spec says.
   Alex: I think it's good idea to define hypothetical position precisely.
   Alex: Rossen do you disagree with anything I said?
   Rossen: abspos elements that are blocks, ... we do not collapse margins
   Rossen: So, we will not use the collapsed position for abspos elements.
   Rossen: This is what everyone currently does
   Rossen: I agree with Alex on something he said in the beginning.
   Rossen: which is, if we insist to keep this top margin position, then we
           also need to specify it if the margin didn't collapse
   Anton: So when it said you must treat it as if it's position static, and
           float is what it was, etc. etc. You'd add another one that says
           "And margins of this element did not collapse"
   Rossen: But that to me seems to open a can of worms.
   Anton: You're saying if it was a static block, imagine you had a static
          block, and its float was not reset to none, and clear really have
          an effect, and imagine that it didn't collapse any margins...
   Anton: But you have to be more specific: not collapse which margins?
   Alex: ...
   Anton: Part of calculating static position is you ignore margins..?
   Anton: b/c what happens with its children and their margins, which used
          to collapse/not collapse
   Anton: i think testcases are the way to go here.
   Anton: Don't think it's as simple as saying "don't collapse margins"
   Anton: Of course won't collapse it's margins when its positioned anyway
   Anton: b/c won't collapse once it's been abspos
   Alex: ... a lot of simplifications to not overcomplicate the positioning
   Alex: A lot of ... are not going to happen the same way as in normal layout
   Anton: I don't have an opinion on this, just as the moment it's not
          currently well-defined.
   Anton: Need a way to define it. Which *might* be placeholders, or [...]
   Rossen: Asked for action item to have a section on that in css3-positioning
   Anton: We still need to do something for CSS2.1, because the text doesn't
          make sense atm because it relies on an undefined concept.
   Anton: The proposal on the list was to do it in terms of border position,
          then tweak it to account for the margin.
   Alex: UAs are free to make a guess, so that makes it completely free.
   fantasai: So, we've been discussing this for awhile. How about you write
             proposed text in terms of the border edge, since it seems that's
             a good way to go. And if Alex wants to implement that in terms
             of a placeholder in a line box in a self-collapsing anonymous
             block, that's fine.
   fantasai: Just make sure there's testcases and the spec *results* match
             implementation *results*
   ACTION Anton: write proposed text and testcases
   <trackbot> Created ACTION-436

   Anton: Does the root element establish a BFC root?
   dbaron: I think it's established by the ICB, not the root element
   Rossen: If you want to model the browser window, how would you do it? You
           would create a <div> with fixed size, and make it overflow: auto
           so you get scrollbars. That's your viewport
   Rossen: This is what we do in IE.
   Rossen: ICB is not exception to anything
   Rossen: It's just an element, just not accessible to OM
   Rossen: If this is what you mean, then I agree it should be a BFC.
   Rossen: If you mean the root element, then should be driven by properties.
   Florian: I believe in Opera we treat the root element as an abspos.
   Rossen: Up to implementer, but if you model this as an element, but needs
           to have auto scrollbars, so needs to be a BFC.
   fantasai: Root element is not the ICB
   Anton: I'm talking about the document root element
   <dbaron> https://www.w3.org/Bugs/Public/
   <dbaron> https://www.w3.org/Bugs/Public/show_bug.cgi?id=15702
   <dbaron> https://bug590491.bugzilla.mozilla.org/attachment.cgi?id=469029
   dbaron suggests people to run this testcase
   dbaron: Question is, where is the orange bar?
   dbaron: chrome has changed to match Gecko since this was written
   topic deferred to tomorrow

   <dbaron> I've sent the whiteboard photos from the 2.1 discussion to
            www-archive, but they haven't gotten through yet.

   <dbaron> http://lists.w3.org/Archives/Public/www-archive/2012Feb/0011.html
   <dbaron> http://lists.w3.org/Archives/Public/www-archive/2012Feb/0010.html
   <arron> dbaron, thanks for doing that I will hopefully be able to understand
           the 2.1 conversation better now.
   <dbaron> timestamps in CET
   <dbaron> and metadata in UTC

Spec Process
------------

   [See Tantek's proposal in the appendix below]
   Tantek: Started to try document our spec development process, and how we
           try to move faster within W3C process
   Tantek: Top is complaints we have
   Tantek: Trying to look at positive side here, how to improve in the future
   tantek: Have some principles:
   Tantek: Publish early and often to show interest/activity
   Tantek: Transparently note objections/issues
   Tantek: Advance as rapidly impelmentations and tests show interop
   Tantek: Drop/postpone features lacking implementations rather than trying
           to keep things together.
   Tantek: In short, I think any editor, anyone in CSSWG shoudl be able to
           check in editor's draft that agrees with the charter.
   Tantek: When objections are noted, editor's responsiblity to include in
           the draft.
   glazou: ... No, not possible. Would break discusison of [...]
   glazou: Any idea must be proposable to the WG, and our role afterwards to
           decide whether to include charter
   plinss: Stike requirement that it be in the Chater
   ChrisL: That first point is about transition *to* editor's draft
   plinss: For example Tab's hierarchies thing. He's not creating an editor's
           draft, he's creating a proposal.
   plinss: From idea to proposal document, anyone can check anything in,
           doesn't have to match our charter
   plinss: To move from proposal to ED, need to have a charter discussion
   Tantek: Next one is important. Sometimes takes way too long for EDs to
           pushed as FPWD. We need to be much be more active about this.
   Tantek: Suggest that as soon as something is implemented, we push it to FPWD.
   ChrisL: Why wait that long? Does that mean without implementation, you
           can't publish FPWD?
   Tantek: No, this is saying to treat it as a forcing function.
   glazou: I have one big concern with this step. if the implementation
           implements something that is not stabilized, and even under
           strong scrutiny and criticism, the implementation won't reflect
           the discussion and the fact that it's not stabilized
   glazou: This is WHATWG approach that specs do not matter, only implementers do
   ChrisL: earlier is better b/c of IP timer
   ChrisL: As soon as there's a list of features, even not clear what they
           are, that's when you want to push for FPWD
   <ChrisL> because there is a 150 day exclusion period. and any feature not
            in that fpwd can still be excluded following last call
   dbaron: So, what it looks to me,
   dbaron: If someone believes there is something in a draft they believe
           should not be in CSS, the first point to object is the PR boat.
   Tantek: No, editor's draft. Has to be documented in the editor's draft.
   dbaron: But what does that note lead to? Does the note end up in a PR?
   Tantek: Point of note is to list it as there being contention.
   glazou: Note that editor's draft can be modified without WG approval.
   fantasai: I think one of dbaron's points -- that the current policy of the
             WG that we go to FPWD when there's agreement that we want to work
             on it.
   fantasai: And if we don't get to that agreement we don't publish as FPWD.
   fantasai: We have to get consensus in the WG that we want to work on it
             before we go to FPWD, and that's not reflected here.
   Tantek: That's part of the goal is to prevent somebody to stop something
           from being published just by objecting.
   plinss: She's talking about whether there's even consensus to work on the
           draft.
   fantasai: If we go with your proposal, then a single vendor can, just by
             implementing a feature and writing a spec for it, publish a
             WD on /TR/ as if it represented WG consensus
   sylvain: Take the hierarchies example earlier today.
   plinss: I don't think it makes sense to publish FPWD of something where
           there's no consensus to work on it.
   Steve: But you don't get ED without a consensus
   fantasai: Why are we distinguishing Proposal vs. Editor's Draft Without
             FPWD? If we have agreement to work on something, it should go
             to PFWD. Why not have it on /TR?
   Tantek: if you have a shipping implementation, you should get FPWD
   glazou: I strongly object to that.
   plinss: We have things we've published and then lost interest in.
   plinss: Don't think we need a forcing function here.

   <dbaron> So I think a problem with this model is that these transitions
            lead to implementations as well.
   dbaron: I think the underlying issue that this idea doesn't consider is
           that all of these transitions themselves cause implementations.
   dbaron: The act of putting something on dev.w3.org increases the possibility
           of implementation.
   dbaron: Pushing to FPWD maybe makes it more likely.
   dbaron: We have the power to influence what gets implemented. And we should
           consider how we use it.
   Tantek: Problem is we are being behind. Editor's drafts are being published
           and implemented. W3C Process is being circumvented, and nobody's
           talking about it.
   Tantek: Stuff is happening, let's move forward.
   glazou: An editor's draft can be modified without WG approval.
   glazou: Which means a member of this WG can edit a draft, and the draft
           goes to FPWD without approval of the WG. I don't want that.
   Florian: Your model assumes any proposal is a positive one. Which is not
            necessarily true.
   Florian: I think if something ships and we don't have a WD, we should be
            considering it. But we shouldn't automatically go to draft. It
            should be a trigger to consider it.
   glazou: It should go on the radar of WG. But that's already the case.
   plinss: If these are phrased as these force us to discuss it, that's fine.
   glazou: A WD is published automatically? *shakes head*
   plinss: We can't publish a transition without a group resolution anyway.

   Steve: I was just going to say, W3C took action to move submissions from
          TRs to put them in a different place b/c they found the system was
          being gamed by ppl writing things and submitting them and saying
          they're now a W3C spec, 'cuz now on the W3C site.
   Steve: So there is reason for what Florian and Daniel said. Need
          consideration to keep people gaming the system.
   Tantek: It's worse now. /TR doesn't matter anymore. Editor's drafts are
           being implemented.
   Steve: Saying that you're shipping a W3C standard...
   Tantek: They say they're implementing a W3C standard and link to editor's
           draft
   jdaggett: That's a little bit of a separate issue.
   Steve: I don't believe we're contributing to that piece of it.
   jdaggett: I think you're trying to accelerate things based on implementations
             being available.
   jdaggett: Problem is you start spitting out specs in chunks. Definitely be
             more confusing.
   smfr: We just did that with css3-images
   Steve: We're collecting implementation reality. That's a good thing.
   plinss: As long as you have interoperable implementations, then ..
   jdaggett: You realize this means this is beginning of every spec is one
             property. Every property has one spec.
   Florian: Not necessarily. Did for gradients because there is urgency on
           gradients themselves.
   glazou: Don't make it one implementation. Make it two. Then you don't
           have a working draft, you have a CR. You can even have implementation
           reports and move fast.
   glazou: Have browser vendors propose things that are more stable.
   Tantek: Let me finish summarizing.
   Tantek: From WD to LC, as soon as any feature has two itneroperable
           implementations, according to test suites etc,
   Tantek: The draft goes to Last Call. Any features that are not implemented
           at all get listed as at-risk.
   Tantke: Next step is CR.
   glazou: For step 2 have a problem.
   glazou: In history of WG, we have never made test suites before CR. Not
           sure that members have showed enough commitment to require test
           suites before CR.
   glazou: We've tried.
   glazou: Unless we move to CR, no point.
   ChrisL: But we can encourage that. And often people post samples.
   ChrisL: Just collect examples in your spec and you have some tests.
   glazou: I can live with it, we can try.
   plinss: Reality is as soon as someone writes an implementation, they are
           writing their own tests. They just need to write them in W3C format.
   Tantek: Anyone can show a test that disproves your interop.
   Tantek: During LC period.
   Tantek: That resets 6-week LC period.
   Tantek: At the end of that LC period, it goes to CR. Then everything with
           no implementations get dropped. Everything with only one
           implementation gets at-risk.
   Tantek: During CR period, editor can iterate based on implementation
           experience.
   glazou: I think this part of automatic process I agree more.
   glazou: At the end of LC review period, shift to CR *unless* LC period
           has shown blockers.
   glazou: Can have interoperably implemented with design issues that may
           harm the Web in the future
   Steve: non-internationalizable, etc.
   Florian: We can set these as expectations, but not automatic. Look at
            them one by one.
   Tantek: At the end of 6mo CR period
   Tantek: Then it "automatically" goes to PR, and any feature not interop
           by test suite gets dropped.
   Tantek: When I say dropped, I mean postponed.
   Tantek: You just missed the train.
   fantasai: Maintaining multiple versions of the same draft is annoying;
             don't want to do that just so we can do CR->REC every 6 months.
   Tantek: Trying to provide path for editor's accelerating their work.
   Florian: As long as these are expectations, not automatic triggers,
            it's okay.

Meeting closed.

====== Spec Process Appendix ======

   By default the CSSWG follows the W3C Process: http://www.w3.org/Consortium/Process/

   Here are some thoughts on improvements.

   ===== test and implementation driven agile spec advancement =====

   One of the most common criticisms of the CSSWG is that specs/features
   take too long. In particular many features have been implemented with
   vendor prefixes, inconveniencing authors and implementers alike for
   *years* and resulting in a need to maintain support for prefixed
   properties or worse [1].
   [1] https://wiki.mozilla.org/Platform/Layout/CSS_Compatibility#CSS_vendor-prefix_compatibility

   This proposal provides improvements that encourage rapid draft
   advancement based on implementations and tests. - Tantek 2012-038

   ==== principles ====

   Drafts should:
     * be published early and often to show interest/activity
     * transparently note objections/issues
     * advance as rapidly as implementations and tests show interest/interop
     * drop/postpone features lacking implementation(s) to not hold up
       interoperable features

   ==== process for advancement ====

   Here are proposed improvements to accelerate the advancement of specs.
   These improvements can be adopted by the group as a whole, but they're
   also designed for individual editors to follow as a way to more rapidly
   advance their drafts.

   ✍ ->ED.
     Any member of the CSSWG may check-in an editor's draft to present
     ideas/content for consideration. Contents of the draft must be
     within the WG charter. Any objections raised by CSSWG members must
     be noted in the ED.
   ED->WD.
     When any feature is implemented (as shown by publicly posted test
     case document), a public working draft is published.
   WD->LC.
     When any feature is interoperably implemented by more than one
     implementation, the WD is automatically published as a LC with a
     6 week review period. Any unimplemented feature is marked *at-risk*.
       * This assessment is made at the CSSWG telcon/f2f.
       * Since the CSSWG telcon is on Wednesday and the draft publication
         occurs the next Tuesday, if anyone posts a public test case
         document that disproves the interoperability before that Monday,
         the LC is merely published as another WD.
       * When anyone posts public test case document(s) that disproves
         interoperability of all previously shown interoperable features,
         the LC review period clock is stopped.
       * When implementations are updated to once again demonstrate
         interoperability of at least one feature, the 6 week LC review
         period is restarted as of that date.
   LC->LC
     updates may be published per editor discretion, e.g. when more
     features are implemented, which may result in fewer being *at-risk*.
     This restarts a new 6 week LC review period.
   LC->CR
     At the end of the LC review period, the LC is automatically published
     as a CR with a 6 month implementation period. Any unimplemented
     features are dropped and postponed to the next version. Any features
     with only one implementation, or not interoperably implemented are
     marked *at-risk*.
   CR->CR
     Updates may be published per editor discretion, e.g. when more
     features are interoperably implemented, which may result in fewer
     being marked *at-risk*. The 6 month implementation period is *not*
     restarted.
   CR->PR
     At the end of the CR implementation period, the CR is automatically
     published as a PR. Any features that are not interoperably implemented
     are dropped and postponed to the next version.
   PR->REC
     Follow standard W3C process. Suggestions welcome.

Received on Sunday, 12 February 2012 00:12:12 UTC